se-design 1.0.74 → 1.0.76-dev1

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 (487) hide show
  1. package/dist/assets/icons/combobox-field.svg +6 -0
  2. package/dist/assets/style.css +1 -1
  3. package/dist/components/AccessibleDiv/index.d.ts +24 -0
  4. package/dist/components/Checkbox/index.d.ts +12 -0
  5. package/dist/components/CustomAccordion/index.d.ts +1 -0
  6. package/dist/components/CustomModal/index.d.ts +15 -12
  7. package/dist/components/DatePicker/useDatePickerA11y.d.ts +50 -0
  8. package/dist/components/Dropdown/index.d.ts +13 -0
  9. package/dist/components/Icon/index.d.ts +8 -2
  10. package/dist/components/InputWithIcon/index.d.ts +9 -1
  11. package/dist/components/LabelChip/index.d.ts +1 -0
  12. package/dist/components/Modal/index.d.ts +1 -0
  13. package/dist/components/PhoneInput/index.d.ts +13 -5
  14. package/dist/components/Popover/index.d.ts +2 -0
  15. package/dist/components/SidebarOverlay/index.d.ts +8 -0
  16. package/dist/components/index.d.ts +1 -0
  17. package/dist/index.js +144 -133
  18. package/dist/index.js.map +1 -1
  19. package/dist/index10.js +23 -59
  20. package/dist/index10.js.map +1 -1
  21. package/dist/index100.js +1 -1
  22. package/dist/index100.js.map +1 -1
  23. package/dist/index101.js +2 -2
  24. package/dist/index101.js.map +1 -1
  25. package/dist/index102.js +2 -2
  26. package/dist/index102.js.map +1 -1
  27. package/dist/index103.js +1 -1
  28. package/dist/index103.js.map +1 -1
  29. package/dist/index104.js +1 -1
  30. package/dist/index104.js.map +1 -1
  31. package/dist/index105.js +1 -1
  32. package/dist/index105.js.map +1 -1
  33. package/dist/index106.js +2 -2
  34. package/dist/index106.js.map +1 -1
  35. package/dist/index107.js +2 -2
  36. package/dist/index107.js.map +1 -1
  37. package/dist/index108.js +1 -1
  38. package/dist/index108.js.map +1 -1
  39. package/dist/index109.js +2 -2
  40. package/dist/index109.js.map +1 -1
  41. package/dist/index11.js +70 -63
  42. package/dist/index11.js.map +1 -1
  43. package/dist/index110.js +2 -2
  44. package/dist/index110.js.map +1 -1
  45. package/dist/index111.js +1 -1
  46. package/dist/index111.js.map +1 -1
  47. package/dist/index112.js +2 -2
  48. package/dist/index112.js.map +1 -1
  49. package/dist/index113.js +2 -2
  50. package/dist/index113.js.map +1 -1
  51. package/dist/index114.js +1 -1
  52. package/dist/index114.js.map +1 -1
  53. package/dist/index115.js +2 -2
  54. package/dist/index115.js.map +1 -1
  55. package/dist/index116.js +1 -1
  56. package/dist/index116.js.map +1 -1
  57. package/dist/index117.js +2 -2
  58. package/dist/index117.js.map +1 -1
  59. package/dist/index118.js +1 -1
  60. package/dist/index118.js.map +1 -1
  61. package/dist/index119.js +1 -1
  62. package/dist/index119.js.map +1 -1
  63. package/dist/index12.js +71 -34
  64. package/dist/index12.js.map +1 -1
  65. package/dist/index120.js +2 -2
  66. package/dist/index120.js.map +1 -1
  67. package/dist/index121.js +2 -2
  68. package/dist/index121.js.map +1 -1
  69. package/dist/index122.js +2 -2
  70. package/dist/index122.js.map +1 -1
  71. package/dist/index123.js +2 -2
  72. package/dist/index123.js.map +1 -1
  73. package/dist/index124.js +1 -1
  74. package/dist/index124.js.map +1 -1
  75. package/dist/index125.js +2 -2
  76. package/dist/index125.js.map +1 -1
  77. package/dist/index126.js +1 -1
  78. package/dist/index126.js.map +1 -1
  79. package/dist/index127.js +1 -1
  80. package/dist/index127.js.map +1 -1
  81. package/dist/index128.js +1 -1
  82. package/dist/index128.js.map +1 -1
  83. package/dist/index129.js +1 -1
  84. package/dist/index129.js.map +1 -1
  85. package/dist/index13.js +50 -14
  86. package/dist/index13.js.map +1 -1
  87. package/dist/index130.js +2 -2
  88. package/dist/index130.js.map +1 -1
  89. package/dist/index131.js +2 -2
  90. package/dist/index131.js.map +1 -1
  91. package/dist/index132.js +1 -1
  92. package/dist/index132.js.map +1 -1
  93. package/dist/index133.js +2 -2
  94. package/dist/index133.js.map +1 -1
  95. package/dist/index134.js +1 -1
  96. package/dist/index134.js.map +1 -1
  97. package/dist/index135.js +1 -1
  98. package/dist/index135.js.map +1 -1
  99. package/dist/index136.js +1 -1
  100. package/dist/index136.js.map +1 -1
  101. package/dist/index137.js +1 -1
  102. package/dist/index137.js.map +1 -1
  103. package/dist/index138.js +1 -1
  104. package/dist/index138.js.map +1 -1
  105. package/dist/index139.js +1 -1
  106. package/dist/index139.js.map +1 -1
  107. package/dist/index14.js +15 -9
  108. package/dist/index14.js.map +1 -1
  109. package/dist/index140.js +1 -1
  110. package/dist/index140.js.map +1 -1
  111. package/dist/index141.js +2 -2
  112. package/dist/index141.js.map +1 -1
  113. package/dist/index142.js +2 -2
  114. package/dist/index142.js.map +1 -1
  115. package/dist/index143.js +2 -2
  116. package/dist/index143.js.map +1 -1
  117. package/dist/index144.js +1 -1
  118. package/dist/index144.js.map +1 -1
  119. package/dist/index145.js +2 -2
  120. package/dist/index145.js.map +1 -1
  121. package/dist/index146.js +2 -2
  122. package/dist/index146.js.map +1 -1
  123. package/dist/index147.js +1 -1
  124. package/dist/index147.js.map +1 -1
  125. package/dist/index148.js +1 -1
  126. package/dist/index148.js.map +1 -1
  127. package/dist/index149.js +1 -1
  128. package/dist/index149.js.map +1 -1
  129. package/dist/index15.js +10 -218
  130. package/dist/index15.js.map +1 -1
  131. package/dist/index150.js +2 -2
  132. package/dist/index150.js.map +1 -1
  133. package/dist/index151.js +2 -2
  134. package/dist/index151.js.map +1 -1
  135. package/dist/index152.js +1 -1
  136. package/dist/index152.js.map +1 -1
  137. package/dist/index153.js +2 -2
  138. package/dist/index153.js.map +1 -1
  139. package/dist/index154.js +2 -2
  140. package/dist/index154.js.map +1 -1
  141. package/dist/index155.js +1 -1
  142. package/dist/index155.js.map +1 -1
  143. package/dist/index156.js +1 -1
  144. package/dist/index156.js.map +1 -1
  145. package/dist/index157.js +1 -1
  146. package/dist/index157.js.map +1 -1
  147. package/dist/index158.js +1 -1
  148. package/dist/index158.js.map +1 -1
  149. package/dist/index159.js +1 -1
  150. package/dist/index159.js.map +1 -1
  151. package/dist/index16.js +220 -60
  152. package/dist/index16.js.map +1 -1
  153. package/dist/index160.js +1 -1
  154. package/dist/index160.js.map +1 -1
  155. package/dist/index161.js +1 -1
  156. package/dist/index161.js.map +1 -1
  157. package/dist/index162.js +1 -1
  158. package/dist/index162.js.map +1 -1
  159. package/dist/index163.js +1 -1
  160. package/dist/index163.js.map +1 -1
  161. package/dist/index164.js +1 -1
  162. package/dist/index164.js.map +1 -1
  163. package/dist/index165.js +1 -1
  164. package/dist/index165.js.map +1 -1
  165. package/dist/index166.js +1 -1
  166. package/dist/index166.js.map +1 -1
  167. package/dist/index167.js +1 -1
  168. package/dist/index167.js.map +1 -1
  169. package/dist/index168.js +1 -1
  170. package/dist/index168.js.map +1 -1
  171. package/dist/index169.js +1 -1
  172. package/dist/index169.js.map +1 -1
  173. package/dist/index17.js +60 -99
  174. package/dist/index17.js.map +1 -1
  175. package/dist/index170.js +1 -1
  176. package/dist/index170.js.map +1 -1
  177. package/dist/index171.js +1 -1
  178. package/dist/index171.js.map +1 -1
  179. package/dist/index172.js +2 -2
  180. package/dist/index172.js.map +1 -1
  181. package/dist/index173.js +1 -1
  182. package/dist/index173.js.map +1 -1
  183. package/dist/index174.js +1 -1
  184. package/dist/index174.js.map +1 -1
  185. package/dist/index175.js +1 -1
  186. package/dist/index175.js.map +1 -1
  187. package/dist/index176.js +2 -2
  188. package/dist/index176.js.map +1 -1
  189. package/dist/index177.js +1 -1
  190. package/dist/index177.js.map +1 -1
  191. package/dist/index178.js +1 -1
  192. package/dist/index178.js.map +1 -1
  193. package/dist/index179.js +1 -1
  194. package/dist/index179.js.map +1 -1
  195. package/dist/index18.js +95 -282
  196. package/dist/index18.js.map +1 -1
  197. package/dist/index180.js +2 -2
  198. package/dist/index180.js.map +1 -1
  199. package/dist/index181.js +1 -1
  200. package/dist/index181.js.map +1 -1
  201. package/dist/index182.js +1 -1
  202. package/dist/index182.js.map +1 -1
  203. package/dist/index183.js +1 -1
  204. package/dist/index183.js.map +1 -1
  205. package/dist/index184.js +2 -2
  206. package/dist/index184.js.map +1 -1
  207. package/dist/index185.js +1 -1
  208. package/dist/index185.js.map +1 -1
  209. package/dist/index186.js +2 -2
  210. package/dist/index186.js.map +1 -1
  211. package/dist/index187.js +1 -1
  212. package/dist/index187.js.map +1 -1
  213. package/dist/index188.js +2 -2
  214. package/dist/index188.js.map +1 -1
  215. package/dist/index189.js +2 -149
  216. package/dist/index189.js.map +1 -1
  217. package/dist/index19.js +317 -16
  218. package/dist/index19.js.map +1 -1
  219. package/dist/index190.js +2 -9
  220. package/dist/index190.js.map +1 -1
  221. package/dist/index191.js +2 -6
  222. package/dist/index191.js.map +1 -1
  223. package/dist/index192.js +2 -5
  224. package/dist/index192.js.map +1 -1
  225. package/dist/index193.js +2 -40
  226. package/dist/index193.js.map +1 -1
  227. package/dist/index194.js +2 -59
  228. package/dist/index194.js.map +1 -1
  229. package/dist/index195.js +2 -23
  230. package/dist/index195.js.map +1 -1
  231. package/dist/index196.js +5 -0
  232. package/dist/index196.js.map +1 -0
  233. package/dist/index197.js +152 -0
  234. package/dist/index197.js.map +1 -0
  235. package/dist/index198.js +8 -23
  236. package/dist/index198.js.map +1 -1
  237. package/dist/index199.js +9 -0
  238. package/dist/index199.js.map +1 -0
  239. package/dist/index20.js +15 -31
  240. package/dist/index20.js.map +1 -1
  241. package/dist/index200.js +4 -83
  242. package/dist/index200.js.map +1 -1
  243. package/dist/index201.js +43 -0
  244. package/dist/index201.js.map +1 -0
  245. package/dist/index206.js +26 -0
  246. package/dist/index206.js.map +1 -0
  247. package/dist/index207.js +71 -0
  248. package/dist/index207.js.map +1 -0
  249. package/dist/index21.js +33 -61
  250. package/dist/index21.js.map +1 -1
  251. package/dist/{index209.js → index215.js} +1 -1
  252. package/dist/{index209.js.map → index215.js.map} +1 -1
  253. package/dist/index22.js +57 -76
  254. package/dist/index22.js.map +1 -1
  255. package/dist/{index217.js → index223.js} +1 -1
  256. package/dist/{index217.js.map → index223.js.map} +1 -1
  257. package/dist/{index220.js → index226.js} +2 -2
  258. package/dist/{index220.js.map → index226.js.map} +1 -1
  259. package/dist/index23.js +83 -21
  260. package/dist/index23.js.map +1 -1
  261. package/dist/index235.js +172 -9
  262. package/dist/index235.js.map +1 -1
  263. package/dist/index236.js +3 -4
  264. package/dist/index236.js.map +1 -1
  265. package/dist/index238.js +19 -11
  266. package/dist/index238.js.map +1 -1
  267. package/dist/index239.js +9 -5
  268. package/dist/index239.js.map +1 -1
  269. package/dist/index24.js +20 -222
  270. package/dist/index24.js.map +1 -1
  271. package/dist/index240.js +9 -5
  272. package/dist/index240.js.map +1 -1
  273. package/dist/index241.js +4 -37
  274. package/dist/index241.js.map +1 -1
  275. package/dist/index242.js +170 -2
  276. package/dist/index242.js.map +1 -1
  277. package/dist/index243.js +11 -8
  278. package/dist/index243.js.map +1 -1
  279. package/dist/index244.js +5 -326
  280. package/dist/index244.js.map +1 -1
  281. package/dist/index245.js +5 -49
  282. package/dist/index245.js.map +1 -1
  283. package/dist/index246.js +38 -2
  284. package/dist/index246.js.map +1 -1
  285. package/dist/index247.js +2 -76
  286. package/dist/index247.js.map +1 -1
  287. package/dist/index248.js +7 -92
  288. package/dist/index248.js.map +1 -1
  289. package/dist/index249.js +322 -47
  290. package/dist/index249.js.map +1 -1
  291. package/dist/index25.js +289 -43
  292. package/dist/index25.js.map +1 -1
  293. package/dist/index250.js +49 -7
  294. package/dist/index250.js.map +1 -1
  295. package/dist/index251.js +2 -5
  296. package/dist/index251.js.map +1 -1
  297. package/dist/index252.js +72 -48
  298. package/dist/index252.js.map +1 -1
  299. package/dist/index253.js +93 -2
  300. package/dist/index253.js.map +1 -1
  301. package/dist/index254.js +52 -2
  302. package/dist/index254.js.map +1 -1
  303. package/dist/index255.js +11 -0
  304. package/dist/index255.js.map +1 -0
  305. package/dist/index256.js +8 -0
  306. package/dist/index256.js.map +1 -0
  307. package/dist/index257.js +55 -0
  308. package/dist/index257.js.map +1 -0
  309. package/dist/index258.js +5 -0
  310. package/dist/index258.js.map +1 -0
  311. package/dist/index259.js +5 -0
  312. package/dist/index259.js.map +1 -0
  313. package/dist/index26.js +48 -23
  314. package/dist/index26.js.map +1 -1
  315. package/dist/index27.js +21 -81
  316. package/dist/index27.js.map +1 -1
  317. package/dist/index28.js +101 -138
  318. package/dist/index28.js.map +1 -1
  319. package/dist/index29.js +139 -128
  320. package/dist/index29.js.map +1 -1
  321. package/dist/index3.js +57 -98
  322. package/dist/index3.js.map +1 -1
  323. package/dist/index30.js +133 -69
  324. package/dist/index30.js.map +1 -1
  325. package/dist/index31.js +67 -95
  326. package/dist/index31.js.map +1 -1
  327. package/dist/index32.js +96 -71
  328. package/dist/index32.js.map +1 -1
  329. package/dist/index33.js +70 -38
  330. package/dist/index33.js.map +1 -1
  331. package/dist/index34.js +40 -71
  332. package/dist/index34.js.map +1 -1
  333. package/dist/index35.js +67 -82
  334. package/dist/index35.js.map +1 -1
  335. package/dist/index36.js +99 -54
  336. package/dist/index36.js.map +1 -1
  337. package/dist/index37.js +53 -280
  338. package/dist/index37.js.map +1 -1
  339. package/dist/index38.js +281 -70
  340. package/dist/index38.js.map +1 -1
  341. package/dist/index39.js +69 -80
  342. package/dist/index39.js.map +1 -1
  343. package/dist/index4.js +102 -42
  344. package/dist/index4.js.map +1 -1
  345. package/dist/index40.js +82 -32
  346. package/dist/index40.js.map +1 -1
  347. package/dist/index41.js +26 -43
  348. package/dist/index41.js.map +1 -1
  349. package/dist/index42.js +45 -66
  350. package/dist/index42.js.map +1 -1
  351. package/dist/index43.js +65 -49
  352. package/dist/index43.js.map +1 -1
  353. package/dist/index44.js +53 -139
  354. package/dist/index44.js.map +1 -1
  355. package/dist/index45.js +132 -179
  356. package/dist/index45.js.map +1 -1
  357. package/dist/index46.js +194 -35
  358. package/dist/index46.js.map +1 -1
  359. package/dist/index47.js +34 -29
  360. package/dist/index47.js.map +1 -1
  361. package/dist/index48.js +31 -145
  362. package/dist/index48.js.map +1 -1
  363. package/dist/index49.js +131 -70
  364. package/dist/index49.js.map +1 -1
  365. package/dist/index5.js +40 -313
  366. package/dist/index5.js.map +1 -1
  367. package/dist/index50.js +80 -371
  368. package/dist/index50.js.map +1 -1
  369. package/dist/index51.js +451 -91
  370. package/dist/index51.js.map +1 -1
  371. package/dist/index52.js +98 -38
  372. package/dist/index52.js.map +1 -1
  373. package/dist/index53.js +35 -35
  374. package/dist/index53.js.map +1 -1
  375. package/dist/index54.js +33 -87
  376. package/dist/index54.js.map +1 -1
  377. package/dist/index55.js +89 -159
  378. package/dist/index55.js.map +1 -1
  379. package/dist/index56.js +157 -143
  380. package/dist/index56.js.map +1 -1
  381. package/dist/index57.js +149 -33
  382. package/dist/index57.js.map +1 -1
  383. package/dist/index58.js +33 -86
  384. package/dist/index58.js.map +1 -1
  385. package/dist/index59.js +80 -113
  386. package/dist/index59.js.map +1 -1
  387. package/dist/index6.js +323 -42
  388. package/dist/index6.js.map +1 -1
  389. package/dist/index60.js +114 -62
  390. package/dist/index60.js.map +1 -1
  391. package/dist/index61.js +62 -147
  392. package/dist/index61.js.map +1 -1
  393. package/dist/index62.js +146 -312
  394. package/dist/index62.js.map +1 -1
  395. package/dist/index63.js +317 -44
  396. package/dist/index63.js.map +1 -1
  397. package/dist/index64.js +44 -142
  398. package/dist/index64.js.map +1 -1
  399. package/dist/index65.js +145 -12
  400. package/dist/index65.js.map +1 -1
  401. package/dist/index66.js +10 -44
  402. package/dist/index66.js.map +1 -1
  403. package/dist/index67.js +42 -15
  404. package/dist/index67.js.map +1 -1
  405. package/dist/index68.js +76 -48
  406. package/dist/index68.js.map +1 -1
  407. package/dist/index69.js +18 -58
  408. package/dist/index69.js.map +1 -1
  409. package/dist/index7.js +44 -51
  410. package/dist/index7.js.map +1 -1
  411. package/dist/index70.js +66 -5
  412. package/dist/index70.js.map +1 -1
  413. package/dist/index71.js +25 -7
  414. package/dist/index71.js.map +1 -1
  415. package/dist/index72.js +105 -0
  416. package/dist/index72.js.map +1 -0
  417. package/dist/index73.js +62 -2
  418. package/dist/index73.js.map +1 -1
  419. package/dist/index74.js +21 -2
  420. package/dist/index74.js.map +1 -1
  421. package/dist/index75.js +5 -2
  422. package/dist/index75.js.map +1 -1
  423. package/dist/index76.js +54 -2
  424. package/dist/index76.js.map +1 -1
  425. package/dist/index77.js +24 -2
  426. package/dist/index77.js.map +1 -1
  427. package/dist/index78.js +9 -2
  428. package/dist/index78.js.map +1 -1
  429. package/dist/index8.js +48 -85
  430. package/dist/index8.js.map +1 -1
  431. package/dist/index80.js +2 -2
  432. package/dist/index80.js.map +1 -1
  433. package/dist/index81.js +2 -2
  434. package/dist/index81.js.map +1 -1
  435. package/dist/index82.js +1 -1
  436. package/dist/index82.js.map +1 -1
  437. package/dist/index83.js +2 -2
  438. package/dist/index83.js.map +1 -1
  439. package/dist/index84.js +1 -1
  440. package/dist/index84.js.map +1 -1
  441. package/dist/index85.js +1 -1
  442. package/dist/index85.js.map +1 -1
  443. package/dist/index86.js +1 -1
  444. package/dist/index86.js.map +1 -1
  445. package/dist/index87.js +1 -1
  446. package/dist/index87.js.map +1 -1
  447. package/dist/index88.js +1 -1
  448. package/dist/index88.js.map +1 -1
  449. package/dist/index89.js +1 -1
  450. package/dist/index89.js.map +1 -1
  451. package/dist/index9.js +91 -27
  452. package/dist/index9.js.map +1 -1
  453. package/dist/index90.js +1 -1
  454. package/dist/index90.js.map +1 -1
  455. package/dist/index91.js +1 -1
  456. package/dist/index91.js.map +1 -1
  457. package/dist/index92.js +1 -1
  458. package/dist/index92.js.map +1 -1
  459. package/dist/index93.js +1 -1
  460. package/dist/index93.js.map +1 -1
  461. package/dist/index94.js +1 -1
  462. package/dist/index94.js.map +1 -1
  463. package/dist/index95.js +1 -1
  464. package/dist/index95.js.map +1 -1
  465. package/dist/index96.js +1 -1
  466. package/dist/index96.js.map +1 -1
  467. package/dist/index97.js +1 -1
  468. package/dist/index97.js.map +1 -1
  469. package/dist/index98.js +1 -1
  470. package/dist/index98.js.map +1 -1
  471. package/dist/index99.js +1 -1
  472. package/dist/index99.js.map +1 -1
  473. package/package.json +1 -1
  474. package/dist/index229.js +0 -7
  475. package/dist/index229.js.map +0 -1
  476. package/dist/index231.js +0 -25
  477. package/dist/index231.js.map +0 -1
  478. package/dist/index232.js +0 -57
  479. package/dist/index232.js.map +0 -1
  480. package/dist/index233.js +0 -22
  481. package/dist/index233.js.map +0 -1
  482. package/dist/index234.js +0 -13
  483. package/dist/index234.js.map +0 -1
  484. package/dist/index237.js +0 -173
  485. package/dist/index237.js.map +0 -1
  486. package/dist/index79.js +0 -5
  487. package/dist/index79.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index200.js","sources":["../src/utils/a11y/useCombobox.ts"],"sourcesContent":["import { useRef, useCallback, useEffect } from 'react';\nimport type { RefObject } from 'react';\nimport { useComboboxNavigation } from './useComboboxNavigation';\nimport { useDismissOnFocusOut } from './useDismissOnFocusOut';\nimport type { UseDismissOnFocusOutReturn } from './useDismissOnFocusOut';\n\nexport interface UseComboboxOptions<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 to change the open state\n */\n onOpenChange: (open: boolean) => void;\n \n /**\n * Callback when an item is selected (Enter key)\n */\n onSelect: (item: T, index: number) => void;\n \n /**\n * Stable ID for the listbox element\n */\n listboxId: string;\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 * CSS selector for option elements (default: '[role=\"option\"]')\n */\n optionSelector?: string;\n \n /**\n * Whether the listbox has any items to show\n * Used for aria-expanded logic\n * Default: items.length > 0\n */\n hasItems?: boolean;\n}\n\nexport interface UseComboboxReturn {\n /**\n * Props to spread on the container element (handles dismiss on focus out)\n */\n containerProps: UseDismissOnFocusOutReturn<HTMLElement>;\n \n /**\n * Props to spread on the combobox input element\n */\n inputProps: {\n role: 'combobox';\n 'aria-expanded': boolean;\n 'aria-haspopup': 'listbox';\n 'aria-controls': string | undefined;\n 'aria-autocomplete': 'list';\n 'aria-activedescendant': string | undefined;\n onKeyDown: (e: React.KeyboardEvent) => void;\n };\n \n /**\n * Props to spread on the listbox element\n */\n listboxProps: {\n id: string;\n role: 'listbox';\n ref: RefObject<HTMLDivElement | null>;\n onMouseDownCapture: (e: React.MouseEvent) => void;\n onMouseUpCapture: (e: React.MouseEvent) => void;\n onMouseLeave: (e: React.MouseEvent) => void;\n };\n \n /**\n * Generate props for an option element at the given index\n * @param selected - Whether this option is the currently selected/chosen value (not keyboard highlight)\n */\n getOptionProps: (index: number, selected?: boolean) => {\n id: string;\n role: 'option';\n 'aria-selected': boolean;\n };\n \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 * Generate stable ID for an option\n */\n getOptionId: (listboxId: string, index: number) => string;\n}\n\n/**\n * Comprehensive hook for implementing WAI-ARIA combobox pattern.\n * \n * Combines:\n * - Keyboard navigation (Arrow Up/Down, Enter, Escape, Tab)\n * - Focus management and dismissal\n * - ARIA attributes for accessibility\n * - Auto-scroll highlighted item into view\n * \n * This hook provides a complete, batteries-included solution for building\n * accessible combobox components (autocomplete, select, search with suggestions, etc.)\n * \n * @example Basic usage\n * ```tsx\n * const MyCombobox = () => {\n * const [isOpen, setIsOpen] = useState(false);\n * const [items, setItems] = useState(['Apple', 'Banana', 'Cherry']);\n * \n * const {\n * containerProps,\n * inputProps,\n * listboxProps,\n * getOptionProps,\n * highlightedIndex\n * } = useCombobox({\n * items,\n * isOpen,\n * onOpenChange: setIsOpen,\n * onSelect: (item) => console.log('Selected:', item),\n * listboxId: 'my-listbox'\n * });\n * \n * return (\n * <div {...containerProps}>\n * <input {...inputProps} />\n * {isOpen && (\n * <div {...listboxProps}>\n * {items.map((item, i) => (\n * <div key={i} {...getOptionProps(i)}>\n * {item}\n * </div>\n * ))}\n * </div>\n * )}\n * </div>\n * );\n * };\n * ```\n * \n * @example With custom ARIA labels and handlers\n * ```tsx\n * const MySearchBox = () => {\n * const [query, setQuery] = useState('');\n * const [suggestions, setSuggestions] = useState([]);\n * const [isOpen, setIsOpen] = useState(false);\n * \n * const { containerProps, inputProps, listboxProps, getOptionProps } = useCombobox({\n * items: suggestions,\n * isOpen,\n * onOpenChange: setIsOpen,\n * onSelect: (suggestion) => {\n * setQuery(suggestion);\n * setIsOpen(false);\n * },\n * listboxId: 'search-suggestions'\n * });\n * \n * return (\n * <div {...containerProps}>\n * <input\n * {...inputProps}\n * value={query}\n * onChange={(e) => setQuery(e.target.value)}\n * aria-label=\"Search\"\n * />\n * {isOpen && suggestions.length > 0 && (\n * <div {...listboxProps} aria-label=\"Search suggestions\">\n * {suggestions.map((suggestion, i) => (\n * <div\n * key={i}\n * {...getOptionProps(i)}\n * onClick={() => {\n * setQuery(suggestion);\n * setIsOpen(false);\n * }}\n * >\n * {suggestion}\n * </div>\n * ))}\n * </div>\n * )}\n * </div>\n * );\n * };\n * ```\n */\nexport function useCombobox<T = any>({\n items,\n isOpen,\n onOpenChange,\n onSelect,\n listboxId,\n loop = true,\n disabled = false,\n optionSelector = '[role=\"option\"]',\n hasItems\n}: UseComboboxOptions<T>): UseComboboxReturn {\n const listboxRef = useRef<HTMLDivElement | null>(null);\n const pointerDownInListboxRef = useRef(false);\n const tabKeyPressedRef = useRef(false);\n \n // Determine if we should show as expanded\n const shouldShowExpanded = hasItems !== undefined ? hasItems : items.length > 0;\n \n // Close dropdown callback\n const closeDropdown = useCallback(() => {\n onOpenChange(false);\n }, [onOpenChange]);\n\n // Ensure pointer state doesn't get stuck when listbox unmounts\n useEffect(() => {\n if (!isOpen) {\n pointerDownInListboxRef.current = false;\n }\n }, [isOpen]);\n \n // Keyboard navigation with aria-activedescendant\n const navigation = useComboboxNavigation<T>({\n items,\n isOpen,\n onSelect,\n onClose: closeDropdown,\n onOpen: () => onOpenChange(true),\n loop,\n disabled,\n listboxRef,\n optionSelector\n });\n \n // Focus out / Escape dismissal\n const dismissHandlers = useDismissOnFocusOut({\n onFocusOut: closeDropdown,\n onEscape: closeDropdown,\n disabled: !isOpen\n });\n\n const containerProps: UseDismissOnFocusOutReturn<HTMLElement> = {\n ...dismissHandlers,\n onBlurCapture: (e) => {\n // Clicking inside a listbox option can blur the input (relatedTarget is null),\n // which would dismiss before the click handler runs. Prevent that.\n if (pointerDownInListboxRef.current) return;\n \n // Tab key pressed - let Tab handler close dropdown, skip blur detection\n if (tabKeyPressedRef.current) {\n tabKeyPressedRef.current = false;\n return;\n }\n \n dismissHandlers.onBlurCapture(e);\n }\n };\n \n // Build input props\n const inputProps = {\n role: 'combobox' as const,\n 'aria-expanded': isOpen && shouldShowExpanded,\n 'aria-haspopup': 'listbox' as const,\n 'aria-controls': isOpen ? listboxId : undefined,\n 'aria-autocomplete': 'list' as const,\n 'aria-activedescendant': \n navigation.highlightedIndex >= 0 \n ? navigation.getOptionId(listboxId, navigation.highlightedIndex) \n : undefined,\n onKeyDown: (e: React.KeyboardEvent) => {\n // Set flag when Tab is pressed (before blur fires)\n if (e.key === 'Tab') {\n tabKeyPressedRef.current = true;\n }\n navigation.handleKeyDown(e);\n }\n };\n \n // Build listbox props\n const listboxProps = {\n id: listboxId,\n role: 'listbox' as const,\n ref: listboxRef,\n onMouseDownCapture: (_e: React.MouseEvent) => {\n pointerDownInListboxRef.current = true;\n },\n onMouseUpCapture: (_e: React.MouseEvent) => {\n pointerDownInListboxRef.current = false;\n },\n onMouseLeave: (_e: React.MouseEvent) => {\n pointerDownInListboxRef.current = false;\n }\n };\n \n // Option props generator\n const getOptionProps = useCallback(\n (index: number, selected: boolean = false) => ({\n id: navigation.getOptionId(listboxId, index),\n role: 'option' as const,\n 'aria-selected': selected\n }),\n [navigation.getOptionId, listboxId]\n );\n \n return {\n containerProps,\n inputProps,\n listboxProps,\n getOptionProps,\n highlightedIndex: navigation.highlightedIndex,\n setHighlightedIndex: navigation.setHighlightedIndex,\n getOptionId: navigation.getOptionId\n };\n}\n"],"names":["useRef","useCallback","useEffect","useComboboxNavigation","useDismissOnFocusOut","useCombobox","items","isOpen","onOpenChange","onSelect","listboxId","loop","disabled","optionSelector","hasItems","listboxRef","pointerDownInListboxRef","tabKeyPressedRef","shouldShowExpanded","undefined","length","closeDropdown","current","navigation","onClose","onOpen","dismissHandlers","onFocusOut","onEscape","containerProps","onBlurCapture","e","inputProps","role","highlightedIndex","getOptionId","onKeyDown","key","handleKeyDown","listboxProps","id","ref","onMouseDownCapture","_e","onMouseUpCapture","onMouseLeave","getOptionProps","index","selected","setHighlightedIndex"],"mappings":"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"}
1
+ {"version":3,"file":"index200.js","sources":["../src/utils/mergeIds.ts"],"sourcesContent":["/**\n * Merges multiple ID strings into a single space-separated string.\n * Filters out falsy values and deduplicates IDs while preserving order.\n * \n * Useful for ARIA attributes (aria-describedby, aria-labelledby) and class names.\n * \n * @param ids - Array of id strings (or undefined/null)\n * @returns Merged space-separated id string, or undefined if no valid ids\n * \n * @example\n * mergeIds('error-1', undefined, 'helper-1', 'error-1')\n * // Returns: 'error-1 helper-1'\n */\nexport function mergeIds(...ids: (string | undefined | null)[]): string | undefined {\n const uniqueIds = [\n ...new Set(\n ids\n .filter((id): id is string => Boolean(id))\n .flatMap(id => id.trim().split(/\\s+/))\n .filter(Boolean)\n )\n ];\n \n return uniqueIds.length > 0 ? uniqueIds.join(' ') : undefined;\n}\n"],"names":["mergeIds","ids","uniqueIds","Set","filter","id","Boolean","flatMap","trim","split","length","join","undefined"],"mappings":"AAaO,SAASA,KAAYC,GAAwD;AAClF,QAAMC,IAAY,CAChB,GAAG,IAAIC,IACLF,EACGG,OAAO,CAACC,MAAqBC,EAAQD,CAAG,EACxCE,QAAQF,CAAAA,MAAMA,EAAGG,OAAOC,MAAM,KAAK,CAAC,EACpCL,OAAOE,OAAO,CACnB,CAAC;AAGH,SAAOJ,EAAUQ,SAAS,IAAIR,EAAUS,KAAK,GAAG,IAAIC;AACtD;"}
@@ -0,0 +1,43 @@
1
+ import { useRef as l } from "react";
2
+ import { useFocusTrap as d } from "./index72.js";
3
+ import { useDismissOnEscape as u } from "./index206.js";
4
+ import { getA11yNameAttributes as c } from "./index78.js";
5
+ import { useStableId as f } from "./index199.js";
6
+ function v({
7
+ isOpen: e,
8
+ onDismiss: s,
9
+ ariaLabel: o,
10
+ ariaLabelledBy: a,
11
+ titleIdPrefix: i = "modal-title",
12
+ initialFocus: m = "first"
13
+ }) {
14
+ const t = l(null), r = f(void 0, i);
15
+ d({
16
+ enabled: e,
17
+ containerRef: t,
18
+ restoreFocus: !0,
19
+ initialFocus: m
20
+ }), u({
21
+ containerRef: t,
22
+ onDismiss: s,
23
+ enabled: e
24
+ });
25
+ const n = {
26
+ role: "dialog",
27
+ "aria-modal": !0,
28
+ tabIndex: -1,
29
+ ...c({
30
+ ariaLabelledBy: a ?? (o ? void 0 : r),
31
+ ariaLabel: o
32
+ })
33
+ };
34
+ return {
35
+ containerRef: t,
36
+ titleId: r,
37
+ dialogProps: n
38
+ };
39
+ }
40
+ export {
41
+ v as useModalA11y
42
+ };
43
+ //# sourceMappingURL=index201.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index201.js","sources":["../src/utils/a11y/useModalA11y.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useFocusTrap } from './useFocusTrap';\nimport { useDismissOnEscape } from './useDismissOnEscape';\nimport { getA11yNameAttributes } from './accessibleName';\nimport { useStableId } from 'src/utils/useStableId';\n\nexport interface UseModalA11yOptions {\n /**\n * Whether the modal is open. Controls focus trap and Escape handler activation.\n */\n isOpen: boolean;\n /**\n * Called when Escape is pressed while focus is within the modal.\n * If undefined, Escape dismissal is disabled.\n */\n onDismiss?: () => void;\n /**\n * aria-label for modals without a visible title heading.\n * Only used when `ariaLabelledBy` is not provided.\n */\n ariaLabel?: string;\n /**\n * ID of an existing visible element (e.g. an h2 inside the modal content) that labels\n * the dialog. Preferred over ariaLabel when a visible heading already exists in the content.\n * Only used when `title` is not provided.\n */\n ariaLabelledBy?: string;\n /**\n * Prefix for the auto-generated title element id. Default: 'modal-title'.\n */\n titleIdPrefix?: string;\n /**\n * Initial focus target when the modal opens. Forwarded to useFocusTrap.\n * - 'first': Focus first focusable element (default)\n * - 'container': Focus the dialog container itself\n * - 'none': Skip — browser handles it (e.g. autofocus attribute on inner element)\n * - CSS selector string: Focus matching element\n * - HTMLElement: Focus specific element\n */\n initialFocus?: 'first' | 'container' | 'none' | string | HTMLElement;\n}\n\nexport interface UseModalA11yReturn {\n /**\n * Ref to attach to the dialog container element.\n */\n containerRef: React.RefObject<HTMLDivElement | null>;\n /**\n * Stable ID to set on the visible title element: `<h2 id={titleId}>`.\n * Only relevant when `title` is provided.\n */\n titleId: string;\n /**\n * Spread onto the dialog container element.\n * Includes: role=\"dialog\", aria-modal, tabIndex, aria-labelledby or aria-label.\n */\n dialogProps: {\n role: 'dialog';\n 'aria-modal': true;\n tabIndex: number;\n [key: string]: unknown;\n };\n}\n\n/**\n * Bundles all WCAG dialog semantics into a single hook.\n *\n * Handles:\n * - Stable ID for title element (aria-labelledby association)\n * - Focus trap: moves focus into modal on open, wraps Tab, restores focus on close\n * - Escape dismissal: calls onDismiss when Escape is pressed within the modal\n * - dialogProps: role=\"dialog\", aria-modal, tabIndex, aria-labelledby / aria-label\n *\n * @example Modal with a visible title (most common)\n * ```tsx\n * const MyModal = ({ isOpen, onClose }) => {\n * const { containerRef, titleId, dialogProps } = useModalA11y({\n * isOpen,\n * onDismiss: onClose,\n * });\n *\n * return (\n * <div ref={containerRef} {...dialogProps} className=\"modal-content\">\n * <h2 id={titleId}>My Title</h2>\n * ...\n * </div>\n * );\n * };\n * ```\n *\n * @example Modal without a visible title\n * ```tsx\n * const { containerRef, dialogProps } = useModalA11y({\n * isOpen,\n * onDismiss: onClose,\n * ariaLabel: 'Upload document',\n * });\n * ```\n *\n * @example Custom initial focus (specific button) or skip (autofocus)\n * ```tsx\n * useModalA11y({ isOpen, onDismiss, initialFocus: '.my-cta-btn' });\n * useModalA11y({ isOpen, onDismiss, initialFocus: 'none' }); // autofocus on inner element\n * ```\n */\nexport function useModalA11y({\n isOpen,\n onDismiss,\n ariaLabel,\n ariaLabelledBy,\n titleIdPrefix = 'modal-title',\n initialFocus = 'first',\n}: UseModalA11yOptions): UseModalA11yReturn {\n const containerRef = useRef<HTMLDivElement>(null);\n const titleId = useStableId(undefined, titleIdPrefix);\n\n useFocusTrap({\n enabled: isOpen,\n containerRef,\n restoreFocus: true,\n initialFocus,\n });\n\n useDismissOnEscape({\n containerRef,\n onDismiss,\n enabled: isOpen,\n });\n\n const nameAttrs = getA11yNameAttributes({\n ariaLabelledBy: ariaLabelledBy ?? (ariaLabel ? undefined : titleId),\n ariaLabel: ariaLabel,\n });\n\n const dialogProps = {\n role: 'dialog' as const,\n 'aria-modal': true as const,\n tabIndex: -1,\n ...nameAttrs,\n };\n\n return { containerRef, titleId, dialogProps };\n}\n"],"names":["useRef","useFocusTrap","useDismissOnEscape","getA11yNameAttributes","useStableId","useModalA11y","isOpen","onDismiss","ariaLabel","ariaLabelledBy","titleIdPrefix","initialFocus","containerRef","titleId","undefined","enabled","restoreFocus","dialogProps","role","tabIndex","nameAttrs"],"mappings":"AAyGO,SAAA,UAAAA,SAAA;AAAA,SAAA,gBAAAC,SAAA;AAAA,SAAA,sBAAAC,SAAA;AAAA,SAAA,yBAAAC,SAAA;AAAA,SAAA,eAAAC,SAAA;AAAA,SAASC,EAAa;AAAA,EAC3BC,QAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,eAAAA,IAAgB;AAAA,EAChBC,cAAAA,IAAe;AACI,GAAuB;AAC1C,QAAMC,IAAeZ,EAAuB,IAAI,GAC1Ca,IAAUT,EAAYU,QAAWJ,CAAa;AAEpDT,EAAAA,EAAa;AAAA,IACXc,SAAST;AAAAA,IACTM,cAAAA;AAAAA,IACAI,cAAc;AAAA,IACdL,cAAAA;AAAAA,EAAAA,CACD,GAEDT,EAAmB;AAAA,IACjBU,cAAAA;AAAAA,IACAL,WAAAA;AAAAA,IACAQ,SAAST;AAAAA,EAAAA,CACV;AAOD,QAAMW,IAAc;AAAA,IAClBC,MAAM;AAAA,IACN,cAAc;AAAA,IACdC,UAAU;AAAA,IACV,GATgBhB,EAAsB;AAAA,MACtCM,gBAAgBA,MAAmBD,IAAYM,SAAYD;AAAAA,MAC3DL,WAAAA;AAAAA,IAAAA,CACD;AAAA,EAMIY;AAGL,SAAO;AAAA,IAAER,cAAAA;AAAAA,IAAcC,SAAAA;AAAAA,IAASI,aAAAA;AAAAA,EAAAA;AAClC;"}
@@ -0,0 +1,26 @@
1
+ import { useEffect as d } from "react";
2
+ function p({
3
+ containerRef: r,
4
+ onDismiss: e,
5
+ enabled: n = !0,
6
+ preventDefault: u = !0,
7
+ stopPropagation: c = !0
8
+ }) {
9
+ d(() => {
10
+ if (!n || !e) return;
11
+ const o = r.current;
12
+ if (!o) return;
13
+ const a = (t) => {
14
+ t.key === "Escape" && o.contains(document.activeElement) && (u && t.preventDefault(), c && t.stopPropagation(), e());
15
+ };
16
+ return document.addEventListener("keydown", a, {
17
+ capture: !0
18
+ }), () => document.removeEventListener("keydown", a, {
19
+ capture: !0
20
+ });
21
+ }, [n, e, r, u, c]);
22
+ }
23
+ export {
24
+ p as useDismissOnEscape
25
+ };
26
+ //# sourceMappingURL=index206.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index206.js","sources":["../src/utils/a11y/useDismissOnEscape.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDismissOnEscapeOptions<T extends HTMLElement = HTMLElement> {\n /**\n * Container element ref to check if focus is within.\n * Escape will only trigger if focus is within this container.\n */\n containerRef: RefObject<T | null>;\n /**\n * Callback when Escape key is pressed and focus is within container.\n */\n onDismiss?: () => void;\n /**\n * Whether the Escape handler is active.\n * Default: true\n */\n enabled?: boolean;\n /**\n * Whether to call preventDefault() when handling Escape.\n * Default: true\n */\n preventDefault?: boolean;\n /**\n * Whether to call stopPropagation() when handling Escape.\n * Default: true\n */\n stopPropagation?: boolean;\n}\n\n/**\n * Hook to handle Escape key dismissal when focus is within a container.\n * \n * This is a UX pattern: if user is interacting with an overlay/sidebar\n * (indicated by focus being within it), Escape should close it.\n * \n * @example\n * ```tsx\n * const MySidebar = ({ isOpen, onClose }) => {\n * const containerRef = useRef<HTMLDivElement>(null);\n * \n * useDismissOnEscape({\n * containerRef,\n * onDismiss: onClose,\n * enabled: isOpen\n * });\n * \n * return <div ref={containerRef}>...</div>;\n * };\n * ```\n */\nexport function useDismissOnEscape<T extends HTMLElement = HTMLElement>({\n containerRef,\n onDismiss,\n enabled = true,\n preventDefault = true,\n stopPropagation = true\n}: UseDismissOnEscapeOptions<T>): void {\n useEffect(() => {\n if (!enabled || !onDismiss) return;\n \n const container = containerRef.current;\n if (!container) return;\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && container.contains(document.activeElement)) {\n preventDefault && e.preventDefault();\n stopPropagation && e.stopPropagation();\n onDismiss();\n }\n };\n\n document.addEventListener('keydown', handleEscape, { capture: true });\n return () => document.removeEventListener('keydown', handleEscape, { capture: true });\n }, [enabled, onDismiss, containerRef, preventDefault, stopPropagation]);\n}\n"],"names":["useEffect","useDismissOnEscape","containerRef","onDismiss","enabled","preventDefault","stopPropagation","container","current","handleEscape","e","key","contains","document","activeElement","addEventListener","capture","removeEventListener"],"mappings":"AAmDO,SAAA,aAAAA,SAAA;AAAA,SAASC,EAAwD;AAAA,EACtEC,cAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,SAAAA,IAAU;AAAA,EACVC,gBAAAA,IAAiB;AAAA,EACjBC,iBAAAA,IAAkB;AACU,GAAS;AACrCN,EAAAA,EAAU,MAAM;AACd,QAAI,CAACI,KAAW,CAACD,EAAW;AAE5B,UAAMI,IAAYL,EAAaM;AAC/B,QAAI,CAACD,EAAW;AAEhB,UAAME,IAAeA,CAACC,MAAqB;AACzC,MAAIA,EAAEC,QAAQ,YAAYJ,EAAUK,SAASC,SAASC,aAAa,MACjET,KAAkBK,EAAEL,eAAAA,GACpBC,KAAmBI,EAAEJ,gBAAAA,GACrBH,EAAAA;AAAAA,IAEJ;AAEAU,oBAASE,iBAAiB,WAAWN,GAAc;AAAA,MAAEO,SAAS;AAAA,IAAA,CAAM,GAC7D,MAAMH,SAASI,oBAAoB,WAAWR,GAAc;AAAA,MAAEO,SAAS;AAAA,IAAA,CAAM;AAAA,EACtF,GAAG,CAACZ,GAASD,GAAWD,GAAcG,GAAgBC,CAAe,CAAC;AACxE;"}
@@ -0,0 +1,71 @@
1
+ import { useRef as a, useLayoutEffect as m, useEffect as g } from "react";
2
+ import { getFirstFocusableElement as f, getLastFocusableElement as F } from "./index71.js";
3
+ import { consumeFocusAnchor as I, consumeLastInteractedElement as E } from "./index72.js";
4
+ const l = {
5
+ position: "absolute",
6
+ opacity: 0,
7
+ pointerEvents: "none",
8
+ width: 0,
9
+ height: 0
10
+ };
11
+ function T({
12
+ isOpen: o,
13
+ isModal: i,
14
+ containerRef: e,
15
+ returnFocusRef: d
16
+ }) {
17
+ const c = a(null), r = a(null), u = a(null);
18
+ return m(() => {
19
+ if (i || !o) return;
20
+ const t = d?.current ?? I() ?? E() ?? document.activeElement;
21
+ if (!(!t || t === document.body))
22
+ return c.current = t, u.current && (u.current.tabIndex = 0), () => {
23
+ u.current && (u.current.tabIndex = -1);
24
+ };
25
+ }, [o, i]), g(() => {
26
+ if (i || !o || !c.current) return;
27
+ const t = requestAnimationFrame(() => {
28
+ (f({
29
+ container: e.current
30
+ }) ?? e.current)?.focus(), r.current && (r.current.tabIndex = 0);
31
+ });
32
+ return () => {
33
+ cancelAnimationFrame(t), r.current && (r.current.tabIndex = -1);
34
+ const s = c.current;
35
+ c.current = null, s?.isConnected && requestAnimationFrame(() => s.focus());
36
+ };
37
+ }, [o, i]), {
38
+ startSentinelProps: {
39
+ ref: r,
40
+ tabIndex: -1,
41
+ style: l,
42
+ onFocus: (t) => {
43
+ if (e.current?.contains(t.relatedTarget) && t.relatedTarget !== e.current) {
44
+ const n = c.current;
45
+ n?.isConnected && n.focus();
46
+ } else
47
+ r.current && (r.current.tabIndex = -1), (f({
48
+ container: e.current
49
+ }) ?? e.current)?.focus();
50
+ }
51
+ },
52
+ endSentinelProps: {
53
+ ref: u,
54
+ tabIndex: -1,
55
+ style: l,
56
+ onFocus: (t) => {
57
+ if (e.current?.contains(t.relatedTarget) && t.relatedTarget !== e.current) {
58
+ const n = c.current;
59
+ n?.isConnected && n.focus();
60
+ } else
61
+ (F({
62
+ container: e.current
63
+ }) ?? e.current)?.focus();
64
+ }
65
+ }
66
+ };
67
+ }
68
+ export {
69
+ T as useFocusSentinel
70
+ };
71
+ //# sourceMappingURL=index207.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index207.js","sources":["../src/utils/a11y/useFocusSentinel.ts"],"sourcesContent":["import { useRef, useEffect, useLayoutEffect } from 'react';\n\nimport { getFirstFocusableElement, getLastFocusableElement } from './focusableElements';\nimport { consumeLastInteractedElement, consumeFocusAnchor } from './useFocusTrap';\n\nconst SENTINEL_STYLE: React.CSSProperties = {\n position: 'absolute',\n opacity: 0,\n pointerEvents: 'none',\n width: 0,\n height: 0,\n};\n\nexport interface UseFocusSentinelOptions {\n /** Whether the panel is currently open. */\n isOpen: boolean | undefined;\n /**\n * When true the hook is a no-op — dialog mode (focus trap) handles focus management instead.\n */\n isModal: boolean;\n /** Ref to the panel container element. */\n containerRef: React.RefObject<HTMLElement | null>;\n /**\n * Explicit element to restore focus to on close.\n * Overrides the automatic trigger capture.\n */\n returnFocusRef?: React.RefObject<HTMLElement | null>;\n}\n\nexport interface SentinelProps {\n ref: React.RefObject<HTMLDivElement | null>;\n tabIndex: number;\n style: React.CSSProperties;\n onFocus: (e: React.FocusEvent) => void;\n}\n\nexport interface UseFocusSentinelReturn {\n /** Spread onto an invisible div placed before the panel content. */\n startSentinelProps: SentinelProps;\n /** Spread onto an invisible div placed after the panel content. */\n endSentinelProps: SentinelProps;\n}\n\n/**\n * Focus management for complementary (non-modal) side panels.\n *\n * Moves focus into the panel on open, restores it to the trigger on close,\n * and wraps Tab / Shift+Tab back to the trigger when focus reaches either end.\n *\n * Sentinel tabIndex values are mutated imperatively (no state) to avoid\n * re-renders. React does not touch a DOM attribute unless the JSX prop value\n * changes, so the initial tabIndex={-1} in the returned props is safe.\n */\nexport function useFocusSentinel({\n isOpen,\n isModal,\n containerRef,\n returnFocusRef,\n}: UseFocusSentinelOptions): UseFocusSentinelReturn {\n const triggerRef = useRef<HTMLElement | null>(null);\n const startSentinelRef = useRef<HTMLDivElement>(null);\n const endSentinelRef = useRef<HTMLDivElement>(null);\n\n // Capture trigger before React commits (document.activeElement is still the opener).\n // Body focus = page-load open → skip so sentinels stay inert.\n useLayoutEffect(() => {\n if (isModal || !isOpen) return;\n const trigger =\n returnFocusRef?.current ??\n consumeFocusAnchor() ??\n consumeLastInteractedElement() ??\n (document.activeElement as HTMLElement);\n if (!trigger || trigger === document.body) return;\n triggerRef.current = trigger;\n if (endSentinelRef.current) endSentinelRef.current.tabIndex = 0;\n return () => {\n if (endSentinelRef.current) endSentinelRef.current.tabIndex = -1;\n };\n }, [isOpen, isModal]);\n\n // Move focus into panel on open; restore to trigger on close.\n useEffect(() => {\n if (isModal || !isOpen || !triggerRef.current) return;\n\n const rafId = requestAnimationFrame(() => {\n const first = getFirstFocusableElement({ container: containerRef.current });\n (first ?? containerRef.current)?.focus();\n // Activate start sentinel so Shift+Tab from first content returns to trigger.\n if (startSentinelRef.current) startSentinelRef.current.tabIndex = 0;\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n if (startSentinelRef.current) startSentinelRef.current.tabIndex = -1;\n const trigger = triggerRef.current;\n triggerRef.current = null;\n if (trigger?.isConnected) {\n requestAnimationFrame(() => trigger.focus());\n }\n };\n }, [isOpen, isModal]);\n\n const handleStartFocus = (e: React.FocusEvent) => {\n const fromInside =\n containerRef.current?.contains(e.relatedTarget as Node) &&\n e.relatedTarget !== containerRef.current;\n if (fromInside) {\n // Shift+Tab from first content → restore trigger\n const trigger = triggerRef.current;\n if (trigger?.isConnected) trigger.focus();\n } else {\n // Natural Tab entry from outside → forward to first content,\n // deactivate so next Shift+Tab exits naturally.\n if (startSentinelRef.current) startSentinelRef.current.tabIndex = -1;\n const first = getFirstFocusableElement({ container: containerRef.current });\n (first ?? containerRef.current)?.focus();\n }\n };\n\n const handleEndFocus = (e: React.FocusEvent) => {\n const fromInside =\n containerRef.current?.contains(e.relatedTarget as Node) &&\n e.relatedTarget !== containerRef.current;\n if (fromInside) {\n // Tab from last content → restore trigger\n const trigger = triggerRef.current;\n if (trigger?.isConnected) trigger.focus();\n } else {\n // Shift+Tab entry from outside → back to last content\n const last = getLastFocusableElement({ container: containerRef.current });\n (last ?? containerRef.current)?.focus();\n }\n };\n\n return {\n startSentinelProps: {\n ref: startSentinelRef,\n tabIndex: -1,\n style: SENTINEL_STYLE,\n onFocus: handleStartFocus,\n },\n endSentinelProps: {\n ref: endSentinelRef,\n tabIndex: -1,\n style: SENTINEL_STYLE,\n onFocus: handleEndFocus,\n },\n };\n}\n"],"names":["useRef","useLayoutEffect","useEffect","getFirstFocusableElement","getLastFocusableElement","consumeFocusAnchor","consumeLastInteractedElement","SENTINEL_STYLE","position","opacity","pointerEvents","width","height","useFocusSentinel","isOpen","isModal","containerRef","returnFocusRef","triggerRef","startSentinelRef","endSentinelRef","trigger","current","document","activeElement","body","tabIndex","rafId","requestAnimationFrame","container","focus","cancelAnimationFrame","isConnected","startSentinelProps","ref","style","onFocus","handleStartFocus","e","contains","relatedTarget","endSentinelProps","handleEndFocus"],"mappings":"AAKA,SAAA,UAAAA,GAAA,mBAAAC,GAAA,aAAAC,SAAA;AAAA,SAAA,4BAAAC,GAAA,2BAAAC,SAAA;AAAA,SAAA,sBAAAC,GAAA,gCAAAC,SAAA;AAAA,MAAMC,IAAsC;AAAA,EAC1CC,UAAU;AAAA,EACVC,SAAS;AAAA,EACTC,eAAe;AAAA,EACfC,OAAO;AAAA,EACPC,QAAQ;AACV;AA0CO,SAASC,EAAiB;AAAA,EAC/BC,QAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,gBAAAA;AACuB,GAA2B;AAClD,QAAMC,IAAalB,EAA2B,IAAI,GAC5CmB,IAAmBnB,EAAuB,IAAI,GAC9CoB,IAAiBpB,EAAuB,IAAI;AAIlDC,SAAAA,EAAgB,MAAM;AACpB,QAAIc,KAAW,CAACD,EAAQ;AACxB,UAAMO,IACJJ,GAAgBK,WAChBjB,OACAC,EAAAA,KACCiB,SAASC;AACZ,QAAI,GAACH,KAAWA,MAAYE,SAASE;AACrCP,aAAAA,EAAWI,UAAUD,GACjBD,EAAeE,YAASF,EAAeE,QAAQI,WAAW,IACvD,MAAM;AACX,QAAIN,EAAeE,YAASF,EAAeE,QAAQI,WAAW;AAAA,MAChE;AAAA,EACF,GAAG,CAACZ,GAAQC,CAAO,CAAC,GAGpBb,EAAU,MAAM;AACd,QAAIa,KAAW,CAACD,KAAU,CAACI,EAAWI,QAAS;AAE/C,UAAMK,IAAQC,sBAAsB,MAAM;AAExC,OADczB,EAAyB;AAAA,QAAE0B,WAAWb,EAAaM;AAAAA,MAAAA,CAAS,KAChEN,EAAaM,UAAUQ,MAAAA,GAE7BX,EAAiBG,YAASH,EAAiBG,QAAQI,WAAW;AAAA,IACpE,CAAC;AAED,WAAO,MAAM;AACXK,2BAAqBJ,CAAK,GACtBR,EAAiBG,YAASH,EAAiBG,QAAQI,WAAW;AAClE,YAAML,IAAUH,EAAWI;AAC3BJ,MAAAA,EAAWI,UAAU,MACjBD,GAASW,eACXJ,sBAAsB,MAAMP,EAAQS,OAAO;AAAA,IAE/C;AAAA,EACF,GAAG,CAAChB,GAAQC,CAAO,CAAC,GAkCb;AAAA,IACLkB,oBAAoB;AAAA,MAClBC,KAAKf;AAAAA,MACLO,UAAU;AAAA,MACVS,OAAO5B;AAAAA,MACP6B,SArCqBC,CAACC,MAAwB;AAIhD,YAFEtB,EAAaM,SAASiB,SAASD,EAAEE,aAAqB,KACtDF,EAAEE,kBAAkBxB,EAAaM,SACnB;AAEd,gBAAMD,IAAUH,EAAWI;AAC3B,UAAID,GAASW,eAAaX,EAAQS,MAAAA;AAAAA,QACpC;AAGE,UAAIX,EAAiBG,YAASH,EAAiBG,QAAQI,WAAW,MACpDvB,EAAyB;AAAA,YAAE0B,WAAWb,EAAaM;AAAAA,UAAAA,CAAS,KAChEN,EAAaM,UAAUQ,MAAAA;AAAAA,MAErC;AAAA,IAsBaO;AAAAA,IAEXI,kBAAkB;AAAA,MAChBP,KAAKd;AAAAA,MACLM,UAAU;AAAA,MACVS,OAAO5B;AAAAA,MACP6B,SA1BmBM,CAACJ,MAAwB;AAI9C,YAFEtB,EAAaM,SAASiB,SAASD,EAAEE,aAAqB,KACtDF,EAAEE,kBAAkBxB,EAAaM,SACnB;AAEd,gBAAMD,IAAUH,EAAWI;AAC3B,UAAID,GAASW,eAAaX,EAAQS,MAAAA;AAAAA,QACpC;AAGE,WADa1B,EAAwB;AAAA,YAAEyB,WAAWb,EAAaM;AAAAA,UAAAA,CAAS,KAC/DN,EAAaM,UAAUQ,MAAAA;AAAAA,MAEpC;AAAA,IAaaY;AAAAA,EACX;AAEJ;"}
package/dist/index21.js CHANGED
@@ -1,64 +1,36 @@
1
- import t, { useRef as v } from "react";
2
- import { TableContentLoader as x } from "./index26.js";
3
- function n() {
4
- return n = Object.assign ? Object.assign.bind() : function(l) {
5
- for (var a = 1; a < arguments.length; a++) {
6
- var e = arguments[a];
7
- for (var r in e) ({}).hasOwnProperty.call(e, r) && (l[r] = e[r]);
8
- }
9
- return l;
10
- }, n.apply(null, arguments);
11
- }
12
- const O = ({
13
- className: l = "",
14
- automationId: a = "",
15
- loading: e,
16
- headerColSpan: r = [],
17
- headerData: o,
18
- tableData: s,
19
- renderTableContentLoader: E,
20
- getTableHeaders: c,
21
- getTableBody: i,
22
- getTableFooter: m,
23
- onSortUiUpdate: u,
24
- onRowClick: f,
25
- tableId: b,
26
- ariaDescribedBy: d,
27
- ariaLabel: g,
28
- ...p
29
- }) => {
30
- const h = v(null);
31
- return /* @__PURE__ */ t.createElement("div", n({
32
- className: "se-design-table-layout-wrapper flex flex-col flex-1 min-h-0" + (l.length > 0 ? ` ${l}` : "") + (e ? " table-data-loading" : "")
33
- }, p), /* @__PURE__ */ t.createElement("div", {
34
- className: "se-design-table-scroll-area flex-1 min-h-0 overflow-y-auto"
35
- }, /* @__PURE__ */ t.createElement("table", {
36
- className: "se-design-table w-full bg-[var(--color-white)] border-collapse table-fixed",
37
- ref: h,
38
- "data-automation-id": a,
39
- id: b,
40
- "aria-describedby": d,
41
- "aria-label": g
42
- }, /* @__PURE__ */ t.createElement("thead", null, /* @__PURE__ */ t.createElement("tr", null, c({
43
- headerData: o,
44
- sortData: {},
45
- onSortUiUpdate: u,
46
- loading: e
47
- }))), /* @__PURE__ */ t.createElement("tbody", null, e ? /* @__PURE__ */ t.createElement(x, {
48
- noOfColumns: o?.length,
49
- colSpan: r
50
- }) : i({
51
- tableData: s,
52
- onRowClick: f,
53
- loading: e
54
- })))), /* @__PURE__ */ t.createElement("div", {
55
- className: "se-design-table-footer w-full bg-[var(--color-white)] flex-shrink-0"
56
- }, m({
57
- tableData: s,
58
- loading: e
59
- })));
60
- };
1
+ import e from "react";
2
+ import { Popover as l } from "./index19.js";
3
+ import { Icon as s } from "./index6.js";
4
+ const t = {
5
+ base: "se-design-hamburger-menu rounded-[6px] transition-all duration-300 p-[3px] flex items-center",
6
+ active: "bg-[var(--color-blue-450)]",
7
+ hover: "hover:bg-[var(--color-blue-450)]"
8
+ }, u = ({
9
+ className: a = "",
10
+ automationId: n = "",
11
+ popoverContentAutomationId: m = "",
12
+ menuContent: o,
13
+ popoverClassName: c = ""
14
+ }) => /* @__PURE__ */ e.createElement(l, {
15
+ className: a,
16
+ position: "bottom-left",
17
+ automationId: n,
18
+ popoverContentAutomationId: m,
19
+ renderPopoverSrcElement: ({
20
+ displayPopover: r
21
+ }) => /* @__PURE__ */ e.createElement("div", {
22
+ className: `${t.base} ${r ? t.active : ""} ${t.hover}`
23
+ }, /* @__PURE__ */ e.createElement(s, {
24
+ name: "hamburger",
25
+ stroke: "var(--color-white)"
26
+ })),
27
+ renderPopoverContents: (r) => /* @__PURE__ */ e.createElement("div", {
28
+ className: `min-w-[212px] ${c}`
29
+ }, o && /* @__PURE__ */ e.createElement("div", {
30
+ className: "menu-content"
31
+ }, o(r)))
32
+ });
61
33
  export {
62
- O as TableLayout
34
+ u as HamburgerMenu
63
35
  };
64
36
  //# sourceMappingURL=index21.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index21.js","sources":["../src/components/TableLayout/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useRef } from 'react';\nimport { TableContentLoader } from 'components/TableContentLoader';\n\nexport interface TableLayoutProps {\n className?: string;\n automationId?: string;\n loading: boolean;\n headerData: any[];\n tableData: any[];\n headerColSpan?: number[];\n renderTableContentLoader?: (noOfColumns: number) => ReactNode;\n getTableHeaders: (props: { headerData: any[]; sortData: any; onSortUiUpdate: any; loading: boolean }) => ReactNode;\n getTableBody: (props: { tableData: any[]; onRowClick: any; loading: boolean }) => ReactNode;\n getTableFooter: (props: { tableData: any[]; loading: boolean }) => ReactNode;\n onSortUiUpdate: (newSortData: any) => void;\n onRowClick: (rowData: any) => void;\n tableId: string;\n /**\n * ID of element that describes the table (e.g., sort instructions for screen readers)\n */\n ariaDescribedBy?: string;\n /**\n * Accessible name for the table element\n */\n ariaLabel?: string;\n}\n\nexport const TableLayout: FC<TableLayoutProps> = ({\n className = '',\n automationId = '',\n loading,\n headerColSpan = [],\n headerData,\n tableData,\n renderTableContentLoader,\n getTableHeaders,\n getTableBody,\n getTableFooter,\n onSortUiUpdate,\n onRowClick,\n tableId,\n ariaDescribedBy,\n ariaLabel,\n ...props\n}) => {\n const tableRef = useRef<HTMLTableElement>(null);\n\n return (\n <div className={'se-design-table-layout-wrapper flex flex-col flex-1 min-h-0' + (className.length > 0 ? ` ${className}` : '') + (loading? ' table-data-loading' : '')} {...props}>\n <div className=\"se-design-table-scroll-area flex-1 min-h-0 overflow-y-auto\">\n <table\n className={'se-design-table w-full bg-[var(--color-white)] border-collapse table-fixed'}\n ref={tableRef}\n data-automation-id={automationId}\n id={tableId}\n aria-describedby={ariaDescribedBy}\n aria-label={ariaLabel}\n >\n <thead>\n <tr>{getTableHeaders({ headerData, sortData: {}, onSortUiUpdate, loading })}</tr>\n </thead>\n <tbody>\n {loading ? (\n <TableContentLoader noOfColumns={headerData?.length} colSpan={headerColSpan} />\n ) : (\n getTableBody({ tableData, onRowClick, loading })\n )}\n </tbody>\n </table>\n </div>\n <div className=\"se-design-table-footer w-full bg-[var(--color-white)] flex-shrink-0\">\n {getTableFooter({ tableData, loading })}\n </div>\n </div>\n );\n};\n"],"names":["TableLayout","className","automationId","loading","headerColSpan","headerData","tableData","renderTableContentLoader","getTableHeaders","getTableBody","getTableFooter","onSortUiUpdate","onRowClick","tableId","ariaDescribedBy","ariaLabel","props","tableRef","useRef","React","createElement","_extends","length","ref","id","sortData","TableContentLoader","noOfColumns","colSpan"],"mappings":";;;;;;;;;;;AA2BO,MAAMA,IAAoCA,CAAC;AAAA,EAChDC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,SAAAA;AAAAA,EACAC,eAAAA,IAAgB,CAAA;AAAA,EAChBC,YAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,0BAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAWC,EAAyB,IAAI;AAE9C,SACEC,gBAAAA,EAAAC,cAAA,OAAAC,EAAA;AAAA,IAAKpB,WAAW,iEAAiEA,EAAUqB,SAAS,IAAI,IAAIrB,CAAS,KAAK,OAAOE,IAAS,wBAAwB;AAAA,EAAA,GAASa,CAAK,GAC9KG,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKnB,WAAU;AAAA,EAAA,GACbkB,gBAAAA,EAAAC,cAAA,SAAA;AAAA,IACEnB,WAAW;AAAA,IACXsB,KAAKN;AAAAA,IACL,sBAAoBf;AAAAA,IACpBsB,IAAIX;AAAAA,IACJ,oBAAkBC;AAAAA,IAClB,cAAYC;AAAAA,EAAAA,qBAEZK,cAAA,SAAA,MACED,gBAAAA,EAAAC,cAAA,MAAA,MAAKZ,EAAgB;AAAA,IAAEH,YAAAA;AAAAA,IAAYoB,UAAU,CAAA;AAAA,IAAId,gBAAAA;AAAAA,IAAgBR,SAAAA;AAAAA,EAAAA,CAAS,CAAM,CAC3E,GACPgB,gBAAAA,EAAAC,cAAA,SAAA,MACGjB,IACCgB,gBAAAA,EAAAC,cAACM,GAAkB;AAAA,IAACC,aAAatB,GAAYiB;AAAAA,IAAQM,SAASxB;AAAAA,EAAAA,CAAgB,IAE9EK,EAAa;AAAA,IAAEH,WAAAA;AAAAA,IAAWM,YAAAA;AAAAA,IAAYT,SAAAA;AAAAA,EAAAA,CAAS,CAE5C,CACF,CACJ,GACLgB,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKnB,WAAU;AAAA,EAAA,GACZS,EAAe;AAAA,IAAEJ,WAAAA;AAAAA,IAAWH,SAAAA;AAAAA,EAAAA,CAAS,CACnC,CACF;AAET;"}
1
+ {"version":3,"file":"index21.js","sources":["../src/components/HamburgerMenu/index.tsx"],"sourcesContent":["import React, { FC } from 'react';\n\nimport { Popover } from 'src/components/Popover';\nimport { Icon } from 'src/components/Icon';\nexport interface HamburgerMenuProps {\n className?: string;\n automationId?: string;\n popoverContentAutomationId?: string;\n menuContent?: (data: any) => React.ReactNode;\n popoverClassName?: string;\n}\n\nconst menuClasses = {\n base: 'se-design-hamburger-menu rounded-[6px] transition-all duration-300 p-[3px] flex items-center',\n active: 'bg-[var(--color-blue-450)]',\n hover: 'hover:bg-[var(--color-blue-450)]'\n};\n\nexport const HamburgerMenu: FC<HamburgerMenuProps> = ({\n className = '',\n automationId = '',\n popoverContentAutomationId = '',\n menuContent,\n popoverClassName = ''\n}) => {\n\n return (\n <Popover\n className={className}\n position='bottom-left'\n automationId={automationId}\n popoverContentAutomationId={popoverContentAutomationId}\n renderPopoverSrcElement={({ displayPopover }) => (\n <div className={`${menuClasses.base} ${displayPopover ? menuClasses.active : ''} ${menuClasses.hover}`}>\n <Icon name='hamburger' stroke={'var(--color-white)'} />\n </div>\n )}\n renderPopoverContents={(data) => (\n <div className={`min-w-[212px] ${popoverClassName}`}>\n {menuContent && <div className='menu-content'>{menuContent(data)}</div>}\n </div>\n )}\n />\n );\n};\n"],"names":["React__default","Popover","Icon","menuClasses","base","active","hover","HamburgerMenu","className","automationId","popoverContentAutomationId","menuContent","popoverClassName","React","createElement","position","renderPopoverSrcElement","displayPopover","name","stroke","renderPopoverContents","data"],"mappings":"AAYA,OAAAA,OAAA;AAAA,SAAA,WAAAC,SAAA;AAAA,SAAA,QAAAC,SAAA;AAAA,MAAMC,IAAc;AAAA,EAClBC,MAAM;AAAA,EACNC,QAAQ;AAAA,EACRC,OAAO;AACT,GAEaC,IAAwCA,CAAC;AAAA,EACpDC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,4BAAAA,IAA6B;AAAA,EAC7BC,aAAAA;AAAAA,EACAC,kBAAAA,IAAmB;AACrB,MAGIC,gBAAAA,EAAAC,cAACb,GAAO;AAAA,EACNO,WAAAA;AAAAA,EACAO,UAAS;AAAA,EACTN,cAAAA;AAAAA,EACAC,4BAAAA;AAAAA,EACAM,yBAAyBA,CAAC;AAAA,IAAEC,gBAAAA;AAAAA,EAAAA,MAC1BJ,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKN,WAAW,GAAGL,EAAYC,IAAI,IAAIa,IAAiBd,EAAYE,SAAS,EAAE,IAAIF,EAAYG,KAAK;AAAA,EAAA,GAClGO,gBAAAA,EAAAC,cAACZ,GAAI;AAAA,IAACgB,MAAK;AAAA,IAAYC,QAAQ;AAAA,EAAA,CAAuB,CACnD;AAAA,EAEPC,uBAAwBC,CAAAA,MACtBR,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKN,WAAW,iBAAiBI,CAAgB;AAAA,EAAA,GAC9CD,KAAeE,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKN,WAAU;AAAA,EAAA,GAAgBG,EAAYU,CAAI,CAAO,CACnE;AAAA,CAER;"}
@@ -12,4 +12,4 @@ function n(o, u) {
12
12
  export {
13
13
  n as debounce
14
14
  };
15
- //# sourceMappingURL=index209.js.map
15
+ //# sourceMappingURL=index215.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index209.js","sources":["../src/utils/debounce.ts"],"sourcesContent":["export function debounce<T extends (...args: any[]) => void>(func: T, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null;\n const debounced = (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => {\n func(...args);\n }, wait);\n };\n debounced.cancel = () => {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n };\n return debounced as T & { cancel: () => void };\n }"],"names":["debounce","func","wait","timeout","debounced","args","setTimeout","cancel"],"mappings":"AAAO,SAASA,EAA6CC,GAASC,GAAc;AAChF,MAAIC;AACJ,QAAMC,IAAYA,IAAIC,MAAwB;AAC5C,IAAIF,kBAAsBA,CAAO,GACjCA,IAAUG,WAAW,MAAM;AACzBL,MAAAA,EAAK,GAAGI,CAAI;AAAA,IACd,GAAGH,CAAI;AAAA,EACT;AACAE,SAAAA,EAAUG,SAAS,MAAM;AACvB,IAAIJ,kBAAsBA,CAAO,GACjCA,IAAU;AAAA,EACZ,GACOC;AACT;"}
1
+ {"version":3,"file":"index215.js","sources":["../src/utils/debounce.ts"],"sourcesContent":["export function debounce<T extends (...args: any[]) => void>(func: T, wait: number) {\n let timeout: ReturnType<typeof setTimeout> | null;\n const debounced = (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => {\n func(...args);\n }, wait);\n };\n debounced.cancel = () => {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n };\n return debounced as T & { cancel: () => void };\n }"],"names":["debounce","func","wait","timeout","debounced","args","setTimeout","cancel"],"mappings":"AAAO,SAASA,EAA6CC,GAASC,GAAc;AAChF,MAAIC;AACJ,QAAMC,IAAYA,IAAIC,MAAwB;AAC5C,IAAIF,kBAAsBA,CAAO,GACjCA,IAAUG,WAAW,MAAM;AACzBL,MAAAA,EAAK,GAAGI,CAAI;AAAA,IACd,GAAGH,CAAI;AAAA,EACT;AACAE,SAAAA,EAAUG,SAAS,MAAM;AACvB,IAAIJ,kBAAsBA,CAAO,GACjCA,IAAU;AAAA,EACZ,GACOC;AACT;"}
package/dist/index22.js CHANGED
@@ -1,83 +1,64 @@
1
- import s, { useState as O, useEffect as S } from "react";
2
- import { useStableId as _ } from "./index191.js";
3
- import { getA11yNameAttributes as j } from "./index71.js";
4
- import { mergeIds as B } from "./index192.js";
5
- /* empty css */
6
- function h() {
7
- return h = Object.assign ? Object.assign.bind() : function(u) {
8
- for (var c = 1; c < arguments.length; c++) {
9
- var r = arguments[c];
10
- for (var e in r) ({}).hasOwnProperty.call(r, e) && (u[e] = r[e]);
1
+ import t, { useRef as v } from "react";
2
+ import { TableContentLoader as x } from "./index27.js";
3
+ function n() {
4
+ return n = Object.assign ? Object.assign.bind() : function(l) {
5
+ for (var a = 1; a < arguments.length; a++) {
6
+ var e = arguments[a];
7
+ for (var r in e) ({}).hasOwnProperty.call(e, r) && (l[r] = e[r]);
11
8
  }
12
- return u;
13
- }, h.apply(null, arguments);
9
+ return l;
10
+ }, n.apply(null, arguments);
14
11
  }
15
- const z = ({
16
- className: u = "",
17
- automationId: c = "",
18
- defaultChecked: r = !1,
19
- checked: e,
20
- disabled: n = !1,
21
- onChange: x,
22
- checkMarkType: i = "",
23
- label: l = "",
24
- disabledLabel: g = "",
25
- containerAutomationId: v = "",
26
- ariaLabel: E,
27
- ariaLabelledBy: y,
28
- ariaDescribedBy: C
12
+ const O = ({
13
+ className: l = "",
14
+ automationId: a = "",
15
+ loading: e,
16
+ headerColSpan: r = [],
17
+ headerData: o,
18
+ tableData: s,
19
+ renderTableContentLoader: E,
20
+ getTableHeaders: c,
21
+ getTableBody: i,
22
+ getTableFooter: m,
23
+ onSortUiUpdate: u,
24
+ onRowClick: f,
25
+ tableId: b,
26
+ ariaDescribedBy: d,
27
+ ariaLabel: g,
28
+ ...p
29
29
  }) => {
30
- const o = e !== void 0, [t, m] = O(o ? e : r);
31
- S(() => {
32
- m(o ? e : r);
33
- }, [e, r]);
34
- const N = (a) => {
35
- n || (o || m((b) => !b), x?.(o ? !e : !t, a));
36
- }, I = (a) => {
37
- if (!n && (a.key === "Enter" || a.key === " ")) {
38
- a.preventDefault(), a.stopPropagation();
39
- const b = o ? !e : !t;
40
- o || m(b);
41
- const d = a.currentTarget.closest("label")?.querySelector("input");
42
- d && x?.(b, {
43
- target: d,
44
- currentTarget: d
45
- });
46
- }
47
- }, w = () => n ? t && i === "tick" ? "disabled-tick" : t && i === "minus-checkbox" ? "disabled-minus-checkbox" : t && !i ? "disabled-tick" : "disabled-default" : i === "minus-checkbox" && t ? "minus-checkbox" : t ? "checked" : "unchecked", A = () => n ? "checkbox-label-disabled" : "checkbox-label", k = () => n && g ? g : l, f = _(void 0, "checkbox-input"), p = l ? `${f}-label` : void 0, $ = j({
48
- ariaLabelledBy: B(p, y),
49
- ariaLabel: E,
50
- ariaDescribedBy: C
51
- }), D = () => i === "minus-checkbox" && t ? "mixed" : t ? "true" : "false";
52
- return /* @__PURE__ */ s.createElement("div", {
53
- className: "se-design-checkbox-ctn"
54
- }, /* @__PURE__ */ s.createElement("label", h({
55
- role: "checkbox",
56
- htmlFor: f,
57
- className: `se-design-checkbox ${u} ${w()}`,
58
- "data-automation-id": v || "checkbox-container",
59
- tabIndex: n ? -1 : 0,
60
- "aria-checked": D(),
61
- "aria-disabled": n ? "true" : "false"
62
- }, $, {
63
- onKeyDown: I
64
- }), /* @__PURE__ */ s.createElement("input", {
65
- id: f,
66
- type: "checkbox",
67
- checked: t,
68
- onChange: N,
69
- disabled: n,
70
- "aria-hidden": "true"
71
- }), /* @__PURE__ */ s.createElement("span", {
72
- className: "checkbox-item",
73
- "data-automation-id": c
74
- }), k()?.length > 0 && /* @__PURE__ */ s.createElement("span", {
75
- id: p,
76
- className: A(),
77
- "data-automation-id": c || (l ? `checkbox-label-${l}` : "checkbox-label")
78
- }, k())));
30
+ const h = v(null);
31
+ return /* @__PURE__ */ t.createElement("div", n({
32
+ className: "se-design-table-layout-wrapper flex flex-col flex-1 min-h-0" + (l.length > 0 ? ` ${l}` : "") + (e ? " table-data-loading" : "")
33
+ }, p), /* @__PURE__ */ t.createElement("div", {
34
+ className: "se-design-table-scroll-area flex-1 min-h-0 overflow-y-auto"
35
+ }, /* @__PURE__ */ t.createElement("table", {
36
+ className: "se-design-table w-full bg-[var(--color-white)] border-collapse table-fixed",
37
+ ref: h,
38
+ "data-automation-id": a,
39
+ id: b,
40
+ "aria-describedby": d,
41
+ "aria-label": g
42
+ }, /* @__PURE__ */ t.createElement("thead", null, /* @__PURE__ */ t.createElement("tr", null, c({
43
+ headerData: o,
44
+ sortData: {},
45
+ onSortUiUpdate: u,
46
+ loading: e
47
+ }))), /* @__PURE__ */ t.createElement("tbody", null, e ? /* @__PURE__ */ t.createElement(x, {
48
+ noOfColumns: o?.length,
49
+ colSpan: r
50
+ }) : i({
51
+ tableData: s,
52
+ onRowClick: f,
53
+ loading: e
54
+ })))), /* @__PURE__ */ t.createElement("div", {
55
+ className: "se-design-table-footer w-full bg-[var(--color-white)] flex-shrink-0"
56
+ }, m({
57
+ tableData: s,
58
+ loading: e
59
+ })));
79
60
  };
80
61
  export {
81
- z as Checkbox
62
+ O as TableLayout
82
63
  };
83
64
  //# sourceMappingURL=index22.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index22.js","sources":["../src/components/Checkbox/index.tsx"],"sourcesContent":["import React, { FC, useState, useEffect } from 'react';\nimport { useStableId } from '../../utils/useStableId';\nimport { getA11yNameAttributes } from '../../utils/a11y';\nimport { mergeIds } from '../../utils/mergeIds';\nimport './style.scss';\n\nexport interface CheckboxProps {\n className?: string;\n automationId?: string;\n defaultChecked?: boolean;\n /**\n * Controlled checked value. When provided, the checkbox is controlled by the parent\n * and its visual state always reflects this prop. Use `onChange` to update the parent state.\n */\n checked?: boolean;\n onChange?: (checked: boolean, e: React.ChangeEvent<HTMLInputElement>) => void;\n disabled?: boolean;\n checkMarkType?: 'tick' | 'minus-checkbox' | '';\n label?: string;\n disabledLabel?: string;\n containerAutomationId?: string;\n /**\n * Explicit accessible name for the checkbox.\n * Used as fallback when ariaLabelledBy is not provided and no internal label exists.\n */\n ariaLabel?: string;\n /**\n * ID(s) of element(s) that label this checkbox (for screen reader association).\n * Typically used when checkbox is part of a larger labelled context.\n */\n ariaLabelledBy?: string;\n /**\n * ID(s) of element(s) that describe this checkbox (provides additional context).\n * Often used for help text or instructions.\n */\n ariaDescribedBy?: string;\n}\n\nexport const Checkbox: FC<CheckboxProps> = ({\n className = '',\n automationId = '',\n defaultChecked = false,\n checked,\n disabled = false,\n onChange,\n checkMarkType = '',\n label = '',\n disabledLabel = '',\n containerAutomationId = '',\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy\n}) => {\n const isControlled = checked !== undefined;\n const [isChecked, setIsChecked] = useState(isControlled ? checked : defaultChecked);\n\n useEffect(() => {\n if (isControlled) {\n setIsChecked(checked!);\n } else {\n setIsChecked(defaultChecked);\n }\n }, [checked, defaultChecked]);\n\n const handleClick = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (!isControlled) {\n setIsChecked((prev) => !prev);\n }\n onChange?.(isControlled ? !checked : !isChecked, e);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLLabelElement | HTMLSpanElement>) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n const newChecked = isControlled ? !checked : !isChecked;\n if (!isControlled) {\n setIsChecked(newChecked);\n }\n\n // Create a proper synthetic event for the onChange callback\n const inputElement = e.currentTarget.closest('label')?.querySelector('input');\n if (inputElement) {\n const syntheticEvent = {\n target: inputElement,\n currentTarget: inputElement\n } as React.ChangeEvent<HTMLInputElement>;\n onChange?.(newChecked, syntheticEvent);\n }\n }\n };\n\n const getCheckBoxClassName = () => {\n // Handle disabled states with proper checked status\n if (disabled) {\n if (isChecked && checkMarkType === 'tick') return 'disabled-tick';\n if (isChecked && checkMarkType === 'minus-checkbox') return 'disabled-minus-checkbox';\n if (isChecked && !checkMarkType) return 'disabled-tick'; // Default to tick for checked disabled\n return 'disabled-default'; // Unchecked disabled\n }\n\n // Handle enabled states\n if (checkMarkType === 'minus-checkbox' && isChecked) return 'minus-checkbox';\n return isChecked ? 'checked' : 'unchecked';\n };\n\n const getLabelClassName = () => {\n return disabled ? 'checkbox-label-disabled' : 'checkbox-label';\n };\n\n const getLabelText = () => {\n if (disabled && disabledLabel) {\n return disabledLabel;\n }\n return label;\n };\n\n // Generate stable IDs (persists across renders)\n const inputId = useStableId(undefined, 'checkbox-input');\n const labelId = label ? `${inputId}-label` : undefined;\n\n const a11yNameAttributes = getA11yNameAttributes({\n ariaLabelledBy: mergeIds(labelId, ariaLabelledBy),\n ariaLabel,\n ariaDescribedBy\n });\n\n // Determine aria-checked value: \"mixed\" for indeterminate, \"true\" for checked, \"false\" for unchecked\n const getAriaChecked = () => {\n if (checkMarkType === 'minus-checkbox' && isChecked) {\n return 'mixed'; // Indeterminate/half-checked state\n }\n return isChecked ? 'true' : 'false';\n };\n\n return (\n <div className=\"se-design-checkbox-ctn\">\n <label\n role=\"checkbox\"\n htmlFor={inputId}\n className={`se-design-checkbox ${className} ${getCheckBoxClassName()}`}\n data-automation-id={containerAutomationId || 'checkbox-container'}\n tabIndex={disabled ? -1 : 0}\n aria-checked={getAriaChecked()}\n aria-disabled={disabled ? 'true' : 'false'}\n {...a11yNameAttributes}\n onKeyDown={handleKeyDown}\n >\n <input\n id={inputId}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleClick}\n disabled={disabled}\n aria-hidden=\"true\"\n />\n <span className=\"checkbox-item\" data-automation-id={automationId}></span>\n {getLabelText()?.length > 0 && (\n <span\n id={labelId}\n className={getLabelClassName()}\n data-automation-id={automationId || (label ? `checkbox-label-${label}` : 'checkbox-label')}\n >\n {getLabelText()}\n </span>\n )}\n </label>\n </div>\n );\n};\n"],"names":["Checkbox","className","automationId","defaultChecked","checked","disabled","onChange","checkMarkType","label","disabledLabel","containerAutomationId","ariaLabel","ariaLabelledBy","ariaDescribedBy","isControlled","undefined","isChecked","setIsChecked","useState","useEffect","handleClick","e","prev","handleKeyDown","key","preventDefault","stopPropagation","newChecked","inputElement","currentTarget","closest","querySelector","target","getCheckBoxClassName","getLabelClassName","getLabelText","inputId","useStableId","labelId","a11yNameAttributes","getA11yNameAttributes","mergeIds","getAriaChecked","React","createElement","_extends","role","htmlFor","tabIndex","onKeyDown","id","type","length"],"mappings":"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"}
1
+ {"version":3,"file":"index22.js","sources":["../src/components/TableLayout/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useRef } from 'react';\nimport { TableContentLoader } from 'components/TableContentLoader';\n\nexport interface TableLayoutProps {\n className?: string;\n automationId?: string;\n loading: boolean;\n headerData: any[];\n tableData: any[];\n headerColSpan?: number[];\n renderTableContentLoader?: (noOfColumns: number) => ReactNode;\n getTableHeaders: (props: { headerData: any[]; sortData: any; onSortUiUpdate: any; loading: boolean }) => ReactNode;\n getTableBody: (props: { tableData: any[]; onRowClick: any; loading: boolean }) => ReactNode;\n getTableFooter: (props: { tableData: any[]; loading: boolean }) => ReactNode;\n onSortUiUpdate: (newSortData: any) => void;\n onRowClick: (rowData: any) => void;\n tableId: string;\n /**\n * ID of element that describes the table (e.g., sort instructions for screen readers)\n */\n ariaDescribedBy?: string;\n /**\n * Accessible name for the table element\n */\n ariaLabel?: string;\n}\n\nexport const TableLayout: FC<TableLayoutProps> = ({\n className = '',\n automationId = '',\n loading,\n headerColSpan = [],\n headerData,\n tableData,\n renderTableContentLoader,\n getTableHeaders,\n getTableBody,\n getTableFooter,\n onSortUiUpdate,\n onRowClick,\n tableId,\n ariaDescribedBy,\n ariaLabel,\n ...props\n}) => {\n const tableRef = useRef<HTMLTableElement>(null);\n\n return (\n <div className={'se-design-table-layout-wrapper flex flex-col flex-1 min-h-0' + (className.length > 0 ? ` ${className}` : '') + (loading? ' table-data-loading' : '')} {...props}>\n <div className=\"se-design-table-scroll-area flex-1 min-h-0 overflow-y-auto\">\n <table\n className={'se-design-table w-full bg-[var(--color-white)] border-collapse table-fixed'}\n ref={tableRef}\n data-automation-id={automationId}\n id={tableId}\n aria-describedby={ariaDescribedBy}\n aria-label={ariaLabel}\n >\n <thead>\n <tr>{getTableHeaders({ headerData, sortData: {}, onSortUiUpdate, loading })}</tr>\n </thead>\n <tbody>\n {loading ? (\n <TableContentLoader noOfColumns={headerData?.length} colSpan={headerColSpan} />\n ) : (\n getTableBody({ tableData, onRowClick, loading })\n )}\n </tbody>\n </table>\n </div>\n <div className=\"se-design-table-footer w-full bg-[var(--color-white)] flex-shrink-0\">\n {getTableFooter({ tableData, loading })}\n </div>\n </div>\n );\n};\n"],"names":["TableLayout","className","automationId","loading","headerColSpan","headerData","tableData","renderTableContentLoader","getTableHeaders","getTableBody","getTableFooter","onSortUiUpdate","onRowClick","tableId","ariaDescribedBy","ariaLabel","props","tableRef","useRef","React","createElement","_extends","length","ref","id","sortData","TableContentLoader","noOfColumns","colSpan"],"mappings":";;;;;;;;;;;AA2BO,MAAMA,IAAoCA,CAAC;AAAA,EAChDC,WAAAA,IAAY;AAAA,EACZC,cAAAA,IAAe;AAAA,EACfC,SAAAA;AAAAA,EACAC,eAAAA,IAAgB,CAAA;AAAA,EAChBC,YAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACAC,0BAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,gBAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,iBAAAA;AAAAA,EACAC,WAAAA;AAAAA,EACA,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAWC,EAAyB,IAAI;AAE9C,SACEC,gBAAAA,EAAAC,cAAA,OAAAC,EAAA;AAAA,IAAKpB,WAAW,iEAAiEA,EAAUqB,SAAS,IAAI,IAAIrB,CAAS,KAAK,OAAOE,IAAS,wBAAwB;AAAA,EAAA,GAASa,CAAK,GAC9KG,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKnB,WAAU;AAAA,EAAA,GACbkB,gBAAAA,EAAAC,cAAA,SAAA;AAAA,IACEnB,WAAW;AAAA,IACXsB,KAAKN;AAAAA,IACL,sBAAoBf;AAAAA,IACpBsB,IAAIX;AAAAA,IACJ,oBAAkBC;AAAAA,IAClB,cAAYC;AAAAA,EAAAA,qBAEZK,cAAA,SAAA,MACED,gBAAAA,EAAAC,cAAA,MAAA,MAAKZ,EAAgB;AAAA,IAAEH,YAAAA;AAAAA,IAAYoB,UAAU,CAAA;AAAA,IAAId,gBAAAA;AAAAA,IAAgBR,SAAAA;AAAAA,EAAAA,CAAS,CAAM,CAC3E,GACPgB,gBAAAA,EAAAC,cAAA,SAAA,MACGjB,IACCgB,gBAAAA,EAAAC,cAACM,GAAkB;AAAA,IAACC,aAAatB,GAAYiB;AAAAA,IAAQM,SAASxB;AAAAA,EAAAA,CAAgB,IAE9EK,EAAa;AAAA,IAAEH,WAAAA;AAAAA,IAAWM,YAAAA;AAAAA,IAAYT,SAAAA;AAAAA,EAAAA,CAAS,CAE5C,CACF,CACJ,GACLgB,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKnB,WAAU;AAAA,EAAA,GACZS,EAAe;AAAA,IAAEJ,WAAAA;AAAAA,IAAWH,SAAAA;AAAAA,EAAAA,CAAS,CACnC,CACF;AAET;"}
@@ -1233,4 +1233,4 @@ const e = [
1233
1233
  export {
1234
1234
  e as default
1235
1235
  };
1236
- //# sourceMappingURL=index217.js.map
1236
+ //# sourceMappingURL=index223.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index217.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index223.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import d, { forwardRef as b } from "react";
2
- import { Button as p } from "./index3.js";
2
+ import { Button as p } from "./index4.js";
3
3
  function n() {
4
4
  return n = Object.assign ? Object.assign.bind() : function(a) {
5
5
  for (var t = 1; t < arguments.length; t++) {
@@ -43,4 +43,4 @@ g.displayName = "TabButton";
43
43
  export {
44
44
  g as TabButton
45
45
  };
46
- //# sourceMappingURL=index220.js.map
46
+ //# sourceMappingURL=index226.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index220.js","sources":["../src/components/NavigationBar/TabButton.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Button } from '../Button';\n\nexport interface TabButtonProps {\n id: string;\n label: string;\n isSelected: boolean;\n isDisabled?: boolean;\n panelId?: string;\n tabIndex: number;\n className?: string;\n automationId?: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onFocus: () => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * Internal TabButton component for NavigationBar.\n * Uses Button (unstyled) internally for consistent activation handling.\n * Supports forwardRef for focus management (roving tabindex).\n */\nexport const TabButton = forwardRef<HTMLButtonElement, TabButtonProps>(\n (\n {\n id,\n label,\n isSelected,\n isDisabled = false,\n panelId,\n tabIndex,\n className = '',\n automationId,\n onClick,\n onFocus,\n onKeyDown\n },\n ref\n ) => {\n return (\n <Button\n ref={ref}\n type=\"unstyled\"\n label={label}\n disabled={isDisabled}\n onClick={onClick}\n className={className}\n automationId={automationId}\n role=\"tab\"\n id={id}\n aria-selected={isSelected}\n {...(panelId ? { 'aria-controls': panelId } : {})}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n />\n );\n }\n);\n\nTabButton.displayName = 'TabButton';\n"],"names":["TabButton","id","label","isSelected","isDisabled","panelId","tabIndex","className","automationId","onClick","onFocus","onKeyDown","ref","React","createElement","Button","_extends","type","disabled","role","displayName"],"mappings":";;;;;;;;;;;AAsBO,MAAMA,sBACX,CACE;AAAA,EACEC,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,YAAAA,IAAa;AAAA,EACbC,SAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,WAAAA,IAAY;AAAA,EACZC,cAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,WAAAA;AACF,GACAC,MAGEC,gBAAAA,EAAAC,cAACC,GAAMC,EAAA;AAAA,EACLJ,KAAAA;AAAAA,EACAK,MAAK;AAAA,EACLf,OAAAA;AAAAA,EACAgB,UAAUd;AAAAA,EACVK,SAAAA;AAAAA,EACAF,WAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAW,MAAK;AAAA,EACLlB,IAAAA;AAAAA,EACA,iBAAeE;AAAAA,GACVE,IAAU;AAAA,EAAE,iBAAiBA;AAAAA,IAAY,IAAE;AAAA,EAChDC,UAAAA;AAAAA,EACAI,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,CAAqB,CACtB,CAGP;AAEAX,EAAUoB,cAAc;"}
1
+ {"version":3,"file":"index226.js","sources":["../src/components/NavigationBar/TabButton.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Button } from '../Button';\n\nexport interface TabButtonProps {\n id: string;\n label: string;\n isSelected: boolean;\n isDisabled?: boolean;\n panelId?: string;\n tabIndex: number;\n className?: string;\n automationId?: string;\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n onFocus: () => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>) => void;\n}\n\n/**\n * Internal TabButton component for NavigationBar.\n * Uses Button (unstyled) internally for consistent activation handling.\n * Supports forwardRef for focus management (roving tabindex).\n */\nexport const TabButton = forwardRef<HTMLButtonElement, TabButtonProps>(\n (\n {\n id,\n label,\n isSelected,\n isDisabled = false,\n panelId,\n tabIndex,\n className = '',\n automationId,\n onClick,\n onFocus,\n onKeyDown\n },\n ref\n ) => {\n return (\n <Button\n ref={ref}\n type=\"unstyled\"\n label={label}\n disabled={isDisabled}\n onClick={onClick}\n className={className}\n automationId={automationId}\n role=\"tab\"\n id={id}\n aria-selected={isSelected}\n {...(panelId ? { 'aria-controls': panelId } : {})}\n tabIndex={tabIndex}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n />\n );\n }\n);\n\nTabButton.displayName = 'TabButton';\n"],"names":["TabButton","id","label","isSelected","isDisabled","panelId","tabIndex","className","automationId","onClick","onFocus","onKeyDown","ref","React","createElement","Button","_extends","type","disabled","role","displayName"],"mappings":";;;;;;;;;;;AAsBO,MAAMA,sBACX,CACE;AAAA,EACEC,IAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAC,YAAAA,IAAa;AAAA,EACbC,SAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,WAAAA,IAAY;AAAA,EACZC,cAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,WAAAA;AACF,GACAC,MAGEC,gBAAAA,EAAAC,cAACC,GAAMC,EAAA;AAAA,EACLJ,KAAAA;AAAAA,EACAK,MAAK;AAAA,EACLf,OAAAA;AAAAA,EACAgB,UAAUd;AAAAA,EACVK,SAAAA;AAAAA,EACAF,WAAAA;AAAAA,EACAC,cAAAA;AAAAA,EACAW,MAAK;AAAA,EACLlB,IAAAA;AAAAA,EACA,iBAAeE;AAAAA,GACVE,IAAU;AAAA,EAAE,iBAAiBA;AAAAA,IAAY,IAAE;AAAA,EAChDC,UAAAA;AAAAA,EACAI,SAAAA;AAAAA,EACAC,WAAAA;AAAAA,CAAqB,CACtB,CAGP;AAEAX,EAAUoB,cAAc;"}