se-design 1.0.90-dev.0 → 1.0.90

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 (462) hide show
  1. package/dist/assets/style.css +1 -1
  2. package/dist/components/AnchoredOverlay/index.d.ts +41 -0
  3. package/dist/components/index.d.ts +2 -0
  4. package/dist/index.js +132 -130
  5. package/dist/index.js.map +1 -1
  6. package/dist/index100.js +1 -1
  7. package/dist/index100.js.map +1 -1
  8. package/dist/index101.js +1 -1
  9. package/dist/index101.js.map +1 -1
  10. package/dist/index102.js +1 -1
  11. package/dist/index102.js.map +1 -1
  12. package/dist/index103.js +1 -1
  13. package/dist/index103.js.map +1 -1
  14. package/dist/index104.js +1 -1
  15. package/dist/index104.js.map +1 -1
  16. package/dist/index105.js +1 -1
  17. package/dist/index105.js.map +1 -1
  18. package/dist/index106.js +1 -1
  19. package/dist/index106.js.map +1 -1
  20. package/dist/index107.js +1 -1
  21. package/dist/index107.js.map +1 -1
  22. package/dist/index108.js +1 -1
  23. package/dist/index108.js.map +1 -1
  24. package/dist/index109.js +1 -1
  25. package/dist/index109.js.map +1 -1
  26. package/dist/index11.js +1 -1
  27. package/dist/index110.js +1 -1
  28. package/dist/index110.js.map +1 -1
  29. package/dist/index111.js +1 -1
  30. package/dist/index111.js.map +1 -1
  31. package/dist/index112.js +1 -1
  32. package/dist/index112.js.map +1 -1
  33. package/dist/index113.js +1 -1
  34. package/dist/index113.js.map +1 -1
  35. package/dist/index114.js +2 -2
  36. package/dist/index114.js.map +1 -1
  37. package/dist/index115.js +1 -1
  38. package/dist/index115.js.map +1 -1
  39. package/dist/index116.js +2 -2
  40. package/dist/index116.js.map +1 -1
  41. package/dist/index117.js +1 -1
  42. package/dist/index117.js.map +1 -1
  43. package/dist/index118.js +1 -1
  44. package/dist/index118.js.map +1 -1
  45. package/dist/index119.js +2 -2
  46. package/dist/index119.js.map +1 -1
  47. package/dist/index12.js +3 -3
  48. package/dist/index120.js +1 -1
  49. package/dist/index120.js.map +1 -1
  50. package/dist/index121.js +2 -2
  51. package/dist/index121.js.map +1 -1
  52. package/dist/index122.js +1 -1
  53. package/dist/index122.js.map +1 -1
  54. package/dist/index123.js +1 -1
  55. package/dist/index123.js.map +1 -1
  56. package/dist/index124.js +1 -1
  57. package/dist/index124.js.map +1 -1
  58. package/dist/index125.js +1 -1
  59. package/dist/index125.js.map +1 -1
  60. package/dist/index126.js +2 -2
  61. package/dist/index126.js.map +1 -1
  62. package/dist/index127.js +1 -1
  63. package/dist/index127.js.map +1 -1
  64. package/dist/index128.js +2 -2
  65. package/dist/index128.js.map +1 -1
  66. package/dist/index129.js +2 -2
  67. package/dist/index129.js.map +1 -1
  68. package/dist/index13.js +3 -3
  69. package/dist/index130.js +1 -1
  70. package/dist/index130.js.map +1 -1
  71. package/dist/index131.js +2 -2
  72. package/dist/index131.js.map +1 -1
  73. package/dist/index132.js +2 -2
  74. package/dist/index132.js.map +1 -1
  75. package/dist/index133.js +1 -1
  76. package/dist/index133.js.map +1 -1
  77. package/dist/index134.js +1 -1
  78. package/dist/index134.js.map +1 -1
  79. package/dist/index135.js +1 -1
  80. package/dist/index135.js.map +1 -1
  81. package/dist/index136.js +2 -2
  82. package/dist/index136.js.map +1 -1
  83. package/dist/index137.js +2 -2
  84. package/dist/index137.js.map +1 -1
  85. package/dist/index138.js +2 -2
  86. package/dist/index138.js.map +1 -1
  87. package/dist/index139.js +1 -1
  88. package/dist/index139.js.map +1 -1
  89. package/dist/index140.js +1 -1
  90. package/dist/index140.js.map +1 -1
  91. package/dist/index141.js +1 -1
  92. package/dist/index141.js.map +1 -1
  93. package/dist/index142.js +1 -1
  94. package/dist/index142.js.map +1 -1
  95. package/dist/index143.js +1 -1
  96. package/dist/index143.js.map +1 -1
  97. package/dist/index144.js +1 -1
  98. package/dist/index144.js.map +1 -1
  99. package/dist/index145.js +1 -1
  100. package/dist/index145.js.map +1 -1
  101. package/dist/index146.js +1 -1
  102. package/dist/index146.js.map +1 -1
  103. package/dist/index147.js +2 -2
  104. package/dist/index147.js.map +1 -1
  105. package/dist/index148.js +2 -2
  106. package/dist/index148.js.map +1 -1
  107. package/dist/index149.js +1 -1
  108. package/dist/index149.js.map +1 -1
  109. package/dist/index150.js +1 -1
  110. package/dist/index150.js.map +1 -1
  111. package/dist/index151.js +1 -1
  112. package/dist/index151.js.map +1 -1
  113. package/dist/index152.js +1 -1
  114. package/dist/index152.js.map +1 -1
  115. package/dist/index153.js +1 -1
  116. package/dist/index153.js.map +1 -1
  117. package/dist/index154.js +1 -1
  118. package/dist/index154.js.map +1 -1
  119. package/dist/index155.js +1 -1
  120. package/dist/index155.js.map +1 -1
  121. package/dist/index156.js +2 -2
  122. package/dist/index156.js.map +1 -1
  123. package/dist/index157.js +1 -1
  124. package/dist/index157.js.map +1 -1
  125. package/dist/index158.js +2 -2
  126. package/dist/index158.js.map +1 -1
  127. package/dist/index159.js +2 -2
  128. package/dist/index159.js.map +1 -1
  129. package/dist/index16.js +3 -3
  130. package/dist/index160.js +2 -2
  131. package/dist/index160.js.map +1 -1
  132. package/dist/index161.js +2 -2
  133. package/dist/index161.js.map +1 -1
  134. package/dist/index162.js +1 -1
  135. package/dist/index162.js.map +1 -1
  136. package/dist/index163.js +1 -1
  137. package/dist/index163.js.map +1 -1
  138. package/dist/index164.js +1 -1
  139. package/dist/index164.js.map +1 -1
  140. package/dist/index165.js +1 -1
  141. package/dist/index165.js.map +1 -1
  142. package/dist/index166.js +1 -1
  143. package/dist/index166.js.map +1 -1
  144. package/dist/index167.js +1 -1
  145. package/dist/index167.js.map +1 -1
  146. package/dist/index168.js +1 -1
  147. package/dist/index168.js.map +1 -1
  148. package/dist/index169.js +1 -1
  149. package/dist/index169.js.map +1 -1
  150. package/dist/index170.js +1 -1
  151. package/dist/index170.js.map +1 -1
  152. package/dist/index171.js +1 -1
  153. package/dist/index171.js.map +1 -1
  154. package/dist/index172.js +1 -1
  155. package/dist/index172.js.map +1 -1
  156. package/dist/index173.js +1 -1
  157. package/dist/index173.js.map +1 -1
  158. package/dist/index174.js +1 -1
  159. package/dist/index174.js.map +1 -1
  160. package/dist/index175.js +1 -1
  161. package/dist/index175.js.map +1 -1
  162. package/dist/index176.js +1 -1
  163. package/dist/index176.js.map +1 -1
  164. package/dist/index177.js +1 -1
  165. package/dist/index177.js.map +1 -1
  166. package/dist/index178.js +1 -1
  167. package/dist/index178.js.map +1 -1
  168. package/dist/index179.js +1 -1
  169. package/dist/index179.js.map +1 -1
  170. package/dist/index18.js +3 -3
  171. package/dist/index180.js +1 -1
  172. package/dist/index180.js.map +1 -1
  173. package/dist/index181.js +1 -1
  174. package/dist/index181.js.map +1 -1
  175. package/dist/index182.js +1 -1
  176. package/dist/index182.js.map +1 -1
  177. package/dist/index183.js +1 -1
  178. package/dist/index183.js.map +1 -1
  179. package/dist/index184.js +1 -1
  180. package/dist/index184.js.map +1 -1
  181. package/dist/index185.js +1 -1
  182. package/dist/index185.js.map +1 -1
  183. package/dist/index186.js +2 -2
  184. package/dist/index186.js.map +1 -1
  185. package/dist/index187.js +2 -2
  186. package/dist/index187.js.map +1 -1
  187. package/dist/index188.js +1 -1
  188. package/dist/index188.js.map +1 -1
  189. package/dist/index189.js +1 -1
  190. package/dist/index189.js.map +1 -1
  191. package/dist/index19.js +5 -5
  192. package/dist/index190.js +2 -2
  193. package/dist/index190.js.map +1 -1
  194. package/dist/index191.js +2 -2
  195. package/dist/index191.js.map +1 -1
  196. package/dist/index192.js +1 -1
  197. package/dist/index192.js.map +1 -1
  198. package/dist/index193.js +1 -1
  199. package/dist/index193.js.map +1 -1
  200. package/dist/index194.js +1 -1
  201. package/dist/index194.js.map +1 -1
  202. package/dist/index195.js +1 -1
  203. package/dist/index195.js.map +1 -1
  204. package/dist/index196.js +1 -1
  205. package/dist/index196.js.map +1 -1
  206. package/dist/index197.js +1 -1
  207. package/dist/index197.js.map +1 -1
  208. package/dist/index198.js +1 -1
  209. package/dist/index198.js.map +1 -1
  210. package/dist/index199.js +1 -1
  211. package/dist/index199.js.map +1 -1
  212. package/dist/index20.js +96 -18
  213. package/dist/index20.js.map +1 -1
  214. package/dist/index200.js +1 -1
  215. package/dist/index200.js.map +1 -1
  216. package/dist/index201.js +2 -2
  217. package/dist/index201.js.map +1 -1
  218. package/dist/index202.js +2 -2
  219. package/dist/index202.js.map +1 -1
  220. package/dist/index203.js +2 -2
  221. package/dist/index203.js.map +1 -1
  222. package/dist/index204.js +2 -149
  223. package/dist/index204.js.map +1 -1
  224. package/dist/index205.js +149 -9
  225. package/dist/index205.js.map +1 -1
  226. package/dist/index206.js +8 -5
  227. package/dist/index206.js.map +1 -1
  228. package/dist/index207.js +5 -42
  229. package/dist/index207.js.map +1 -1
  230. package/dist/index208.js +40 -18
  231. package/dist/index208.js.map +1 -1
  232. package/dist/index209.js +24 -0
  233. package/dist/index209.js.map +1 -0
  234. package/dist/index21.js +17 -32
  235. package/dist/index21.js.map +1 -1
  236. package/dist/index216.js +24 -68
  237. package/dist/index216.js.map +1 -1
  238. package/dist/index217.js +75 -0
  239. package/dist/index217.js.map +1 -0
  240. package/dist/index22.js +33 -66
  241. package/dist/index22.js.map +1 -1
  242. package/dist/{index223.js → index224.js} +1 -1
  243. package/dist/{index223.js.map → index224.js.map} +1 -1
  244. package/dist/{index225.js → index226.js} +1 -1
  245. package/dist/{index225.js.map → index226.js.map} +1 -1
  246. package/dist/index23.js +62 -83
  247. package/dist/index23.js.map +1 -1
  248. package/dist/{index233.js → index234.js} +1 -1
  249. package/dist/{index233.js.map → index234.js.map} +1 -1
  250. package/dist/{index236.js → index237.js} +1 -1
  251. package/dist/{index236.js.map → index237.js.map} +1 -1
  252. package/dist/index24.js +85 -21
  253. package/dist/index24.js.map +1 -1
  254. package/dist/index246.js +169 -3
  255. package/dist/index246.js.map +1 -1
  256. package/dist/index247.js +7 -0
  257. package/dist/index247.js.map +1 -0
  258. package/dist/index249.js +18 -9
  259. package/dist/index249.js.map +1 -1
  260. package/dist/index25.js +19 -401
  261. package/dist/index25.js.map +1 -1
  262. package/dist/index250.js +9 -9
  263. package/dist/index250.js.map +1 -1
  264. package/dist/index251.js +9 -4
  265. package/dist/index251.js.map +1 -1
  266. package/dist/index252.js +5 -170
  267. package/dist/index252.js.map +1 -1
  268. package/dist/index253.js +170 -11
  269. package/dist/index253.js.map +1 -1
  270. package/dist/index254.js +11 -6
  271. package/dist/index254.js.map +1 -1
  272. package/dist/index255.js +5 -5
  273. package/dist/index255.js.map +1 -1
  274. package/dist/index256.js +5 -37
  275. package/dist/index256.js.map +1 -1
  276. package/dist/index257.js +38 -2
  277. package/dist/index257.js.map +1 -1
  278. package/dist/index258.js +2 -8
  279. package/dist/index258.js.map +1 -1
  280. package/dist/index259.js +7 -326
  281. package/dist/index259.js.map +1 -1
  282. package/dist/index26.js +400 -44
  283. package/dist/index26.js.map +1 -1
  284. package/dist/index260.js +324 -47
  285. package/dist/index260.js.map +1 -1
  286. package/dist/index261.js +50 -2
  287. package/dist/index261.js.map +1 -1
  288. package/dist/index262.js +2 -76
  289. package/dist/index262.js.map +1 -1
  290. package/dist/index263.js +65 -82
  291. package/dist/index263.js.map +1 -1
  292. package/dist/index264.js +89 -48
  293. package/dist/index264.js.map +1 -1
  294. package/dist/index265.js +51 -7
  295. package/dist/index265.js.map +1 -1
  296. package/dist/index266.js +7 -4
  297. package/dist/index266.js.map +1 -1
  298. package/dist/index267.js +4 -51
  299. package/dist/index267.js.map +1 -1
  300. package/dist/index268.js +52 -2
  301. package/dist/index268.js.map +1 -1
  302. package/dist/index269.js +2 -2
  303. package/dist/index27.js +48 -23
  304. package/dist/index27.js.map +1 -1
  305. package/dist/index270.js +5 -0
  306. package/dist/index270.js.map +1 -0
  307. package/dist/index28.js +21 -108
  308. package/dist/index28.js.map +1 -1
  309. package/dist/index29.js +107 -147
  310. package/dist/index29.js.map +1 -1
  311. package/dist/index3.js +3 -3
  312. package/dist/index30.js +146 -132
  313. package/dist/index30.js.map +1 -1
  314. package/dist/index31.js +136 -76
  315. package/dist/index31.js.map +1 -1
  316. package/dist/index32.js +73 -94
  317. package/dist/index32.js.map +1 -1
  318. package/dist/index33.js +95 -73
  319. package/dist/index33.js.map +1 -1
  320. package/dist/index34.js +72 -38
  321. package/dist/index34.js.map +1 -1
  322. package/dist/index35.js +40 -72
  323. package/dist/index35.js.map +1 -1
  324. package/dist/index36.js +68 -94
  325. package/dist/index36.js.map +1 -1
  326. package/dist/index37.js +98 -77
  327. package/dist/index37.js.map +1 -1
  328. package/dist/index38.js +75 -311
  329. package/dist/index38.js.map +1 -1
  330. package/dist/index39.js +313 -75
  331. package/dist/index39.js.map +1 -1
  332. package/dist/index4.js +4 -4
  333. package/dist/index40.js +72 -79
  334. package/dist/index40.js.map +1 -1
  335. package/dist/index41.js +82 -32
  336. package/dist/index41.js.map +1 -1
  337. package/dist/index42.js +26 -43
  338. package/dist/index42.js.map +1 -1
  339. package/dist/index43.js +48 -109
  340. package/dist/index43.js.map +1 -1
  341. package/dist/index44.js +104 -50
  342. package/dist/index44.js.map +1 -1
  343. package/dist/index45.js +53 -142
  344. package/dist/index45.js.map +1 -1
  345. package/dist/index46.js +137 -188
  346. package/dist/index46.js.map +1 -1
  347. package/dist/index47.js +195 -35
  348. package/dist/index47.js.map +1 -1
  349. package/dist/index48.js +34 -32
  350. package/dist/index48.js.map +1 -1
  351. package/dist/index49.js +34 -147
  352. package/dist/index49.js.map +1 -1
  353. package/dist/index50.js +130 -67
  354. package/dist/index50.js.map +1 -1
  355. package/dist/index51.js +78 -453
  356. package/dist/index51.js.map +1 -1
  357. package/dist/index52.js +459 -96
  358. package/dist/index52.js.map +1 -1
  359. package/dist/index53.js +98 -43
  360. package/dist/index53.js.map +1 -1
  361. package/dist/index54.js +40 -35
  362. package/dist/index54.js.map +1 -1
  363. package/dist/index55.js +33 -87
  364. package/dist/index55.js.map +1 -1
  365. package/dist/index56.js +88 -159
  366. package/dist/index56.js.map +1 -1
  367. package/dist/index57.js +157 -143
  368. package/dist/index57.js.map +1 -1
  369. package/dist/index58.js +149 -33
  370. package/dist/index58.js.map +1 -1
  371. package/dist/index59.js +33 -86
  372. package/dist/index59.js.map +1 -1
  373. package/dist/index6.js +125 -125
  374. package/dist/index60.js +80 -113
  375. package/dist/index60.js.map +1 -1
  376. package/dist/index61.js +114 -73
  377. package/dist/index61.js.map +1 -1
  378. package/dist/index62.js +73 -147
  379. package/dist/index62.js.map +1 -1
  380. package/dist/index63.js +146 -312
  381. package/dist/index63.js.map +1 -1
  382. package/dist/index64.js +317 -46
  383. package/dist/index64.js.map +1 -1
  384. package/dist/index65.js +45 -142
  385. package/dist/index65.js.map +1 -1
  386. package/dist/index66.js +144 -12
  387. package/dist/index66.js.map +1 -1
  388. package/dist/index67.js +10 -53
  389. package/dist/index67.js.map +1 -1
  390. package/dist/index68.js +52 -110
  391. package/dist/index68.js.map +1 -1
  392. package/dist/index69.js +111 -17
  393. package/dist/index69.js.map +1 -1
  394. package/dist/index7.js +2 -2
  395. package/dist/index70.js +17 -64
  396. package/dist/index70.js.map +1 -1
  397. package/dist/index71.js +64 -25
  398. package/dist/index71.js.map +1 -1
  399. package/dist/index72.js +24 -105
  400. package/dist/index72.js.map +1 -1
  401. package/dist/index73.js +104 -58
  402. package/dist/index73.js.map +1 -1
  403. package/dist/index74.js +60 -19
  404. package/dist/index74.js.map +1 -1
  405. package/dist/index75.js +18 -168
  406. package/dist/index75.js.map +1 -1
  407. package/dist/index76.js +171 -18
  408. package/dist/index76.js.map +1 -1
  409. package/dist/index77.js +17 -10
  410. package/dist/index77.js.map +1 -1
  411. package/dist/index78.js +11 -5
  412. package/dist/index78.js.map +1 -1
  413. package/dist/index79.js +5 -62
  414. package/dist/index79.js.map +1 -1
  415. package/dist/index80.js +58 -23
  416. package/dist/index80.js.map +1 -1
  417. package/dist/index81.js +25 -9
  418. package/dist/index81.js.map +1 -1
  419. package/dist/index82.js +14 -0
  420. package/dist/index82.js.map +1 -0
  421. package/dist/index84.js +2 -2
  422. package/dist/index84.js.map +1 -1
  423. package/dist/index85.js +2 -2
  424. package/dist/index85.js.map +1 -1
  425. package/dist/index86.js +2 -2
  426. package/dist/index86.js.map +1 -1
  427. package/dist/index87.js +2 -2
  428. package/dist/index87.js.map +1 -1
  429. package/dist/index88.js +1 -1
  430. package/dist/index88.js.map +1 -1
  431. package/dist/index89.js +1 -1
  432. package/dist/index89.js.map +1 -1
  433. package/dist/index9.js +4 -4
  434. package/dist/index90.js +1 -1
  435. package/dist/index90.js.map +1 -1
  436. package/dist/index91.js +1 -1
  437. package/dist/index91.js.map +1 -1
  438. package/dist/index92.js +1 -1
  439. package/dist/index92.js.map +1 -1
  440. package/dist/index93.js +1 -1
  441. package/dist/index93.js.map +1 -1
  442. package/dist/index94.js +1 -1
  443. package/dist/index94.js.map +1 -1
  444. package/dist/index95.js +1 -1
  445. package/dist/index95.js.map +1 -1
  446. package/dist/index96.js +1 -1
  447. package/dist/index96.js.map +1 -1
  448. package/dist/index97.js +1 -1
  449. package/dist/index97.js.map +1 -1
  450. package/dist/index98.js +1 -1
  451. package/dist/index98.js.map +1 -1
  452. package/dist/index99.js +1 -1
  453. package/dist/index99.js.map +1 -1
  454. package/package.json +1 -1
  455. package/dist/index215.js +0 -31
  456. package/dist/index215.js.map +0 -1
  457. package/dist/index245.js +0 -173
  458. package/dist/index245.js.map +0 -1
  459. package/dist/index248.js +0 -22
  460. package/dist/index248.js.map +0 -1
  461. package/dist/index83.js +0 -5
  462. package/dist/index83.js.map +0 -1
package/dist/index26.js CHANGED
@@ -1,52 +1,408 @@
1
- import l from "react";
2
- import { Popover as m } from "./index19.js";
3
- import { MenuList as b } from "./index18.js";
4
- import { Icon as p } from "./index6.js";
5
- function c() {
6
- return c = Object.assign ? Object.assign.bind() : function(t) {
7
- for (var e = 1; e < arguments.length; e++) {
8
- var r = arguments[e];
9
- for (var n in r) ({}).hasOwnProperty.call(r, n) && (t[n] = r[n]);
1
+ import n, { useState as Q, useRef as ve, useEffect as _, useLayoutEffect as Re } from "react";
2
+ import { Popover as qe } from "./index19.js";
3
+ import { Icon as we } from "./index6.js";
4
+ import { Checkbox as He } from "./index24.js";
5
+ import { Button as Se } from "./index4.js";
6
+ import { InputWithIcon as Me } from "./index53.js";
7
+ import { useStableId as X } from "./index207.js";
8
+ import { useCombobox as xe } from "./index69.js";
9
+ import { getFocusableElements as Ue } from "./index72.js";
10
+ import "./index73.js";
11
+ import { announce as je } from "./index76.js";
12
+ function y() {
13
+ return y = Object.assign ? Object.assign.bind() : function(t) {
14
+ for (var h = 1; h < arguments.length; h++) {
15
+ var x = arguments[h];
16
+ for (var I in x) ({}).hasOwnProperty.call(x, I) && (t[I] = x[I]);
10
17
  }
11
18
  return t;
12
- }, c.apply(null, arguments);
19
+ }, y.apply(null, arguments);
13
20
  }
14
- const k = ({
15
- menuItems: t,
16
- variant: e = "primary",
17
- className: r = "",
18
- automationId: n = "",
19
- ariaLabel: s
20
- }) => {
21
- const u = (o) => t.map((a) => ({
22
- ...a,
23
- onClick: () => {
24
- a.onClick && a.onClick(a), o();
25
- }
26
- })), i = () => e === "secondary" ? {
27
- fill: "var(--color-blue-500)",
28
- stroke: "var(--color-blue-500)"
29
- } : {};
30
- return /* @__PURE__ */ l.createElement(m, {
31
- className: r,
32
- position: "bottom-left",
33
- automationId: n,
34
- ariaLabel: s,
35
- renderPopoverSrcElement: ({
36
- displayPopover: o
37
- }) => /* @__PURE__ */ l.createElement("div", {
38
- className: `se-design-kebab-menu ${o ? "bg-[var(--color-blue-100)]" : ""} hover:bg-[var(--color-blue-100)] rounded-[4px] transition-all duration-300 w-max p-1`
39
- }, /* @__PURE__ */ l.createElement(p, c({
40
- name: "kebab-menu"
41
- }, i()))),
42
- renderPopoverContents: ({
43
- closePopoverCb: o
44
- }) => /* @__PURE__ */ l.createElement(b, {
45
- items: u(o)
46
- })
21
+ const rt = (t) => {
22
+ const h = t.selectedValue !== void 0, x = t.isOpen !== void 0, [I, Ee] = Q(!1), [E, G] = Q(""), [Ie, Y] = Q(() => t?.defaultSelectedValue ? Array.isArray(t?.defaultSelectedValue) ? t?.defaultSelectedValue : [t.defaultSelectedValue] : []), d = ve(null), C = ve(null), T = X(void 0, "dropdown-label"), Z = X(void 0, "dropdown-value"), D = X(void 0, "dropdown-listbox"), a = x ? t.isOpen : I, s = h ? Array.isArray(t.selectedValue) ? t.selectedValue : t.selectedValue ? [t.selectedValue] : [] : Ie, V = (e) => {
23
+ x || Ee(e), t.onOpenChange?.(e);
24
+ }, B = (e) => {
25
+ h || Y(e);
26
+ }, {
27
+ selectBy: p = "",
28
+ optionsUniqueBy: u = "",
29
+ displaySelected: Ce = !1,
30
+ dropDownOptions: k,
31
+ defaultText: g = "Select",
32
+ iconColor: ee = "var(--color-gray-700)",
33
+ disabled: A = !1,
34
+ dropdownClassName: De = "",
35
+ hasError: te = !1,
36
+ errorMessage: ke = "",
37
+ customDropdownContent: oe = null,
38
+ isBorderless: Pe = !1,
39
+ shouldShowSearch: c = !1,
40
+ showSearchIcon: Ne = !0,
41
+ searchPlaceholder: ne = "Search...",
42
+ searchResultEmptyMessage: re = "No results found",
43
+ ariaLabel: v = "",
44
+ customSelectedValue: R = "",
45
+ isWithPortal: q = !1,
46
+ firstOptionAsHeading: le = !1
47
+ } = t;
48
+ _(() => {
49
+ if (!h) {
50
+ const e = t?.defaultSelectedValue ? Array.isArray(t?.defaultSelectedValue) ? t?.defaultSelectedValue : [t.defaultSelectedValue] : [];
51
+ Y(e);
52
+ }
53
+ }, [t?.defaultSelectedValue, h]), _(() => {
54
+ a || G("");
55
+ }, [a]), _(() => {
56
+ a && c && C.current && requestAnimationFrame(() => C.current?.focus());
57
+ }, [a, c]), Re(() => {
58
+ t.popoverElementRef && (t.popoverElementRef.current = d.current?.element ?? null);
47
59
  });
60
+ const i = t?.type === "multi-select", ae = {
61
+ __noResults: !0,
62
+ id: "__no_results__",
63
+ value: "__no_results__"
64
+ }, se = (e) => !!e?.__noResults, $e = () => E.trim() ? (k || []).filter((e) => (e?.[p]?.toString().toLowerCase() || "").includes(E.toLowerCase())) : k || [], K = (e) => {
65
+ B([e]), V(!1), t?.onOptionClick?.(e), requestAnimationFrame(() => {
66
+ requestAnimationFrame(() => {
67
+ d.current?.focusTrigger();
68
+ });
69
+ });
70
+ }, l = $e(), ie = l.length === 0 && (E.trim() || k?.length === 0), H = i ? [] : l.length > 0 ? l : ie ? [ae] : [], M = i ? l.length > 0 ? l : ie ? [ae] : [] : [], {
71
+ listboxProps: U,
72
+ getOptionProps: ce,
73
+ highlightedIndex: w,
74
+ setHighlightedIndex: de,
75
+ containerProps: j,
76
+ inputProps: L,
77
+ isKeyboardFocused: W
78
+ } = xe({
79
+ items: H,
80
+ isOpen: a && !i,
81
+ onOpenChange: V,
82
+ onSelect: (e) => {
83
+ K(e);
84
+ },
85
+ listboxId: D,
86
+ disabled: i || A,
87
+ hasItems: H.length > 0,
88
+ isItemDisabled: se
89
+ }), {
90
+ inputProps: z,
91
+ listboxProps: P,
92
+ containerProps: N,
93
+ highlightedIndex: S,
94
+ setHighlightedIndex: Ve,
95
+ isKeyboardFocused: J
96
+ } = xe({
97
+ items: M,
98
+ isOpen: a && i,
99
+ onOpenChange: V,
100
+ onSelect: () => {
101
+ },
102
+ listboxId: D,
103
+ disabled: !i,
104
+ loop: !1,
105
+ hasItems: M.length > 0,
106
+ closeOnTab: !1,
107
+ isItemDisabled: se
108
+ }), ue = i ? S : w;
109
+ _(() => {
110
+ a && l.length === 0 && (E.trim() || k?.length === 0) && ue === -1 && je(re, {
111
+ assertiveness: "polite",
112
+ batchId: "dropdown-empty-state",
113
+ delay: 300
114
+ });
115
+ }, [l.length, a, E, k?.length, ue]);
116
+ const Ae = (e, o = !1) => i ? g : o && R ? R : e?.[p] || g, Ke = () => {
117
+ B([]), t?.onClear?.();
118
+ }, me = (e, o = !1) => {
119
+ if (t?.renderOptionChip)
120
+ return t?.renderOptionChip(e, o);
121
+ if (i && s?.length > 0) {
122
+ const f = s[0]?.[p] || "", $ = s.length - 1;
123
+ return /* @__PURE__ */ n.createElement("div", {
124
+ className: "option-chip flex items-center w-full"
125
+ }, /* @__PURE__ */ n.createElement("div", {
126
+ className: `${$ > 0 ? "w-full" : "flex-1"} truncate`
127
+ }, `${g}: ${f}`), $ > 0 && /* @__PURE__ */ n.createElement("div", {
128
+ className: "flex-shrink-0"
129
+ }, "+", $));
130
+ }
131
+ const r = Ae(e, o), m = !!t?.label || !!t?.ariaLabelledBy, b = o && g && e?.[p] && !R && !m;
132
+ return /* @__PURE__ */ n.createElement("p", {
133
+ className: "option-chip flex flex-1 items-center justify-between"
134
+ }, b ? `${g}: ${r}` : r);
135
+ }, fe = (e) => /* @__PURE__ */ n.createElement("div", {
136
+ className: " w-full relative flex items-center border-b border-[var(--color-gray-300)]"
137
+ }, /* @__PURE__ */ n.createElement(Me, {
138
+ leftIcon: Ne ? {
139
+ name: "search",
140
+ position: "left",
141
+ style: {
142
+ color: "var(--color-gray-500)"
143
+ }
144
+ } : void 0,
145
+ value: E,
146
+ onChange: (o) => G(o),
147
+ placeholder: ne,
148
+ style: {
149
+ margin: 0,
150
+ gap: 0
151
+ },
152
+ inputStyle: {
153
+ width: "100%",
154
+ border: "none",
155
+ outline: "none"
156
+ },
157
+ automationId: "se-design-dropdown-search",
158
+ ariaLabel: ne,
159
+ inputRef: C,
160
+ inputProps: e
161
+ })), ge = () => fe(i ? {
162
+ ...z,
163
+ onKeyDown: (e) => be(e, !0)
164
+ } : {
165
+ ...L,
166
+ onKeyDown: (e) => {
167
+ L.onKeyDown(e), e.key === "Escape" && requestAnimationFrame(() => d.current?.focusTrigger());
168
+ }
169
+ }), ye = (e, o) => {
170
+ const r = e[p], m = s[0]?.[p] || g, b = u?.length ? e[u] == s[0]?.[u] : !0, f = Ce && r === m && b, $ = w === o, Be = i ? {} : ce(o, f);
171
+ return /* @__PURE__ */ n.createElement("div", y({
172
+ key: e.id || e.value,
173
+ className: `option break-words px-3 py-2 hover:bg-[var(--color-gray-100)] cursor-pointer select-none flex items-center justify-between ${f ? "selected" : ""} ${$ ? `bg-[var(--color-gray-100)]${W ? " outline outline-[length:var(--focus-width)] -outline-offset-2 outline-[var(--focus-color)]" : ""}` : ""}`,
174
+ onClick: () => K(e),
175
+ onKeyDown: (F) => {
176
+ F.key === "Enter" || F.key === " " ? (F.preventDefault(), K(e)) : F.key === "Escape" && requestAnimationFrame(() => d.current?.focusTrigger());
177
+ },
178
+ tabIndex: -1,
179
+ "data-automation-id": `dropdown-option-${e?.automationId || o}`
180
+ }, Be, {
181
+ "aria-selected": f ? "true" : "false"
182
+ }), me({
183
+ ...e,
184
+ isOptionSelected: f
185
+ }, !1), f && /* @__PURE__ */ n.createElement(we, {
186
+ name: "checkmark",
187
+ stroke: ee
188
+ }));
189
+ }, O = (e, o, r) => /* @__PURE__ */ n.createElement("div", y({}, r ? {
190
+ id: `${D}-option-0`,
191
+ role: "option",
192
+ "aria-disabled": !0
193
+ } : ce(0, !1), {
194
+ className: `px-3 py-4 text-center text-[var(--color-gray-700)] text-sm${e === 0 ? ` bg-[var(--color-gray-100)]${o ? " outline outline-[length:var(--focus-width)] -outline-offset-2 outline-[var(--focus-color)]" : ""}` : ""}`
195
+ }), re), Le = () => /* @__PURE__ */ n.createElement(n.Fragment, null, t?.label && le && /* @__PURE__ */ n.createElement("div", {
196
+ "aria-hidden": "true",
197
+ className: "px-3 pt-2 pb-1 text-[var(--color-gray-650)] text-xs cursor-default select-none"
198
+ }, t.label), c && ge(), /* @__PURE__ */ n.createElement("div", y({
199
+ className: `dropdown-content dropdown-options${c ? "" : " flex flex-col max-h-80 overflow-y-auto"}`
200
+ }, c ? {} : {
201
+ ...U,
202
+ "aria-label": `${g} options`,
203
+ style: {
204
+ outline: "none"
205
+ },
206
+ tabIndex: -1,
207
+ "aria-activedescendant": L["aria-activedescendant"],
208
+ onKeyDown: (e) => {
209
+ if (j.onKeyDownCapture?.(e), e.key === " ") {
210
+ e.preventDefault(), w >= 0 && l[w] && K(l[w]);
211
+ return;
212
+ }
213
+ L.onKeyDown(e);
214
+ },
215
+ onFocus: () => {
216
+ w === -1 && H.length > 0 && de(0);
217
+ }
218
+ }), c ? /* @__PURE__ */ n.createElement("div", y({
219
+ className: "flex flex-col max-h-80 overflow-y-auto",
220
+ "aria-label": `${g} options`
221
+ }, U), l.length > 0 ? l.map((e, o) => ye(e, o)) : O(w, W, !1)) : l.length > 0 ? l.map((e, o) => ye(e, o)) : O(w, W, !1))), pe = (e, o) => {
222
+ let r = [];
223
+ e ? r = [...s, o] : r = s?.filter((m) => m[u] !== o[u]), B(r);
224
+ }, Oe = () => {
225
+ d.current?.togglePopover(), d.current?.focusTrigger(), t?.onApply?.(s);
226
+ }, be = (e, o = !1) => {
227
+ if (!(o && e.key === " ")) {
228
+ if (e.key === "Enter" || e.key === " ") {
229
+ if (e.preventDefault(), S >= 0 && S < l.length) {
230
+ const r = l[S], m = s.some((b) => b[u] === r[u]);
231
+ pe(!m, r);
232
+ }
233
+ return;
234
+ }
235
+ z.onKeyDown(e), e.key === "Escape" && (e.stopPropagation(), requestAnimationFrame(() => d.current?.focusTrigger()));
236
+ }
237
+ }, he = (e, o) => {
238
+ const r = s.some((f) => f[u] === e[u]), m = `${D}-option-${o}`, b = S === o;
239
+ return /* @__PURE__ */ n.createElement("div", {
240
+ key: e.id || e.value,
241
+ id: m,
242
+ role: "option",
243
+ "aria-selected": r,
244
+ className: `option px-3 py-2 hover:bg-[var(--color-gray-100)] cursor-pointer select-none flex items-center gap-2 ${b ? `bg-[var(--color-gray-100)]${J ? " outline outline-[length:var(--focus-width)] -outline-offset-2 outline-[var(--focus-color)]" : ""}` : ""}`,
245
+ tabIndex: -1,
246
+ onClick: () => pe(!r, e),
247
+ "data-automation-id": `dropdown-option-${e?.automationId || o}`
248
+ }, /* @__PURE__ */ n.createElement(He, {
249
+ tabIndex: -1,
250
+ ariaHidden: !0,
251
+ checked: r,
252
+ onChange: () => {
253
+ },
254
+ className: "pointer-events-none"
255
+ }), /* @__PURE__ */ n.createElement("span", {
256
+ className: "checkbox-label"
257
+ }, e?.label));
258
+ }, Fe = () => /* @__PURE__ */ n.createElement("div", {
259
+ onKeyDown: (e) => {
260
+ e.key === "Tab" && e.stopPropagation();
261
+ }
262
+ }, c && ge(), /* @__PURE__ */ n.createElement("div", y({
263
+ className: `dropdown-content dropdown-options${c ? "" : " flex flex-col max-h-80 overflow-y-auto"}`
264
+ }, c ? {} : {
265
+ ...P,
266
+ "aria-label": `${g} options`,
267
+ "aria-multiselectable": "true",
268
+ style: {
269
+ outline: "none"
270
+ },
271
+ tabIndex: -1,
272
+ "aria-activedescendant": z["aria-activedescendant"],
273
+ onKeyDown: (e) => be(e, !1),
274
+ onFocus: () => {
275
+ S === -1 && M.length > 0 && Ve(0);
276
+ }
277
+ }), c ? /* @__PURE__ */ n.createElement("div", y({
278
+ className: "flex flex-col max-h-80 overflow-y-auto"
279
+ }, P, {
280
+ "aria-label": `${g} options`,
281
+ "aria-multiselectable": "true"
282
+ }), l.length > 0 ? l.map((e, o) => he(e, o)) : O(S, J, !0)) : l.length > 0 ? l.map((e, o) => he(e, o)) : O(S, J, !0)), /* @__PURE__ */ n.createElement("div", {
283
+ className: "flex items-center justify-end gap-4 p-3 border-t border-[var(--color-gray-200)]",
284
+ onKeyDown: (e) => {
285
+ if (e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Home" || e.key === "End") {
286
+ e.stopPropagation();
287
+ return;
288
+ }
289
+ if (e.key === "Tab" && !e.shiftKey) {
290
+ const o = e.currentTarget.querySelector('[data-automation-id="se-design-dropdown-apply-button"]');
291
+ if (document.activeElement === o && (e.stopPropagation(), d.current?.togglePopover(), q)) {
292
+ e.preventDefault();
293
+ const r = d.current?.element, m = Ue({
294
+ container: document.body,
295
+ filterHidden: !0
296
+ }), b = r ? m.indexOf(r) : -1, f = m[b + 1];
297
+ f ? f.focus() : r?.focus();
298
+ }
299
+ } else e.key === "Tab" && e.shiftKey && (e.preventDefault(), e.stopPropagation(), c ? C.current?.focus() : P.ref.current?.focus());
300
+ }
301
+ }, /* @__PURE__ */ n.createElement(Se, {
302
+ label: "Clear",
303
+ type: "link",
304
+ size: "sm",
305
+ onClick: Ke,
306
+ automationId: "se-design-dropdown-clear-button"
307
+ }), /* @__PURE__ */ n.createElement(Se, {
308
+ label: "Apply",
309
+ type: "primary",
310
+ size: "sm",
311
+ onClick: Oe,
312
+ automationId: "se-design-dropdown-apply-button"
313
+ }))), _e = () => {
314
+ const e = a ? "border-[var(--color-blue-500)]" : A ? "border-[var(--color-gray-300)]" : "border-[var(--color-gray-600)]", o = te ? "border-[var(--color-red-500)]" : "", r = `dropdown-src-element bg-[var(--color-white)] flex px-3 py-2 ${Pe ? "border-0" : `border rounded-md ${o || e}`} flex items-center ${De}`;
315
+ return /* @__PURE__ */ n.createElement("div", {
316
+ className: r
317
+ }, /* @__PURE__ */ n.createElement("div", {
318
+ id: Z,
319
+ className: "flex-1 min-w-0",
320
+ "data-automation-id": t?.dropDownSelectAutomationId || "selected-dropdown-value"
321
+ }, me(s[0], !0)), /* @__PURE__ */ n.createElement("div", {
322
+ className: "flex-shrink-0 ml-2",
323
+ "aria-hidden": "true"
324
+ }, /* @__PURE__ */ n.createElement(we, {
325
+ name: "chevron",
326
+ rotation: a ? "180" : "0",
327
+ className: "transition-transform",
328
+ stroke: ee
329
+ })));
330
+ }, Te = () => {
331
+ const e = s[0]?.[p];
332
+ return v && e ? `${v}, ${e}` : v || g || "Select option";
333
+ };
334
+ return /* @__PURE__ */ n.createElement("div", {
335
+ className: `se-design-dropdown-container${t?.className ? ` ${t?.className}` : ""}`,
336
+ style: t?.style
337
+ }, t?.label ? /* @__PURE__ */ n.createElement("div", {
338
+ id: T,
339
+ className: `se-design-dropdown-label ${le ? "sr-only" : "mb-[3px] text-[var(--color-gray-700)] text-sm"}`
340
+ }, t?.label) : !t?.ariaLabelledBy && v ? /* @__PURE__ */ n.createElement("span", {
341
+ id: T,
342
+ className: "sr-only"
343
+ }, v) : null, /* @__PURE__ */ n.createElement("div", y({
344
+ style: t?.style,
345
+ className: `${A ? "bg-[var(--color-gray-50)] rounded-md cursor-not-allowed" : ""}`
346
+ }, i ? {
347
+ // Multi-select: only spread focus-tracking handlers for isKeyboardFocused.
348
+ // Dismiss is handled by Popover — don't spread onBlurCapture.
349
+ onPointerMove: N.onPointerMove,
350
+ onPointerDown: N.onPointerDown,
351
+ onPointerUp: N.onPointerUp,
352
+ onFocusCapture: N.onFocusCapture,
353
+ onKeyDownCapture: (e) => {
354
+ if (e.key === "Escape" && a && (e.stopPropagation(), d.current?.focusTrigger()), (e.key === "ArrowDown" || e.key === "ArrowUp") && a) {
355
+ const o = c ? C.current : P.ref.current;
356
+ o && document.activeElement !== o && !o.contains(document.activeElement) && o.focus();
357
+ }
358
+ N.onKeyDownCapture?.(e);
359
+ }
360
+ } : {
361
+ ...j,
362
+ onKeyDownCapture: (e) => {
363
+ (e.key === "Escape" || e.key === "Tab") && a && (e.stopPropagation(), d.current?.focusTrigger()), j.onKeyDownCapture?.(e);
364
+ },
365
+ // Portal content lives in document.body — focus moving into it looks like "focus out" to
366
+ // the container's blur handler, causing immediate close. Suppress it; the Popover's own
367
+ // onBlur handler checks both source and portal content and handles dismissal correctly.
368
+ ...q ? {
369
+ onBlurCapture: void 0
370
+ } : {}
371
+ }), /* @__PURE__ */ n.createElement(qe, y({
372
+ ref: d,
373
+ isPopoverOpen: a,
374
+ isWithPortal: q,
375
+ renderPopoverContents: oe || (i ? Fe : Le),
376
+ contentWidth: "full",
377
+ popoverContentStyleProperty: t.popoverContentStyleProperty,
378
+ renderPopoverSrcElement: t.renderSrcElement ? () => t.renderSrcElement({
379
+ isOpen: a,
380
+ selectedValue: s
381
+ }) : _e,
382
+ onPopoverToggle: (e) => {
383
+ if (V(e), e && !i && s.length > 0) {
384
+ const o = l.findIndex((r) => u ? r[u] === s[0]?.[u] : r[p] === s[0]?.[p]);
385
+ o >= 0 && de(o);
386
+ }
387
+ if (e && !c) {
388
+ const o = i ? P.ref : U.ref;
389
+ requestAnimationFrame(() => requestAnimationFrame(() => o.current?.focus()));
390
+ }
391
+ },
392
+ disabled: A,
393
+ automationId: t?.dropDownSrcAutomationId,
394
+ popoverContentAutomationId: t?.dropDownContentAutomationId,
395
+ ariaLabelledBy: t?.label || t?.ariaLabelledBy || v ? [t?.label || !t?.ariaLabelledBy && v ? T : t?.ariaLabelledBy, Z].filter(Boolean).join(" ") : void 0,
396
+ ariaLabel: !t?.label && !v && !t?.ariaLabelledBy ? Te() : void 0,
397
+ sourceRole: "button",
398
+ "aria-haspopup": "listbox"
399
+ }, a ? {
400
+ "aria-controls": D
401
+ } : {}))), te && /* @__PURE__ */ n.createElement("div", {
402
+ className: "text-[var(--color-red-500)] text-sm"
403
+ }, ke));
48
404
  };
49
405
  export {
50
- k as KebabMenu
406
+ rt as Dropdown
51
407
  };
52
408
  //# sourceMappingURL=index26.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index26.js","sources":["../src/components/KebabMenu/index.tsx"],"sourcesContent":["import React, { FC } from 'react';\n\nimport { Popover } from 'components/Popover';\nimport { MenuItemProps } from 'components/MenuItem';\nimport { MenuList } from 'components/MenuList';\nimport { Icon } from 'components/Icon';\n\nexport interface KebabMenuProps {\n className?: string;\n automationId?: string;\n menuItems: MenuItemProps[];\n variant?: 'primary' | 'secondary' | '';\n ariaLabel?: string;\n}\n\nexport const KebabMenu: FC<KebabMenuProps> = ({ menuItems, variant = 'primary', className = '', automationId = '', ariaLabel }) => {\n const getUpdatedMenuItems = (closePopoverCb: () => void) => {\n return menuItems.map((item) => ({\n ...item,\n onClick: () => {\n item.onClick && item.onClick(item);\n closePopoverCb();\n }\n }))\n }\n\n const getKebabIconVariant = () => {\n if(variant === 'secondary') {\n return {fill: 'var(--color-blue-500)', stroke: 'var(--color-blue-500)'}\n }\n return {}\n }\n\n return <Popover\n className={className}\n position='bottom-left'\n automationId={automationId}\n ariaLabel={ariaLabel}\n renderPopoverSrcElement={({ displayPopover }) => (\n <div className={`se-design-kebab-menu ${displayPopover ? 'bg-[var(--color-blue-100)]' : ''} hover:bg-[var(--color-blue-100)] rounded-[4px] transition-all duration-300 w-max p-1`}>\n <Icon name=\"kebab-menu\" {...getKebabIconVariant()} />\n </div>\n )}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList items={getUpdatedMenuItems(closePopoverCb)} />\n )}\n />\n };\n"],"names":["KebabMenu","menuItems","variant","className","automationId","ariaLabel","getUpdatedMenuItems","closePopoverCb","map","item","onClick","getKebabIconVariant","fill","stroke","React","createElement","Popover","position","renderPopoverSrcElement","displayPopover","Icon","_extends","name","renderPopoverContents","MenuList","items"],"mappings":";;;;;;;;;;;;;AAeO,MAAMA,IAAgCA,CAAC;AAAA,EAAEC,WAAAA;AAAAA,EAAWC,SAAAA,IAAU;AAAA,EAAWC,WAAAA,IAAY;AAAA,EAAIC,cAAAA,IAAe;AAAA,EAAIC,WAAAA;AAAU,MAAM;AACjI,QAAMC,IAAsBA,CAACC,MACpBN,EAAUO,IAAKC,CAAAA,OAAU;AAAA,IAC9B,GAAGA;AAAAA,IACHC,SAASA,MAAM;AACbD,MAAAA,EAAKC,WAAWD,EAAKC,QAAQD,CAAI,GACjCF,EAAAA;AAAAA,IACF;AAAA,EAAA,EACA,GAGEI,IAAsBA,MACvBT,MAAY,cACN;AAAA,IAACU,MAAM;AAAA,IAAyBC,QAAQ;AAAA,EAAA,IAE1C,CAAA;AAGT,SAAOC,gBAAAA,EAAAC,cAACC,GAAO;AAAA,IACXb,WAAAA;AAAAA,IACAc,UAAS;AAAA,IACTb,cAAAA;AAAAA,IACAC,WAAAA;AAAAA,IACAa,yBAAyBA,CAAC;AAAA,MAAEC,gBAAAA;AAAAA,IAAAA,MAC1BL,gBAAAA,EAAAC,cAAA,OAAA;AAAA,MAAKZ,WAAW,wBAAwBgB,IAAiB,+BAA+B,EAAE;AAAA,IAAA,GACtFL,gBAAAA,EAAAC,cAACK,GAAIC,EAAA;AAAA,MAACC,MAAK;AAAA,IAAA,GAAiBX,EAAAA,CAAqB,CAAG,CACnD;AAAA,IAEPY,uBAAuBA,CAAC;AAAA,MAAEhB,gBAAAA;AAAAA,IAAAA,MACxBO,gBAAAA,EAAAC,cAACS,GAAQ;AAAA,MAACC,OAAOnB,EAAoBC,CAAc;AAAA,IAAA,CAAI;AAAA,EAAA,CAE1D;AACH;"}
1
+ {"version":3,"file":"index26.js","sources":["../src/components/Dropdown/index.tsx"],"sourcesContent":["import React, { FC, useState, useRef, useEffect, useLayoutEffect } from 'react';\n\nimport { Popover, PopoverHandle } from 'src/components/Popover';\nimport { Icon } from 'components/Icon';\nimport { Checkbox } from '../Checkbox';\nimport { Button } from '../Button';\nimport { InputWithIcon } from '../InputWithIcon';\nimport { useStableId } from '../../utils/useStableId';\nimport { useCombobox } from '../../utils/a11y/useCombobox';\nimport { getFocusableElements } from '../../utils/a11y';\nimport { announce } from '../../utils/a11y/liveAnnouncer/LiveAnnouncer';\n\ntype DropdownValue = {\n [key: string]: any;\n};\n\ntype DropdownProps = {\n label?: string;\n firstOptionAsHeading?: boolean;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n type: 'select' | 'multi-select';\n dropDownOptions?: DropdownValue[];\n defaultText?: string;\n selectBy?: string;\n optionsUniqueBy?: string;\n displaySelected?: boolean;\n defaultSelectedValue?: DropdownValue | DropdownValue[];\n customSelectedValue?: string;\n onOptionClick?: (selectedValue: DropdownValue) => void;\n style?: React.CSSProperties;\n renderOptionChip?: (option: DropdownValue, srcOption: boolean) => React.ReactNode;\n className?: string;\n iconColor?: string;\n disabled?: boolean;\n dropdownClassName?: string;\n hasError?: boolean;\n errorMessage?: string;\n onApply?: (selectedValue: DropdownValue[]) => void;\n onClear?: () => void;\n customDropdownContent?: () => React.ReactNode;\n isBorderless?: boolean;\n dropDownSrcAutomationId?: string;\n dropDownSelectAutomationId?: string;\n dropDownContentAutomationId?: string;\n shouldShowSearch?: boolean;\n showSearchIcon?: boolean;\n searchPlaceholder?: string;\n searchResultEmptyMessage?: string;\n /** Controlled selection — when provided, Dropdown won't manage internal selected state */\n selectedValue?: DropdownValue | DropdownValue[];\n /** Controlled open state — when provided, Dropdown won't manage internal open/close */\n isOpen?: boolean;\n /** Callback when open state changes (fires in both controlled and uncontrolled modes) */\n onOpenChange?: (isOpen: boolean) => void;\n /** Custom trigger element — replaces the default bordered div + chevron */\n renderSrcElement?: (props: { isOpen: boolean; selectedValue: DropdownValue[] }) => React.ReactNode;\n /** Render the dropdown panel in a portal (document.body) to escape overflow:hidden containers */\n isWithPortal?: boolean;\n /** Optional ref that will be populated with the Popover wrapper element on mount.\n * Use with setFocusAnchor() to return focus to the dropdown trigger after a modal closes. */\n popoverElementRef?: React.RefObject<HTMLElement | null>;\n /** Inline styles forwarded to the Popover content (portal or inline). Useful for min-width overrides. */\n popoverContentStyleProperty?: React.CSSProperties;\n};\n\nexport const Dropdown: FC<DropdownProps> = (props) => {\n const isControlledSelection = props.selectedValue !== undefined;\n const isControlledOpen = props.isOpen !== undefined;\n\n const [internalIsOpen, setInternalIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [internalSelectedValues, setInternalSelectedValues] = useState<DropdownValue[]>(() =>\n props?.defaultSelectedValue\n ? Array.isArray(props?.defaultSelectedValue)\n ? props?.defaultSelectedValue\n : [props.defaultSelectedValue]\n : []\n );\n const popoverRef = useRef<HTMLDivElement & PopoverHandle>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const labelId = useStableId(undefined, 'dropdown-label');\n const valueId = useStableId(undefined, 'dropdown-value');\n const listboxId = useStableId(undefined, 'dropdown-listbox');\n\n // Derived state: controlled props take precedence over internal state\n const isDropDownOpen = isControlledOpen ? props.isOpen! : internalIsOpen;\n const selectedDropDownValues = isControlledSelection\n ? (Array.isArray(props.selectedValue) ? props.selectedValue : props.selectedValue ? [props.selectedValue] : [])\n : internalSelectedValues;\n\n const setIsDropDownOpen = (value: boolean) => {\n if (!isControlledOpen) {\n setInternalIsOpen(value);\n }\n props.onOpenChange?.(value);\n };\n\n const setSelectedDropDownValues = (values: DropdownValue[]) => {\n if (!isControlledSelection) {\n setInternalSelectedValues(values);\n }\n };\n\n const {\n selectBy = '',\n optionsUniqueBy = '',\n displaySelected = false,\n dropDownOptions,\n defaultText = 'Select',\n iconColor = 'var(--color-gray-700)',\n disabled = false,\n dropdownClassName = '',\n hasError = false,\n errorMessage = '',\n customDropdownContent = null,\n isBorderless = false,\n shouldShowSearch = false,\n showSearchIcon = true,\n searchPlaceholder = 'Search...',\n searchResultEmptyMessage = 'No results found',\n ariaLabel = '',\n customSelectedValue = '',\n isWithPortal = false,\n firstOptionAsHeading = false\n } = props;\n\n useEffect(() => {\n if (!isControlledSelection) {\n const newValues = props?.defaultSelectedValue\n ? Array.isArray(props?.defaultSelectedValue)\n ? props?.defaultSelectedValue\n : [props.defaultSelectedValue]\n : [];\n setInternalSelectedValues(newValues);\n }\n }, [props?.defaultSelectedValue, isControlledSelection]);\n\n useEffect(() => {\n if (!isDropDownOpen) {\n setSearchQuery('');\n }\n }, [isDropDownOpen]);\n\n // Focus search input when dropdown opens with search enabled\n useEffect(() => {\n if (isDropDownOpen && shouldShowSearch && searchInputRef.current) {\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isDropDownOpen, shouldShowSearch]);\n\n // Populate caller's popoverElementRef with the Popover wrapper element.\n // Runs after mount so popoverRef.current is set.\n useLayoutEffect(() => {\n if (props.popoverElementRef) {\n props.popoverElementRef.current = popoverRef.current?.element ?? null;\n }\n });\n\n const isMultiSelect = props?.type === 'multi-select';\n\n // Sentinel item for empty state — enables keyboard navigation to \"No results found\"\n const NO_RESULTS_SENTINEL: DropdownValue = { __noResults: true, id: '__no_results__', value: '__no_results__' };\n const isNoResultsSentinel = (item: DropdownValue) => !!item?.__noResults;\n\n const getFilteredOptions = () => {\n if (!searchQuery.trim()) {\n return dropDownOptions || [];\n }\n return (dropDownOptions || []).filter((option) => {\n const optionValue = option?.[selectBy]?.toString().toLowerCase() || '';\n return optionValue.includes(searchQuery.toLowerCase());\n });\n };\n\n const handleDropDownOptionClick = (dropDownOption: any) => {\n setSelectedDropDownValues([dropDownOption]);\n setIsDropDownOpen(false);\n props?.onOptionClick?.(dropDownOption);\n // Restore focus to the trigger after portal unmounts.\n // Double rAF ensures this runs after React re-renders AND the focus trap safety net,\n // getting the final say on focus.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n popoverRef.current?.focusTrigger();\n });\n });\n };\n\n // Use useCombobox hook for keyboard navigation (only for single-select)\n const filteredOptions = getFilteredOptions();\n const showEmptyState = filteredOptions.length === 0 && (searchQuery.trim() || dropDownOptions?.length === 0);\n // Inject sentinel so arrow keys can reach \"No results found\"\n const singleSelectItems = !isMultiSelect\n ? (filteredOptions.length > 0 ? filteredOptions : (showEmptyState ? [NO_RESULTS_SENTINEL] : []))\n : [];\n const multiSelectItems = isMultiSelect\n ? (filteredOptions.length > 0 ? filteredOptions : (showEmptyState ? [NO_RESULTS_SENTINEL] : []))\n : [];\n\n const {\n listboxProps,\n getOptionProps,\n highlightedIndex,\n setHighlightedIndex,\n containerProps: comboboxContainerProps,\n inputProps: comboboxInputProps,\n isKeyboardFocused: isSingleSelectKeyboardFocused\n } = useCombobox({\n items: singleSelectItems,\n isOpen: isDropDownOpen && !isMultiSelect,\n onOpenChange: setIsDropDownOpen,\n onSelect: (item: DropdownValue) => {\n handleDropDownOptionClick(item);\n },\n listboxId,\n disabled: isMultiSelect || disabled,\n hasItems: singleSelectItems.length > 0,\n isItemDisabled: isNoResultsSentinel\n });\n\n // Second useCombobox for multi-select: provides ARIA props, keyboard navigation, and auto-scroll.\n // Enter/Space are intercepted in multiSelectOnKeyDown to avoid the hook's highlight reset after select.\n const {\n inputProps: multiSelectComboboxInputProps,\n listboxProps: multiSelectListboxProps,\n containerProps: multiSelectContainerProps,\n highlightedIndex: highlightedMultiSelectIndex,\n setHighlightedIndex: setHighlightedMultiSelectIndex,\n isKeyboardFocused: isMultiSelectKeyboardFocused\n } = useCombobox({\n items: multiSelectItems,\n isOpen: isDropDownOpen && isMultiSelect,\n onOpenChange: setIsDropDownOpen,\n onSelect: () => {},\n listboxId,\n disabled: !isMultiSelect,\n loop: false,\n hasItems: multiSelectItems.length > 0,\n closeOnTab: false,\n isItemDisabled: isNoResultsSentinel\n });\n\n // Announce empty state for screen readers — only when arrow keys haven't reached it yet.\n // Once highlighted (aria-activedescendant), the screen reader reads it directly.\n const activeHighlight = isMultiSelect ? highlightedMultiSelectIndex : highlightedIndex;\n useEffect(() => {\n if (isDropDownOpen && filteredOptions.length === 0 && (searchQuery.trim() || dropDownOptions?.length === 0) && activeHighlight === -1) {\n announce(searchResultEmptyMessage, { assertiveness: 'polite', batchId: 'dropdown-empty-state', delay: 300 });\n }\n }, [filteredOptions.length, isDropDownOpen, searchQuery, dropDownOptions?.length, activeHighlight]);\n\n const getSelectedDropDownValue = (option: DropdownValue, isSrcOption: boolean = false) => {\n if (isMultiSelect) {\n return defaultText;\n }\n\n // if custom selected value is provided, use it instead of the option value\n if (isSrcOption && customSelectedValue) {\n return customSelectedValue;\n }\n\n return option?.[selectBy] || defaultText;\n };\n\n const clearSelectedDropDownValues = () => {\n setSelectedDropDownValues([]);\n props?.onClear?.();\n };\n\n const optionChip = (option: DropdownValue, srcOption: boolean = false) => {\n if (props?.renderOptionChip) {\n return props?.renderOptionChip(option, srcOption);\n }\n\n if (isMultiSelect && selectedDropDownValues?.length > 0) {\n const firstSelectedLabel = selectedDropDownValues[0]?.[selectBy] || '';\n const remainingCount = selectedDropDownValues.length - 1;\n\n // For multiple selections: text takes remaining space, count takes minimum space needed\n return (\n <div className={`option-chip flex items-center w-full`}>\n <div\n className={`${remainingCount > 0 ? 'w-full' : 'flex-1'} truncate`}\n >{`${defaultText}: ${firstSelectedLabel}`}</div>\n {remainingCount > 0 && <div className=\"flex-shrink-0\">+{remainingCount}</div>}\n </div>\n );\n }\n\n const selectedLabel = getSelectedDropDownValue(option, srcOption);\n const hasVisibleLabel = !!props?.label || !!props?.ariaLabelledBy;\n const showPrefix = srcOption && defaultText && option?.[selectBy] && !customSelectedValue && !hasVisibleLabel;\n\n return (\n <p className={`option-chip flex flex-1 items-center justify-between`}>\n {showPrefix ? `${defaultText}: ${selectedLabel}` : selectedLabel}\n </p>\n );\n };\n\n const renderSearchInput = (extraInputProps: Record<string, any>) => (\n <div className=\" w-full relative flex items-center border-b border-[var(--color-gray-300)]\">\n <InputWithIcon\n leftIcon={showSearchIcon ? { name: 'search', position: 'left', style: { color: 'var(--color-gray-500)' } } : undefined}\n value={searchQuery}\n onChange={(value) => setSearchQuery(value)}\n placeholder={searchPlaceholder}\n style={{ margin: 0, gap: 0 }}\n inputStyle={{ width: '100%', border: 'none', outline: 'none' }}\n automationId=\"se-design-dropdown-search\"\n ariaLabel={searchPlaceholder}\n inputRef={searchInputRef}\n inputProps={extraInputProps}\n />\n </div>\n );\n\n const renderSearchBar = () => {\n if (isMultiSelect) {\n return renderSearchInput({\n ...multiSelectComboboxInputProps,\n onKeyDown: (e: React.KeyboardEvent) => multiSelectOnKeyDown(e, true)\n });\n }\n\n // Single-select: wrap onKeyDown to add Escape → focusTrigger (portal-safe)\n return renderSearchInput({\n ...comboboxInputProps,\n onKeyDown: (e: React.KeyboardEvent) => {\n comboboxInputProps.onKeyDown(e);\n if (e.key === 'Escape') {\n requestAnimationFrame(() => popoverRef.current?.focusTrigger());\n }\n }\n });\n };\n\n const dropDownOptionJsx = (dropDownOption: DropdownValue, index: number) => {\n const optionTxt = dropDownOption[selectBy];\n const dropDownSelectedValue = selectedDropDownValues[0]?.[selectBy] || defaultText;\n const selectByUniqueId = optionsUniqueBy?.length\n ? dropDownOption[optionsUniqueBy] == selectedDropDownValues[0]?.[optionsUniqueBy]\n : true;\n const isOptionSelected = displaySelected && optionTxt === dropDownSelectedValue && selectByUniqueId;\n const isHighlighted = highlightedIndex === index;\n const optionProps = !isMultiSelect ? getOptionProps(index, isOptionSelected) : {};\n\n return (\n <div\n key={dropDownOption.id || dropDownOption.value}\n className={`option break-words px-3 py-2 hover:bg-[var(--color-gray-100)] cursor-pointer select-none flex items-center justify-between ${\n isOptionSelected ? 'selected' : ''\n } ${isHighlighted ? `bg-[var(--color-gray-100)]${isSingleSelectKeyboardFocused ? ' outline outline-[length:var(--focus-width)] -outline-offset-2 outline-[var(--focus-color)]' : ''}` : ''}`}\n onClick={() => handleDropDownOptionClick(dropDownOption)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleDropDownOptionClick(dropDownOption);\n } else if (e.key === 'Escape') {\n requestAnimationFrame(() => popoverRef.current?.focusTrigger());\n }\n }}\n tabIndex={-1}\n data-automation-id={`dropdown-option-${dropDownOption?.automationId || index}`}\n {...optionProps}\n aria-selected={isOptionSelected ? 'true' : 'false'}\n >\n {optionChip({ ...dropDownOption, isOptionSelected }, false)}\n {isOptionSelected && <Icon name=\"checkmark\" stroke={iconColor} />}\n </div>\n );\n };\n\n const emptyStateOption = (currentHighlightedIndex: number, keyboardFocused: boolean, isMulti: boolean) => (\n <div\n {...(!isMulti ? getOptionProps(0, false) : { id: `${listboxId}-option-0`, role: 'option', 'aria-disabled': true })}\n className={`px-3 py-4 text-center text-[var(--color-gray-700)] text-sm${currentHighlightedIndex === 0 ? ` bg-[var(--color-gray-100)]${keyboardFocused ? ' outline outline-[length:var(--focus-width)] -outline-offset-2 outline-[var(--focus-color)]' : ''}` : ''}`}\n >\n {searchResultEmptyMessage}\n </div>\n );\n\n const renderDropdownContents = () => {\n return (\n <>\n {props?.label && firstOptionAsHeading && (\n <div\n aria-hidden=\"true\"\n className=\"px-3 pt-2 pb-1 text-[var(--color-gray-650)] text-xs cursor-default select-none\"\n >\n {props.label}\n </div>\n )}\n {shouldShowSearch && renderSearchBar()}\n <div\n className={`dropdown-content dropdown-options${shouldShowSearch ? '' : ' flex flex-col max-h-80 overflow-y-auto'}`}\n {...(shouldShowSearch ? {} : {\n ...listboxProps,\n 'aria-label': `${defaultText} options`,\n style: { outline: 'none' },\n tabIndex: -1,\n 'aria-activedescendant': comboboxInputProps['aria-activedescendant'],\n onKeyDown: (e: React.KeyboardEvent) => {\n comboboxContainerProps.onKeyDownCapture?.(e as React.KeyboardEvent<HTMLElement>);\n if (e.key === ' ') {\n e.preventDefault();\n if (highlightedIndex >= 0 && filteredOptions[highlightedIndex]) {\n handleDropDownOptionClick(filteredOptions[highlightedIndex]);\n }\n return;\n }\n comboboxInputProps.onKeyDown(e);\n },\n onFocus: () => {\n if (highlightedIndex === -1 && singleSelectItems.length > 0) {\n setHighlightedIndex(0);\n }\n }\n })}\n >\n {shouldShowSearch ? (\n <div\n className=\"flex flex-col max-h-80 overflow-y-auto\"\n aria-label={`${defaultText} options`}\n {...listboxProps}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => dropDownOptionJsx(dropDownOption, index))\n ) : (\n emptyStateOption(highlightedIndex, isSingleSelectKeyboardFocused, false)\n )}\n </div>\n ) : (\n filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => dropDownOptionJsx(dropDownOption, index))\n ) : (\n emptyStateOption(highlightedIndex, isSingleSelectKeyboardFocused, false)\n )\n )}\n </div>\n </>\n );\n };\n\n const handleMultiSelectDropdownOptionClick = (isSelected: boolean, dropDownOption: DropdownValue) => {\n let newSelectedDropDownValues: DropdownValue[] = [];\n if (isSelected) {\n newSelectedDropDownValues = [...selectedDropDownValues, dropDownOption];\n } else {\n newSelectedDropDownValues = selectedDropDownValues?.filter(\n (option) => option[optionsUniqueBy] !== dropDownOption[optionsUniqueBy]\n );\n }\n setSelectedDropDownValues(newSelectedDropDownValues);\n };\n\n const handleApplySelectedDropDownValues = () => {\n popoverRef.current?.togglePopover();\n popoverRef.current?.focusTrigger();\n props?.onApply?.(selectedDropDownValues);\n };\n\n // Wraps the multi-select useCombobox's onKeyDown.\n // - Intercepts Enter/Space to toggle selection without resetting the highlight\n // (the hook resets highlightedIndex to -1 after onSelect, which is wrong for multi-select).\n // - When isSearchInput is true, Space is left for typing.\n // - Adds focusTrigger on Escape (Popover's handler is unreliable for portals).\n const multiSelectOnKeyDown = (e: React.KeyboardEvent, isSearchInput: boolean = false) => {\n if (isSearchInput && e.key === ' ') return;\n\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (highlightedMultiSelectIndex >= 0 && highlightedMultiSelectIndex < filteredOptions.length) {\n const option = filteredOptions[highlightedMultiSelectIndex];\n const isSelected = selectedDropDownValues.some(\n (v) => v[optionsUniqueBy] === option[optionsUniqueBy]\n );\n handleMultiSelectDropdownOptionClick(!isSelected, option);\n }\n return;\n }\n\n multiSelectComboboxInputProps.onKeyDown(e);\n\n if (e.key === 'Escape') {\n e.stopPropagation();\n requestAnimationFrame(() => popoverRef.current?.focusTrigger());\n }\n };\n\n const multiSelectDropdownOptionJSX = (dropDownOption: DropdownValue, index: number) => {\n const isOptionSelected = selectedDropDownValues.some(\n (option) => option[optionsUniqueBy] === dropDownOption[optionsUniqueBy]\n );\n const optionId = `${listboxId}-option-${index}`;\n const isHighlighted = highlightedMultiSelectIndex === index;\n\n return (\n <div\n key={dropDownOption.id || dropDownOption.value}\n id={optionId}\n role=\"option\"\n aria-selected={isOptionSelected}\n className={`option px-3 py-2 hover:bg-[var(--color-gray-100)] cursor-pointer select-none flex items-center gap-2 ${\n isHighlighted ? `bg-[var(--color-gray-100)]${isMultiSelectKeyboardFocused ? ' outline outline-[length:var(--focus-width)] -outline-offset-2 outline-[var(--focus-color)]' : ''}` : ''\n }`}\n tabIndex={-1}\n onClick={() => handleMultiSelectDropdownOptionClick(!isOptionSelected, dropDownOption)}\n data-automation-id={`dropdown-option-${dropDownOption?.automationId || index}`}\n >\n <Checkbox\n tabIndex={-1}\n ariaHidden\n checked={isOptionSelected}\n onChange={() => {}}\n className=\"pointer-events-none\"\n />\n <span className=\"checkbox-label\">{dropDownOption?.label}</span>\n </div>\n );\n };\n\n const renderMultiSelectDropdownContents = () => {\n return (\n <div\n onKeyDown={(e) => {\n // Stop all Tab events from reaching Popover's handlePopoverContentKeyDown (which closes on Tab).\n // Tab flow is managed by the footer onKeyDown: forward Tab from Apply closes and advances\n // focus past trigger; Shift+Tab returns to search/listbox.\n if (e.key === 'Tab') {\n e.stopPropagation();\n }\n }}\n >\n {shouldShowSearch && renderSearchBar()}\n <div\n className={`dropdown-content dropdown-options${shouldShowSearch ? '' : ' flex flex-col max-h-80 overflow-y-auto'}`}\n {...(shouldShowSearch ? {} : {\n ...multiSelectListboxProps,\n 'aria-label': `${defaultText} options`,\n 'aria-multiselectable': 'true',\n style: { outline: 'none' },\n tabIndex: -1,\n 'aria-activedescendant': multiSelectComboboxInputProps['aria-activedescendant'],\n onKeyDown: (e: React.KeyboardEvent) => multiSelectOnKeyDown(e, false),\n onFocus: () => {\n if (highlightedMultiSelectIndex === -1 && multiSelectItems.length > 0) {\n setHighlightedMultiSelectIndex(0);\n }\n }\n })}\n >\n {shouldShowSearch ? (\n <div\n className=\"flex flex-col max-h-80 overflow-y-auto\"\n {...multiSelectListboxProps}\n aria-label={`${defaultText} options`}\n aria-multiselectable=\"true\"\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => multiSelectDropdownOptionJSX(dropDownOption, index))\n ) : (\n emptyStateOption(highlightedMultiSelectIndex, isMultiSelectKeyboardFocused, true)\n )}\n </div>\n ) : (\n filteredOptions.length > 0 ? (\n filteredOptions.map((dropDownOption, index) => multiSelectDropdownOptionJSX(dropDownOption, index))\n ) : (\n emptyStateOption(highlightedMultiSelectIndex, isMultiSelectKeyboardFocused, true)\n )\n )}\n </div>\n <div\n className=\"flex items-center justify-end gap-4 p-3 border-t border-[var(--color-gray-200)]\"\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Home' || e.key === 'End') {\n // Stop arrow keys from reaching Popover's handleArrowKeyNavigation\n // which would move focus out of the CTA buttons back into options\n e.stopPropagation();\n return;\n }\n if (e.key === 'Tab' && !e.shiftKey) {\n // Forward Tab from Apply — close dropdown and advance focus past trigger.\n // The wrapper stopPropagation blocks Popover's Tab handler, so we replicate\n // its portal-safe focus advance here (Popover lines 559-569).\n const applyEl = e.currentTarget.querySelector('[data-automation-id=\"se-design-dropdown-apply-button\"]');\n if (document.activeElement === applyEl) {\n e.stopPropagation();\n popoverRef.current?.togglePopover();\n if (isWithPortal) {\n // Portal: manually advance focus past trigger (portal Tab order is wrong)\n e.preventDefault();\n const srcEl = popoverRef.current?.element;\n const focusables = getFocusableElements({ container: document.body, filterHidden: true });\n const idx = srcEl ? focusables.indexOf(srcEl) : -1;\n const next = focusables[idx + 1];\n if (next) (next as HTMLElement).focus();\n else (srcEl as HTMLElement)?.focus();\n }\n // Non-portal: togglePopover closes, browser Tab naturally advances focus\n }\n } else if (e.key === 'Tab' && e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n if (shouldShowSearch) {\n searchInputRef.current?.focus();\n } else {\n multiSelectListboxProps.ref.current?.focus();\n }\n }\n }}\n >\n <Button label=\"Clear\" type=\"link\" size=\"sm\" onClick={clearSelectedDropDownValues} automationId=\"se-design-dropdown-clear-button\" />\n <Button label=\"Apply\" type=\"primary\" size=\"sm\" onClick={handleApplySelectedDropDownValues} automationId=\"se-design-dropdown-apply-button\" />\n </div>\n </div>\n );\n };\n\n const renderDropdownSelect = () => {\n const borderColor = isDropDownOpen\n ? 'border-[var(--color-blue-500)]'\n : disabled\n ? 'border-[var(--color-gray-300)]'\n : 'border-[var(--color-gray-600)]';\n const errorBorderColor = hasError ? 'border-[var(--color-red-500)]' : '';\n const dropDownSelectClass = `dropdown-src-element bg-[var(--color-white)] flex px-3 py-2 ${\n isBorderless ? 'border-0' : `border rounded-md ${errorBorderColor ? errorBorderColor : borderColor}`\n } flex items-center ${dropdownClassName}`;\n\n return (\n <div className={dropDownSelectClass}>\n <div\n id={valueId}\n className=\"flex-1 min-w-0\"\n data-automation-id={props?.dropDownSelectAutomationId || 'selected-dropdown-value'}\n >\n {optionChip(selectedDropDownValues[0], true)}\n </div>\n <div className=\"flex-shrink-0 ml-2\" aria-hidden=\"true\">\n <Icon\n name={'chevron'}\n rotation={isDropDownOpen ? '180' : '0'}\n className={`transition-transform`}\n stroke={iconColor}\n />\n </div>\n </div>\n );\n };\n\n const getDropdownAriaLabel = () => {\n const selectedLabel = selectedDropDownValues[0]?.[selectBy];\n if (ariaLabel && selectedLabel) {\n return `${ariaLabel}, ${selectedLabel}`;\n }\n return ariaLabel || defaultText || 'Select option';\n };\n\n // Trigger is always a button that reveals a listbox popup (Select/Listbox pattern).\n // For search-enabled dropdowns, the combobox role lives on the search input inside the popup.\n // This matches React Aria (useSelect), Radix (Select), and Headless UI (Listbox) — all use\n // role=\"button\" with real focus on options, separate from their Combobox components.\n const triggerSourceRole = 'button';\n\n // Trigger is always role=\"button\" — combobox ARIA (aria-activedescendant etc.)\n // lives on the search input inside the popup, not on the trigger.\n // Trigger only needs aria-haspopup + aria-expanded (Popover handles) + aria-controls.\n\n return (\n <div\n className={`se-design-dropdown-container${props?.className ? ` ${props?.className}` : ''}`}\n style={props?.style}\n >\n {props?.label ? (\n <div id={labelId} className={`se-design-dropdown-label ${firstOptionAsHeading ? 'sr-only' : 'mb-[3px] text-[var(--color-gray-700)] text-sm'}`}>\n {props?.label}\n </div>\n ) : !props?.ariaLabelledBy && ariaLabel ? (\n <span id={labelId} className=\"sr-only\">{ariaLabel}</span>\n ) : null}\n <div\n style={props?.style}\n className={`${disabled ? 'bg-[var(--color-gray-50)] rounded-md cursor-not-allowed' : ''}`}\n {...(!isMultiSelect ? {\n ...comboboxContainerProps,\n onKeyDownCapture: (e: React.KeyboardEvent<HTMLElement>) => {\n // Handle Escape/Tab BEFORE dismiss — React unmounts the popup after\n // dismiss's setState, so bubble-phase handlers never fire.\n if ((e.key === 'Escape' || e.key === 'Tab') && isDropDownOpen) {\n e.stopPropagation(); // prevent Popover wrapper + parent sidebar from seeing Escape\n popoverRef.current?.focusTrigger();\n }\n comboboxContainerProps.onKeyDownCapture?.(e);\n },\n // Portal content lives in document.body — focus moving into it looks like \"focus out\" to\n // the container's blur handler, causing immediate close. Suppress it; the Popover's own\n // onBlur handler checks both source and portal content and handles dismissal correctly.\n ...(isWithPortal ? { onBlurCapture: undefined } : {})\n } : {\n // Multi-select: only spread focus-tracking handlers for isKeyboardFocused.\n // Dismiss is handled by Popover — don't spread onBlurCapture.\n onPointerMove: multiSelectContainerProps.onPointerMove,\n onPointerDown: multiSelectContainerProps.onPointerDown,\n onPointerUp: multiSelectContainerProps.onPointerUp,\n onFocusCapture: multiSelectContainerProps.onFocusCapture,\n onKeyDownCapture: (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Escape' && isDropDownOpen) {\n e.stopPropagation();\n popoverRef.current?.focusTrigger();\n }\n // When arrow keys are pressed while focus is still on the wrapper (before\n // focus-on-open completes), redirect focus into the content so the arrow\n // key handler on the listbox/search can process it.\n if ((e.key === 'ArrowDown' || e.key === 'ArrowUp') && isDropDownOpen) {\n const target = shouldShowSearch\n ? searchInputRef.current\n : multiSelectListboxProps.ref.current;\n if (target && document.activeElement !== target && !target.contains(document.activeElement as Node)) {\n target.focus();\n }\n }\n multiSelectContainerProps.onKeyDownCapture?.(e);\n }\n })}\n >\n <Popover\n ref={popoverRef}\n isPopoverOpen={isDropDownOpen}\n isWithPortal={isWithPortal}\n renderPopoverContents={\n customDropdownContent\n ? customDropdownContent\n : isMultiSelect\n ? renderMultiSelectDropdownContents\n : renderDropdownContents\n }\n contentWidth={'full'}\n popoverContentStyleProperty={props.popoverContentStyleProperty}\n renderPopoverSrcElement={\n props.renderSrcElement\n ? () => props.renderSrcElement!({ isOpen: isDropDownOpen, selectedValue: selectedDropDownValues })\n : renderDropdownSelect\n }\n onPopoverToggle={(value) => {\n setIsDropDownOpen(value);\n if (value && !isMultiSelect && selectedDropDownValues.length > 0) {\n // Highlight the currently selected option when the dropdown opens (APG Select pattern)\n const selectedIndex = filteredOptions.findIndex(\n (option) => optionsUniqueBy\n ? option[optionsUniqueBy] === selectedDropDownValues[0]?.[optionsUniqueBy]\n : option[selectBy] === selectedDropDownValues[0]?.[selectBy]\n );\n if (selectedIndex >= 0) {\n setHighlightedIndex(selectedIndex);\n }\n }\n if (value && !shouldShowSearch) {\n // Focus listbox after portal mounts and browser paints.\n // Double rAF ensures the portal DOM is ready. Also acts as fallback\n // if the arrow-key redirect in onKeyDownCapture fires first.\n const ref = isMultiSelect ? multiSelectListboxProps.ref : listboxProps.ref;\n requestAnimationFrame(() => requestAnimationFrame(() => ref.current?.focus()));\n }\n // When search is enabled, the useEffect at line 145 focuses the search input via rAF.\n }}\n disabled={disabled}\n automationId={props?.dropDownSrcAutomationId}\n popoverContentAutomationId={props?.dropDownContentAutomationId}\n ariaLabelledBy={\n props?.label || props?.ariaLabelledBy || ariaLabel\n ? [props?.label || (!props?.ariaLabelledBy && ariaLabel) ? labelId : props?.ariaLabelledBy, valueId].filter(Boolean).join(' ')\n : undefined\n }\n ariaLabel={!props?.label && !ariaLabel && !props?.ariaLabelledBy ? getDropdownAriaLabel() : undefined}\n sourceRole={triggerSourceRole}\n {...{ 'aria-haspopup': 'listbox' }}\n {...(isDropDownOpen ? { 'aria-controls': listboxId } : {})}\n />\n </div>\n {hasError && <div className=\"text-[var(--color-red-500)] text-sm\">{errorMessage}</div>}\n </div>\n );\n};\n"],"names":["Dropdown","props","isControlledSelection","selectedValue","undefined","isControlledOpen","isOpen","internalIsOpen","setInternalIsOpen","useState","searchQuery","setSearchQuery","internalSelectedValues","setInternalSelectedValues","defaultSelectedValue","Array","isArray","popoverRef","useRef","searchInputRef","labelId","useStableId","valueId","listboxId","isDropDownOpen","selectedDropDownValues","setIsDropDownOpen","value","onOpenChange","setSelectedDropDownValues","values","selectBy","optionsUniqueBy","displaySelected","dropDownOptions","defaultText","iconColor","disabled","dropdownClassName","hasError","errorMessage","customDropdownContent","isBorderless","shouldShowSearch","showSearchIcon","searchPlaceholder","searchResultEmptyMessage","ariaLabel","customSelectedValue","isWithPortal","firstOptionAsHeading","useEffect","newValues","current","requestAnimationFrame","focus","useLayoutEffect","popoverElementRef","element","isMultiSelect","type","NO_RESULTS_SENTINEL","__noResults","id","isNoResultsSentinel","item","getFilteredOptions","trim","filter","option","toString","toLowerCase","includes","handleDropDownOptionClick","dropDownOption","onOptionClick","focusTrigger","filteredOptions","showEmptyState","length","singleSelectItems","multiSelectItems","listboxProps","getOptionProps","highlightedIndex","setHighlightedIndex","containerProps","comboboxContainerProps","inputProps","comboboxInputProps","isKeyboardFocused","isSingleSelectKeyboardFocused","useCombobox","items","onSelect","hasItems","isItemDisabled","multiSelectComboboxInputProps","multiSelectListboxProps","multiSelectContainerProps","highlightedMultiSelectIndex","setHighlightedMultiSelectIndex","isMultiSelectKeyboardFocused","loop","closeOnTab","activeHighlight","announce","assertiveness","batchId","delay","getSelectedDropDownValue","isSrcOption","clearSelectedDropDownValues","onClear","optionChip","srcOption","renderOptionChip","firstSelectedLabel","remainingCount","React","createElement","className","selectedLabel","hasVisibleLabel","label","ariaLabelledBy","showPrefix","renderSearchInput","extraInputProps","InputWithIcon","leftIcon","name","position","style","color","onChange","placeholder","margin","gap","inputStyle","width","border","outline","automationId","inputRef","renderSearchBar","onKeyDown","e","multiSelectOnKeyDown","key","dropDownOptionJsx","index","optionTxt","dropDownSelectedValue","selectByUniqueId","isOptionSelected","isHighlighted","optionProps","_extends","onClick","preventDefault","tabIndex","Icon","stroke","emptyStateOption","currentHighlightedIndex","keyboardFocused","isMulti","role","renderDropdownContents","Fragment","onKeyDownCapture","onFocus","map","handleMultiSelectDropdownOptionClick","isSelected","newSelectedDropDownValues","handleApplySelectedDropDownValues","togglePopover","onApply","isSearchInput","some","v","stopPropagation","multiSelectDropdownOptionJSX","optionId","Checkbox","ariaHidden","checked","renderMultiSelectDropdownContents","shiftKey","applyEl","currentTarget","querySelector","document","activeElement","srcEl","focusables","getFocusableElements","container","body","filterHidden","idx","indexOf","next","ref","Button","size","renderDropdownSelect","borderColor","errorBorderColor","dropDownSelectClass","dropDownSelectAutomationId","rotation","getDropdownAriaLabel","onPointerMove","onPointerDown","onPointerUp","onFocusCapture","target","contains","onBlurCapture","Popover","isPopoverOpen","renderPopoverContents","contentWidth","popoverContentStyleProperty","renderPopoverSrcElement","renderSrcElement","onPopoverToggle","selectedIndex","findIndex","dropDownSrcAutomationId","popoverContentAutomationId","dropDownContentAutomationId","Boolean","join","sourceRole"],"mappings":";;;;;;;;;;;;;;;;;;;;AAkEO,MAAMA,KAA+BC,CAAAA,MAAU;AACpD,QAAMC,IAAwBD,EAAME,kBAAkBC,QAChDC,IAAmBJ,EAAMK,WAAWF,QAEpC,CAACG,GAAgBC,EAAiB,IAAIC,EAAS,EAAK,GACpD,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAE,GAC3C,CAACG,IAAwBC,CAAyB,IAAIJ,EAA0B,MACpFR,GAAOa,uBACHC,MAAMC,QAAQf,GAAOa,oBAAoB,IACvCb,GAAOa,uBACP,CAACb,EAAMa,oBAAoB,IAC7B,EACN,GACMG,IAAaC,GAAuC,IAAI,GACxDC,IAAiBD,GAAyB,IAAI,GAC9CE,IAAUC,EAAYjB,QAAW,gBAAgB,GACjDkB,IAAUD,EAAYjB,QAAW,gBAAgB,GACjDmB,IAAYF,EAAYjB,QAAW,kBAAkB,GAGrDoB,IAAiBnB,IAAmBJ,EAAMK,SAAUC,GACpDkB,IAAyBvB,IAC1Ba,MAAMC,QAAQf,EAAME,aAAa,IAAIF,EAAME,gBAAgBF,EAAME,gBAAgB,CAACF,EAAME,aAAa,IAAI,CAAA,IAC1GS,IAEEc,IAAoBA,CAACC,MAAmB;AAC5C,IAAKtB,KACHG,GAAkBmB,CAAK,GAEzB1B,EAAM2B,eAAeD,CAAK;AAAA,EAC5B,GAEME,IAA4BA,CAACC,MAA4B;AAC7D,IAAK5B,KACHW,EAA0BiB,CAAM;AAAA,EAEpC,GAEM;AAAA,IACJC,UAAAA,IAAW;AAAA,IACXC,iBAAAA,IAAkB;AAAA,IAClBC,iBAAAA,KAAkB;AAAA,IAClBC,iBAAAA;AAAAA,IACAC,aAAAA,IAAc;AAAA,IACdC,WAAAA,KAAY;AAAA,IACZC,UAAAA,IAAW;AAAA,IACXC,mBAAAA,KAAoB;AAAA,IACpBC,UAAAA,KAAW;AAAA,IACXC,cAAAA,KAAe;AAAA,IACfC,uBAAAA,KAAwB;AAAA,IACxBC,cAAAA,KAAe;AAAA,IACfC,kBAAAA,IAAmB;AAAA,IACnBC,gBAAAA,KAAiB;AAAA,IACjBC,mBAAAA,KAAoB;AAAA,IACpBC,0BAAAA,KAA2B;AAAA,IAC3BC,WAAAA,IAAY;AAAA,IACZC,qBAAAA,IAAsB;AAAA,IACtBC,cAAAA,IAAe;AAAA,IACfC,sBAAAA,KAAuB;AAAA,EAAA,IACrBjD;AAEJkD,EAAAA,EAAU,MAAM;AACd,QAAI,CAACjD,GAAuB;AAC1B,YAAMkD,IAAYnD,GAAOa,uBACrBC,MAAMC,QAAQf,GAAOa,oBAAoB,IACvCb,GAAOa,uBACP,CAACb,EAAMa,oBAAoB,IAC7B,CAAA;AACJD,MAAAA,EAA0BuC,CAAS;AAAA,IACrC;AAAA,EACF,GAAG,CAACnD,GAAOa,sBAAsBZ,CAAqB,CAAC,GAEvDiD,EAAU,MAAM;AACd,IAAK3B,KACHb,EAAe,EAAE;AAAA,EAErB,GAAG,CAACa,CAAc,CAAC,GAGnB2B,EAAU,MAAM;AACd,IAAI3B,KAAkBmB,KAAoBxB,EAAekC,WACvDC,sBAAsB,MAAMnC,EAAekC,SAASE,MAAAA,CAAO;AAAA,EAE/D,GAAG,CAAC/B,GAAgBmB,CAAgB,CAAC,GAIrCa,GAAgB,MAAM;AACpB,IAAIvD,EAAMwD,sBACRxD,EAAMwD,kBAAkBJ,UAAUpC,EAAWoC,SAASK,WAAW;AAAA,EAErE,CAAC;AAED,QAAMC,IAAgB1D,GAAO2D,SAAS,gBAGhCC,KAAqC;AAAA,IAAEC,aAAa;AAAA,IAAMC,IAAI;AAAA,IAAkBpC,OAAO;AAAA,EAAA,GACvFqC,KAAsBA,CAACC,MAAwB,CAAC,CAACA,GAAMH,aAEvDI,KAAqBA,MACpBxD,EAAYyD,UAGTjC,KAAmB,CAAA,GAAIkC,OAAQC,CAAAA,OACjBA,IAAStC,CAAQ,GAAGuC,SAAAA,EAAWC,iBAAiB,IACjDC,SAAS9D,EAAY6D,YAAAA,CAAa,CACtD,IALQrC,KAAmB,CAAA,GAQxBuC,IAA4BA,CAACC,MAAwB;AACzD7C,IAAAA,EAA0B,CAAC6C,CAAc,CAAC,GAC1ChD,EAAkB,EAAK,GACvBzB,GAAO0E,gBAAgBD,CAAc,GAIrCpB,sBAAsB,MAAM;AAC1BA,4BAAsB,MAAM;AAC1BrC,QAAAA,EAAWoC,SAASuB,aAAAA;AAAAA,MACtB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAGMC,IAAkBX,GAAAA,GAClBY,KAAiBD,EAAgBE,WAAW,MAAMrE,EAAYyD,UAAUjC,GAAiB6C,WAAW,IAEpGC,IAAqBrB,IAEvB,CAAA,IADCkB,EAAgBE,SAAS,IAAIF,IAAmBC,KAAiB,CAACjB,EAAmB,IAAI,CAAA,GAExFoB,IAAmBtB,IACpBkB,EAAgBE,SAAS,IAAIF,IAAmBC,KAAiB,CAACjB,EAAmB,IAAI,CAAA,IAC1F,CAAA,GAEE;AAAA,IACJqB,cAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAC,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAC,gBAAgBC;AAAAA,IAChBC,YAAYC;AAAAA,IACZC,mBAAmBC;AAAAA,EAAAA,IACjBC,GAAY;AAAA,IACdC,OAAOb;AAAAA,IACP1E,QAAQkB,KAAkB,CAACmC;AAAAA,IAC3B/B,cAAcF;AAAAA,IACdoE,UAAUA,CAAC7B,MAAwB;AACjCQ,MAAAA,EAA0BR,CAAI;AAAA,IAChC;AAAA,IACA1C,WAAAA;AAAAA,IACAc,UAAUsB,KAAiBtB;AAAAA,IAC3B0D,UAAUf,EAAkBD,SAAS;AAAA,IACrCiB,gBAAgBhC;AAAAA,EAAAA,CACjB,GAIK;AAAA,IACJwB,YAAYS;AAAAA,IACZf,cAAcgB;AAAAA,IACdZ,gBAAgBa;AAAAA,IAChBf,kBAAkBgB;AAAAA,IAClBf,qBAAqBgB;AAAAA,IACrBX,mBAAmBY;AAAAA,EAAAA,IACjBV,GAAY;AAAA,IACdC,OAAOZ;AAAAA,IACP3E,QAAQkB,KAAkBmC;AAAAA,IAC1B/B,cAAcF;AAAAA,IACdoE,UAAUA,MAAM;AAAA,IAAC;AAAA,IACjBvE,WAAAA;AAAAA,IACAc,UAAU,CAACsB;AAAAA,IACX4C,MAAM;AAAA,IACNR,UAAUd,EAAiBF,SAAS;AAAA,IACpCyB,YAAY;AAAA,IACZR,gBAAgBhC;AAAAA,EAAAA,CACjB,GAIKyC,KAAkB9C,IAAgByC,IAA8BhB;AACtEjC,EAAAA,EAAU,MAAM;AACd,IAAI3B,KAAkBqD,EAAgBE,WAAW,MAAMrE,EAAYyD,UAAUjC,GAAiB6C,WAAW,MAAM0B,OAAoB,MACjIC,GAAS5D,IAA0B;AAAA,MAAE6D,eAAe;AAAA,MAAUC,SAAS;AAAA,MAAwBC,OAAO;AAAA,IAAA,CAAK;AAAA,EAE/G,GAAG,CAAChC,EAAgBE,QAAQvD,GAAgBd,GAAawB,GAAiB6C,QAAQ0B,EAAe,CAAC;AAElG,QAAMK,KAA2BA,CAACzC,GAAuB0C,IAAuB,OAC1EpD,IACKxB,IAIL4E,KAAe/D,IACVA,IAGFqB,IAAStC,CAAQ,KAAKI,GAGzB6E,KAA8BA,MAAM;AACxCnF,IAAAA,EAA0B,CAAA,CAAE,GAC5B5B,GAAOgH,UAAAA;AAAAA,EACT,GAEMC,KAAaA,CAAC7C,GAAuB8C,IAAqB,OAAU;AACxE,QAAIlH,GAAOmH;AACT,aAAOnH,GAAOmH,iBAAiB/C,GAAQ8C,CAAS;AAGlD,QAAIxD,KAAiBlC,GAAwBsD,SAAS,GAAG;AACvD,YAAMsC,IAAqB5F,EAAuB,CAAC,IAAIM,CAAQ,KAAK,IAC9DuF,IAAiB7F,EAAuBsD,SAAS;AAGvD,aACEwC,gBAAAA,EAAAC,cAAA,OAAA;AAAA,QAAKC,WAAW;AAAA,MAAA,GACdF,gBAAAA,EAAAC,cAAA,OAAA;AAAA,QACEC,WAAW,GAAGH,IAAiB,IAAI,WAAW,QAAQ;AAAA,MAAA,GACtD,GAAGnF,CAAW,KAAKkF,CAAkB,EAAQ,GAC9CC,IAAiB,KAAKC,gBAAAA,EAAAC,cAAA,OAAA;AAAA,QAAKC,WAAU;AAAA,MAAA,GAAgB,KAAEH,CAAoB,CACzE;AAAA,IAET;AAEA,UAAMI,IAAgBZ,GAAyBzC,GAAQ8C,CAAS,GAC1DQ,IAAkB,CAAC,CAAC1H,GAAO2H,SAAS,CAAC,CAAC3H,GAAO4H,gBAC7CC,IAAaX,KAAahF,KAAekC,IAAStC,CAAQ,KAAK,CAACiB,KAAuB,CAAC2E;AAE9F,WACEJ,gBAAAA,EAAAC,cAAA,KAAA;AAAA,MAAGC,WAAW;AAAA,IAAA,GACXK,IAAa,GAAG3F,CAAW,KAAKuF,CAAa,KAAKA,CAClD;AAAA,EAEP,GAEMK,KAAoBA,CAACC,MACzBT,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKC,WAAU;AAAA,EAAA,GACbF,gBAAAA,EAAAC,cAACS,IAAa;AAAA,IACZC,UAAUtF,KAAiB;AAAA,MAAEuF,MAAM;AAAA,MAAUC,UAAU;AAAA,MAAQC,OAAO;AAAA,QAAEC,OAAO;AAAA,MAAA;AAAA,IAAwB,IAAMlI;AAAAA,IAC7GuB,OAAOjB;AAAAA,IACP6H,UAAW5G,CAAAA,MAAUhB,EAAegB,CAAK;AAAA,IACzC6G,aAAa3F;AAAAA,IACbwF,OAAO;AAAA,MAAEI,QAAQ;AAAA,MAAGC,KAAK;AAAA,IAAA;AAAA,IACzBC,YAAY;AAAA,MAAEC,OAAO;AAAA,MAAQC,QAAQ;AAAA,MAAQC,SAAS;AAAA,IAAA;AAAA,IACtDC,cAAa;AAAA,IACbhG,WAAWF;AAAAA,IACXmG,UAAU7H;AAAAA,IACVqE,YAAYwC;AAAAA,EAAAA,CACb,CACE,GAGDiB,KAAkBA,MAEblB,GADLpE,IACuB;AAAA,IACvB,GAAGsC;AAAAA,IACHiD,WAAWA,CAACC,MAA2BC,GAAqBD,GAAG,EAAI;AAAA,EAAA,IAK9C;AAAA,IACvB,GAAG1D;AAAAA,IACHyD,WAAWA,CAACC,MAA2B;AACrC1D,MAAAA,EAAmByD,UAAUC,CAAC,GAC1BA,EAAEE,QAAQ,YACZ/F,sBAAsB,MAAMrC,EAAWoC,SAASuB,aAAAA,CAAc;AAAA,IAElE;AAAA,EAAA,CAXC,GAeC0E,KAAoBA,CAAC5E,GAA+B6E,MAAkB;AAC1E,UAAMC,IAAY9E,EAAe3C,CAAQ,GACnC0H,IAAwBhI,EAAuB,CAAC,IAAIM,CAAQ,KAAKI,GACjEuH,IAAmB1H,GAAiB+C,SACtCL,EAAe1C,CAAe,KAAKP,EAAuB,CAAC,IAAIO,CAAe,IAC9E,IACE2H,IAAmB1H,MAAmBuH,MAAcC,KAAyBC,GAC7EE,IAAgBxE,MAAqBmE,GACrCM,KAAelG,IAA0D,CAAA,IAA1CwB,GAAeoE,GAAOI,CAAgB;AAE3E,WACEpC,gBAAAA,EAAAC,cAAA,OAAAsC,EAAA;AAAA,MACET,KAAK3E,EAAeX,MAAMW,EAAe/C;AAAAA,MACzC8F,WAAW,8HACTkC,IAAmB,aAAa,EAAE,IAChCC,IAAgB,6BAA6BjE,IAAgC,gGAAgG,EAAE,KAAK,EAAE;AAAA,MAC1LoE,SAASA,MAAMtF,EAA0BC,CAAc;AAAA,MACvDwE,WAAYC,CAAAA,MAAM;AAChB,QAAIA,EAAEE,QAAQ,WAAWF,EAAEE,QAAQ,OACjCF,EAAEa,eAAAA,GACFvF,EAA0BC,CAAc,KAC/ByE,EAAEE,QAAQ,YACnB/F,sBAAsB,MAAMrC,EAAWoC,SAASuB,aAAAA,CAAc;AAAA,MAElE;AAAA,MACAqF,UAAU;AAAA,MACV,sBAAoB,mBAAmBvF,GAAgBqE,gBAAgBQ,CAAK;AAAA,IAAA,GACxEM,IAAW;AAAA,MACf,iBAAeF,IAAmB,SAAS;AAAA,IAAA,CAAQ,GAElDzC,GAAW;AAAA,MAAE,GAAGxC;AAAAA,MAAgBiF,kBAAAA;AAAAA,IAAAA,GAAoB,EAAK,GACzDA,KAAoBpC,gBAAAA,EAAAC,cAAC0C,IAAI;AAAA,MAAC/B,MAAK;AAAA,MAAYgC,QAAQ/H;AAAAA,IAAAA,CAAY,CAC7D;AAAA,EAET,GAEMgI,IAAmBA,CAACC,GAAiCC,GAA0BC,wBACnF/C,cAAA,OAAAsC,EAAA,CAAA,GACQS,IAAqC;AAAA,IAAExG,IAAI,GAAGxC,CAAS;AAAA,IAAaiJ,MAAM;AAAA,IAAU,iBAAiB;AAAA,EAAA,IAA3FrF,GAAe,GAAG,EAAK,GAA0E;AAAA,IACjHsC,WAAW,6DAA6D4C,MAA4B,IAAI,8BAA8BC,IAAkB,gGAAgG,EAAE,KAAK,EAAE;AAAA,EAAA,CAAG,GAEnQxH,EACE,GAGD2H,KAAyBA,MAE3BlD,gBAAAA,EAAAC,cAAAD,EAAAmD,UAAA,MACGzK,GAAO2H,SAAS1E,MACfqE,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IACE,eAAY;AAAA,IACZC,WAAU;AAAA,EAAA,GAETxH,EAAM2H,KACJ,GAENjF,KAAoBsG,MACrB1B,gBAAAA,EAAAC,qBAAAsC,EAAA;AAAA,IACErC,WAAW,oCAAoC9E,IAAmB,KAAK,yCAAyC;AAAA,EAAA,GAC3GA,IAAmB,CAAA,IAAK;AAAA,IAC3B,GAAGuC;AAAAA,IACH,cAAc,GAAG/C,CAAW;AAAA,IAC5BkG,OAAO;AAAA,MAAES,SAAS;AAAA,IAAA;AAAA,IAClBmB,UAAU;AAAA,IACV,yBAAyBxE,EAAmB,uBAAuB;AAAA,IACnEyD,WAAWA,CAACC,MAA2B;AAErC,UADA5D,EAAuBoF,mBAAmBxB,CAAqC,GAC3EA,EAAEE,QAAQ,KAAK;AACjBF,UAAEa,eAAAA,GACE5E,KAAoB,KAAKP,EAAgBO,CAAgB,KAC3DX,EAA0BI,EAAgBO,CAAgB,CAAC;AAE7D;AAAA,MACF;AACAK,MAAAA,EAAmByD,UAAUC,CAAC;AAAA,IAChC;AAAA,IACAyB,SAASA,MAAM;AACb,MAAIxF,MAAqB,MAAMJ,EAAkBD,SAAS,KACxDM,GAAoB,CAAC;AAAA,IAEzB;AAAA,EAAA,CACD,GAEF1C,IACC4E,gBAAAA,EAAAC,qBAAAsC,EAAA;AAAA,IACErC,WAAU;AAAA,IACV,cAAY,GAAGtF,CAAW;AAAA,EAAA,GACtB+C,CAAY,GAEfL,EAAgBE,SAAS,IACxBF,EAAgBgG,IAAI,CAACnG,GAAgB6E,MAAUD,GAAkB5E,GAAgB6E,CAAK,CAAC,IAEvFa,EAAiBhF,GAAkBO,GAA+B,EAAK,CAEtE,IAELd,EAAgBE,SAAS,IACvBF,EAAgBgG,IAAI,CAACnG,GAAgB6E,MAAUD,GAAkB5E,GAAgB6E,CAAK,CAAC,IAEvFa,EAAiBhF,GAAkBO,GAA+B,EAAK,CAGtE,CACL,GAIAmF,KAAuCA,CAACC,GAAqBrG,MAAkC;AACnG,QAAIsG,IAA6C,CAAA;AACjD,IAAID,IACFC,IAA4B,CAAC,GAAGvJ,GAAwBiD,CAAc,IAEtEsG,IAA4BvJ,GAAwB2C,OACjDC,CAAAA,MAAWA,EAAOrC,CAAe,MAAM0C,EAAe1C,CAAe,CACxE,GAEFH,EAA0BmJ,CAAyB;AAAA,EACrD,GAEMC,KAAoCA,MAAM;AAC9ChK,IAAAA,EAAWoC,SAAS6H,cAAAA,GACpBjK,EAAWoC,SAASuB,aAAAA,GACpB3E,GAAOkL,UAAU1J,CAAsB;AAAA,EACzC,GAOM2H,KAAuBA,CAACD,GAAwBiC,IAAyB,OAAU;AACvF,QAAIA,EAAAA,KAAiBjC,EAAEE,QAAQ,MAE/B;AAAA,UAAIF,EAAEE,QAAQ,WAAWF,EAAEE,QAAQ,KAAK;AAEtC,YADAF,EAAEa,eAAAA,GACE5D,KAA+B,KAAKA,IAA8BvB,EAAgBE,QAAQ;AAC5F,gBAAMV,IAASQ,EAAgBuB,CAA2B,GACpD2E,IAAatJ,EAAuB4J,KACvCC,CAAAA,MAAMA,EAAEtJ,CAAe,MAAMqC,EAAOrC,CAAe,CACtD;AACA8I,UAAAA,GAAqC,CAACC,GAAY1G,CAAM;AAAA,QAC1D;AACA;AAAA,MACF;AAEA4B,MAAAA,EAA8BiD,UAAUC,CAAC,GAErCA,EAAEE,QAAQ,aACZF,EAAEoC,gBAAAA,GACFjI,sBAAsB,MAAMrC,EAAWoC,SAASuB,aAAAA,CAAc;AAAA;AAAA,EAElE,GAEM4G,KAA+BA,CAAC9G,GAA+B6E,MAAkB;AACrF,UAAMI,IAAmBlI,EAAuB4J,KAC7ChH,CAAAA,MAAWA,EAAOrC,CAAe,MAAM0C,EAAe1C,CAAe,CACxE,GACMyJ,IAAW,GAAGlK,CAAS,WAAWgI,CAAK,IACvCK,IAAgBxD,MAAgCmD;AAEtD,WACEhC,gBAAAA,EAAAC,cAAA,OAAA;AAAA,MACE6B,KAAK3E,EAAeX,MAAMW,EAAe/C;AAAAA,MACzCoC,IAAI0H;AAAAA,MACJjB,MAAK;AAAA,MACL,iBAAeb;AAAAA,MACflC,WAAW,wGACTmC,IAAgB,6BAA6BtD,IAA+B,gGAAgG,EAAE,KAAK,EAAE;AAAA,MAEvL2D,UAAU;AAAA,MACVF,SAASA,MAAMe,GAAqC,CAACnB,GAAkBjF,CAAc;AAAA,MACrF,sBAAoB,mBAAmBA,GAAgBqE,gBAAgBQ,CAAK;AAAA,IAAA,GAE5EhC,gBAAAA,EAAAC,cAACkE,IAAQ;AAAA,MACPzB,UAAU;AAAA,MACV0B,YAAU;AAAA,MACVC,SAASjC;AAAAA,MACTpB,UAAUA,MAAM;AAAA,MAAC;AAAA,MACjBd,WAAU;AAAA,IAAA,CACX,GACDF,gBAAAA,EAAAC,cAAA,QAAA;AAAA,MAAMC,WAAU;AAAA,IAAA,GAAkB/C,GAAgBkD,KAAY,CAC3D;AAAA,EAET,GAEMiE,KAAoCA,MAEtCtE,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IACE0B,WAAYC,CAAAA,MAAM;AAIhB,MAAIA,EAAEE,QAAQ,SACZF,EAAEoC,gBAAAA;AAAAA,IAEN;AAAA,EAAA,GAEC5I,KAAoBsG,GAAAA,GACrB1B,gBAAAA,EAAAC,cAAA,OAAAsC,EAAA;AAAA,IACErC,WAAW,oCAAoC9E,IAAmB,KAAK,yCAAyC;AAAA,EAAA,GAC3GA,IAAmB,CAAA,IAAK;AAAA,IAC3B,GAAGuD;AAAAA,IACH,cAAc,GAAG/D,CAAW;AAAA,IAC5B,wBAAwB;AAAA,IACxBkG,OAAO;AAAA,MAAES,SAAS;AAAA,IAAA;AAAA,IAClBmB,UAAU;AAAA,IACV,yBAAyBhE,EAA8B,uBAAuB;AAAA,IAC9EiD,WAAWA,CAACC,MAA2BC,GAAqBD,GAAG,EAAK;AAAA,IACpEyB,SAASA,MAAM;AACb,MAAIxE,MAAgC,MAAMnB,EAAiBF,SAAS,KAClEsB,GAA+B,CAAC;AAAA,IAEpC;AAAA,EAAA,CACD,GAEF1D,IACC4E,gBAAAA,EAAAC,qBAAAsC,EAAA;AAAA,IACErC,WAAU;AAAA,EAAA,GACNvB,GAAuB;AAAA,IAC3B,cAAY,GAAG/D,CAAW;AAAA,IAC1B,wBAAqB;AAAA,EAAA,CAAM,GAE1B0C,EAAgBE,SAAS,IACxBF,EAAgBgG,IAAI,CAACnG,GAAgB6E,MAAUiC,GAA6B9G,GAAgB6E,CAAK,CAAC,IAElGa,EAAiBhE,GAA6BE,GAA8B,EAAI,CAE/E,IAELzB,EAAgBE,SAAS,IACvBF,EAAgBgG,IAAI,CAACnG,GAAgB6E,MAAUiC,GAA6B9G,GAAgB6E,CAAK,CAAC,IAElGa,EAAiBhE,GAA6BE,GAA8B,EAAI,CAG/E,GACLiB,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IACEC,WAAU;AAAA,IACVyB,WAAYC,CAAAA,MAAM;AAChB,UAAIA,EAAEE,QAAQ,eAAeF,EAAEE,QAAQ,aAAaF,EAAEE,QAAQ,UAAUF,EAAEE,QAAQ,OAAO;AAGvFF,UAAEoC,gBAAAA;AACF;AAAA,MACF;AACA,UAAIpC,EAAEE,QAAQ,SAAS,CAACF,EAAE2C,UAAU;AAIlC,cAAMC,IAAU5C,EAAE6C,cAAcC,cAAc,wDAAwD;AACtG,YAAIC,SAASC,kBAAkBJ,MAC7B5C,EAAEoC,gBAAAA,GACFtK,EAAWoC,SAAS6H,cAAAA,GAChBjI,IAAc;AAEhBkG,YAAEa,eAAAA;AACF,gBAAMoC,IAAQnL,EAAWoC,SAASK,SAC5B2I,IAAaC,GAAqB;AAAA,YAAEC,WAAWL,SAASM;AAAAA,YAAMC,cAAc;AAAA,UAAA,CAAM,GAClFC,IAAMN,IAAQC,EAAWM,QAAQP,CAAK,IAAI,IAC1CQ,IAAOP,EAAWK,IAAM,CAAC;AAC/B,UAAIE,IAAOA,EAAqBrJ,MAAAA,IAC1B6I,GAAuB7I,MAAAA;AAAAA,QAC/B;AAAA,MAGJ,MAAA,CAAW4F,EAAEE,QAAQ,SAASF,EAAE2C,aAC9B3C,EAAEa,eAAAA,GACFb,EAAEoC,gBAAAA,GACE5I,IACFxB,EAAekC,SAASE,MAAAA,IAExB2C,EAAwB2G,IAAIxJ,SAASE,MAAAA;AAAAA,IAG3C;AAAA,EAAA,GAEAgE,gBAAAA,EAAAC,cAACsF,IAAM;AAAA,IAAClF,OAAM;AAAA,IAAQhE,MAAK;AAAA,IAAOmJ,MAAK;AAAA,IAAKhD,SAAS/C;AAAAA,IAA6B+B,cAAa;AAAA,EAAA,CAAmC,GAClIxB,gBAAAA,EAAAC,cAACsF,IAAM;AAAA,IAAClF,OAAM;AAAA,IAAQhE,MAAK;AAAA,IAAUmJ,MAAK;AAAA,IAAKhD,SAASkB;AAAAA,IAAmClC,cAAa;AAAA,EAAA,CAAmC,CACxI,CACF,GAIHiE,KAAuBA,MAAM;AACjC,UAAMC,IAAczL,IAChB,mCACAa,IACA,mCACA,kCACE6K,IAAmB3K,KAAW,kCAAkC,IAChE4K,IAAsB,+DAC1BzK,KAAe,aAAa,qBAAqBwK,KAAsCD,CAAW,EAAE,sBAChF3K,EAAiB;AAEvC,WACEiF,gBAAAA,EAAAC,cAAA,OAAA;AAAA,MAAKC,WAAW0F;AAAAA,IAAAA,GACd5F,gBAAAA,EAAAC,cAAA,OAAA;AAAA,MACEzD,IAAIzC;AAAAA,MACJmG,WAAU;AAAA,MACV,sBAAoBxH,GAAOmN,8BAA8B;AAAA,IAAA,GAExDlG,GAAWzF,EAAuB,CAAC,GAAG,EAAI,CACxC,GACL8F,gBAAAA,EAAAC,cAAA,OAAA;AAAA,MAAKC,WAAU;AAAA,MAAqB,eAAY;AAAA,IAAA,GAC9CF,gBAAAA,EAAAC,cAAC0C,IAAI;AAAA,MACH/B,MAAM;AAAA,MACNkF,UAAU7L,IAAiB,QAAQ;AAAA,MACnCiG,WAAW;AAAA,MACX0C,QAAQ/H;AAAAA,IAAAA,CACT,CACE,CACF;AAAA,EAET,GAEMkL,KAAuBA,MAAM;AACjC,UAAM5F,IAAgBjG,EAAuB,CAAC,IAAIM,CAAQ;AAC1D,WAAIgB,KAAa2E,IACR,GAAG3E,CAAS,KAAK2E,CAAa,KAEhC3E,KAAaZ,KAAe;AAAA,EACrC;AAYA,SACEoF,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IACEC,WAAW,+BAA+BxH,GAAOwH,YAAY,IAAIxH,GAAOwH,SAAS,KAAK,EAAE;AAAA,IACxFY,OAAOpI,GAAOoI;AAAAA,EAAAA,GAEbpI,GAAO2H,QACNL,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKzD,IAAI3C;AAAAA,IAASqG,WAAW,4BAA4BvE,KAAuB,YAAY,+CAA+C;AAAA,EAAA,GACxIjD,GAAO2H,KACL,IACH,CAAC3H,GAAO4H,kBAAkB9E,IAC5BwE,gBAAAA,EAAAC,cAAA,QAAA;AAAA,IAAMzD,IAAI3C;AAAAA,IAASqG,WAAU;AAAA,EAAA,GAAW1E,CAAgB,IACtD,MACJwE,gBAAAA,EAAAC,cAAA,OAAAsC,EAAA;AAAA,IACEzB,OAAOpI,GAAOoI;AAAAA,IACdZ,WAAW,GAAGpF,IAAW,4DAA4D,EAAE;AAAA,EAAA,GACjFsB,IAeF;AAAA;AAAA;AAAA,IAGF4J,eAAepH,EAA0BoH;AAAAA,IACzCC,eAAerH,EAA0BqH;AAAAA,IACzCC,aAAatH,EAA0BsH;AAAAA,IACvCC,gBAAgBvH,EAA0BuH;AAAAA,IAC1C/C,kBAAkBA,CAACxB,MAAwC;AAQzD,UAPIA,EAAEE,QAAQ,YAAY7H,MACxB2H,EAAEoC,gBAAAA,GACFtK,EAAWoC,SAASuB,aAAAA,KAKjBuE,EAAEE,QAAQ,eAAeF,EAAEE,QAAQ,cAAc7H,GAAgB;AACpE,cAAMmM,IAAShL,IACXxB,EAAekC,UACf6C,EAAwB2G,IAAIxJ;AAChC,QAAIsK,KAAUzB,SAASC,kBAAkBwB,KAAU,CAACA,EAAOC,SAAS1B,SAASC,aAAqB,KAChGwB,EAAOpK,MAAAA;AAAAA,MAEX;AACA4C,MAAAA,EAA0BwE,mBAAmBxB,CAAC;AAAA,IAChD;AAAA,EAAA,IAvCoB;AAAA,IACpB,GAAG5D;AAAAA,IACHoF,kBAAkBA,CAACxB,MAAwC;AAGzD,OAAKA,EAAEE,QAAQ,YAAYF,EAAEE,QAAQ,UAAU7H,MAC7C2H,EAAEoC,gBAAAA,GACFtK,EAAWoC,SAASuB,aAAAA,IAEtBW,EAAuBoF,mBAAmBxB,CAAC;AAAA,IAC7C;AAAA;AAAA;AAAA;AAAA,IAIA,GAAIlG,IAAe;AAAA,MAAE4K,eAAezN;AAAAA,IAAAA,IAAc,CAAA;AAAA,EAAC,CA0BpD,GAEDmH,gBAAAA,EAAAC,cAACsG,IAAOhE,EAAA;AAAA,IACN+C,KAAK5L;AAAAA,IACL8M,eAAevM;AAAAA,IACfyB,cAAAA;AAAAA,IACA+K,uBACEvL,OAEIkB,IACAkI,KACApB;AAAAA,IAENwD,cAAc;AAAA,IACdC,6BAA6BjO,EAAMiO;AAAAA,IACnCC,yBACElO,EAAMmO,mBACF,MAAMnO,EAAMmO,iBAAkB;AAAA,MAAE9N,QAAQkB;AAAAA,MAAgBrB,eAAesB;AAAAA,IAAAA,CAAwB,IAC/FuL;AAAAA,IAENqB,iBAAkB1M,CAAAA,MAAU;AAE1B,UADAD,EAAkBC,CAAK,GACnBA,KAAS,CAACgC,KAAiBlC,EAAuBsD,SAAS,GAAG;AAEhE,cAAMuJ,IAAgBzJ,EAAgB0J,UACnClK,CAAAA,MAAWrC,IACRqC,EAAOrC,CAAe,MAAMP,EAAuB,CAAC,IAAIO,CAAe,IACvEqC,EAAOtC,CAAQ,MAAMN,EAAuB,CAAC,IAAIM,CAAQ,CAC/D;AACA,QAAIuM,KAAiB,KACnBjJ,GAAoBiJ,CAAa;AAAA,MAErC;AACA,UAAI3M,KAAS,CAACgB,GAAkB;AAI9B,cAAMkK,IAAMlJ,IAAgBuC,EAAwB2G,MAAM3H,EAAa2H;AACvEvJ,8BAAsB,MAAMA,sBAAsB,MAAMuJ,EAAIxJ,SAASE,MAAAA,CAAO,CAAC;AAAA,MAC/E;AAAA,IAEF;AAAA,IACAlB,UAAAA;AAAAA,IACA0G,cAAc9I,GAAOuO;AAAAA,IACrBC,4BAA4BxO,GAAOyO;AAAAA,IACnC7G,gBACE5H,GAAO2H,SAAS3H,GAAO4H,kBAAkB9E,IACrC,CAAC9C,GAAO2H,SAAU,CAAC3H,GAAO4H,kBAAkB9E,IAAa3B,IAAUnB,GAAO4H,gBAAgBvG,CAAO,EAAE8C,OAAOuK,OAAO,EAAEC,KAAK,GAAG,IAC3HxO;AAAAA,IAEN2C,WAAW,CAAC9C,GAAO2H,SAAS,CAAC7E,KAAa,CAAC9C,GAAO4H,iBAAiByF,GAAAA,IAAyBlN;AAAAA,IAC5FyO,YAhHkB;AAAA,IAiHZ,iBAAiB;AAAA,EAAA,GAClBrN,IAAiB;AAAA,IAAE,iBAAiBD;AAAAA,EAAAA,IAAc,CAAA,CAAE,CAC1D,CACE,GACJgB,MAAYgF,gBAAAA,EAAAC,cAAA,OAAA;AAAA,IAAKC,WAAU;AAAA,EAAA,GAAuCjF,EAAkB,CAClF;AAET;"}