eidos-ui 3.4.0 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/{Menu.types-DNIpjSAK.d.ts → Menu.types-BN4g1-3A.d.ts} +9 -0
  2. package/dist/{Menu.types-DwcuCZM7.d.cts → Menu.types-CTnUijv5.d.cts} +9 -0
  3. package/dist/{Select.types-BqaD7bmB.d.ts → Select.types-C2tGy1vj.d.ts} +10 -0
  4. package/dist/{Select.types-2p-mpaBL.d.cts → Select.types-ok-03rLo.d.cts} +10 -0
  5. package/dist/{Table.types-CPj-udMc.d.cts → Table.types-D-9tC0kJ.d.cts} +2 -3
  6. package/dist/{Table.types-CZZ7QWAI.d.ts → Table.types-D8pmgxKA.d.ts} +2 -3
  7. package/dist/{Toolbar.types-RN0klQzu.d.ts → Toolbar.types-CKnQC_TW.d.ts} +1 -1
  8. package/dist/{Toolbar.types-DSk8z2iy.d.cts → Toolbar.types-DUz2mxct.d.cts} +1 -1
  9. package/dist/accordion/index.cjs +2 -2
  10. package/dist/accordion/index.js +1 -1
  11. package/dist/alert/index.cjs +5 -5
  12. package/dist/alert/index.js +4 -4
  13. package/dist/button/index.cjs +4 -4
  14. package/dist/button/index.js +3 -3
  15. package/dist/chip/index.cjs +4 -4
  16. package/dist/chip/index.js +3 -3
  17. package/dist/{chunk-WGCGSM5P.js → chunk-24HKKSKX.js} +11 -18
  18. package/dist/chunk-24HKKSKX.js.map +1 -0
  19. package/dist/{chunk-BBU7QG7L.js → chunk-26SO4LZ5.js} +4 -4
  20. package/dist/{chunk-Y7VSWZWM.js → chunk-2JW3WSBF.js} +4 -4
  21. package/dist/{chunk-IXVM2XNS.js → chunk-2PCCGQOH.js} +89 -19
  22. package/dist/chunk-2PCCGQOH.js.map +1 -0
  23. package/dist/{chunk-4LET2PEX.cjs → chunk-2T7ZMMH5.cjs} +64 -11
  24. package/dist/chunk-2T7ZMMH5.cjs.map +1 -0
  25. package/dist/{chunk-VHSTB7GB.cjs → chunk-35LGEPLP.cjs} +13 -2
  26. package/dist/chunk-35LGEPLP.cjs.map +1 -0
  27. package/dist/{chunk-5E4DYTZ3.cjs → chunk-36JFXFM2.cjs} +36 -36
  28. package/dist/{chunk-5E4DYTZ3.cjs.map → chunk-36JFXFM2.cjs.map} +1 -1
  29. package/dist/{chunk-XMXL6NVJ.cjs → chunk-3KBBJZHK.cjs} +11 -11
  30. package/dist/{chunk-XMXL6NVJ.cjs.map → chunk-3KBBJZHK.cjs.map} +1 -1
  31. package/dist/{chunk-BIANFFJL.cjs → chunk-3RWZC6OW.cjs} +5 -5
  32. package/dist/{chunk-BIANFFJL.cjs.map → chunk-3RWZC6OW.cjs.map} +1 -1
  33. package/dist/{chunk-CBT3TTQR.cjs → chunk-3ZRFOKDM.cjs} +30 -30
  34. package/dist/{chunk-CBT3TTQR.cjs.map → chunk-3ZRFOKDM.cjs.map} +1 -1
  35. package/dist/{chunk-5V7DXZWT.cjs → chunk-4AO5RKV5.cjs} +25 -37
  36. package/dist/chunk-4AO5RKV5.cjs.map +1 -0
  37. package/dist/{chunk-UDRAM6JU.js → chunk-4J25XZDI.js} +13 -11
  38. package/dist/chunk-4J25XZDI.js.map +1 -0
  39. package/dist/{chunk-TWXZKUCG.cjs → chunk-4JSTBA4F.cjs} +9 -7
  40. package/dist/chunk-4JSTBA4F.cjs.map +1 -0
  41. package/dist/{chunk-TYGVKSL6.js → chunk-4LNTZPSQ.js} +2 -2
  42. package/dist/{chunk-UGTKZ7HP.js → chunk-5XH2PHT2.js} +13 -13
  43. package/dist/{chunk-UGTKZ7HP.js.map → chunk-5XH2PHT2.js.map} +1 -1
  44. package/dist/{chunk-H5D3ZFBM.cjs → chunk-66UQTF57.cjs} +46 -46
  45. package/dist/{chunk-H5D3ZFBM.cjs.map → chunk-66UQTF57.cjs.map} +1 -1
  46. package/dist/{chunk-JKBBHAIC.cjs → chunk-6JHVXWDV.cjs} +124 -54
  47. package/dist/chunk-6JHVXWDV.cjs.map +1 -0
  48. package/dist/{chunk-44T4HMFU.js → chunk-75GFIQRU.js} +3 -3
  49. package/dist/{chunk-AHVDTWVM.cjs → chunk-7BFODYNL.cjs} +7 -7
  50. package/dist/{chunk-AHVDTWVM.cjs.map → chunk-7BFODYNL.cjs.map} +1 -1
  51. package/dist/{chunk-NCZUQFKL.cjs → chunk-7VJCGKVP.cjs} +11 -11
  52. package/dist/{chunk-NCZUQFKL.cjs.map → chunk-7VJCGKVP.cjs.map} +1 -1
  53. package/dist/{chunk-PG2EII6U.js → chunk-A3LMUPG3.js} +2 -2
  54. package/dist/{chunk-BO4LTIJI.js → chunk-AR2ZOO6L.js} +3 -3
  55. package/dist/{chunk-MLUHM3VG.cjs → chunk-BEOECPVJ.cjs} +5 -7
  56. package/dist/chunk-BEOECPVJ.cjs.map +1 -0
  57. package/dist/{chunk-FPLX5FIK.js → chunk-BFKPJ627.js} +5 -4
  58. package/dist/chunk-BFKPJ627.js.map +1 -0
  59. package/dist/{chunk-MP7LN5CW.js → chunk-D7SQ7LHJ.js} +2 -2
  60. package/dist/{chunk-OWWPHXAF.cjs → chunk-DA375AI6.cjs} +8 -8
  61. package/dist/{chunk-OWWPHXAF.cjs.map → chunk-DA375AI6.cjs.map} +1 -1
  62. package/dist/{chunk-7KVXXHFX.cjs → chunk-DU5JKTHK.cjs} +8 -6
  63. package/dist/chunk-DU5JKTHK.cjs.map +1 -0
  64. package/dist/{chunk-SDEKANNL.cjs → chunk-EAJGSXEW.cjs} +14 -6
  65. package/dist/chunk-EAJGSXEW.cjs.map +1 -0
  66. package/dist/{chunk-LH5A2SIX.js → chunk-FIVMMCGM.js} +8 -20
  67. package/dist/chunk-FIVMMCGM.js.map +1 -0
  68. package/dist/{chunk-22EKNTWJ.js → chunk-GIEDIAPD.js} +8 -6
  69. package/dist/chunk-GIEDIAPD.js.map +1 -0
  70. package/dist/{chunk-X6UKU3C3.js → chunk-GPVGGBIR.js} +2 -2
  71. package/dist/{chunk-NACA72XI.js → chunk-GWHZFX2H.js} +3 -3
  72. package/dist/{chunk-YIBPOLNN.js → chunk-HEX4IMLO.js} +4 -4
  73. package/dist/{chunk-KWDOOMHR.cjs → chunk-HMEREPDB.cjs} +7 -7
  74. package/dist/{chunk-KWDOOMHR.cjs.map → chunk-HMEREPDB.cjs.map} +1 -1
  75. package/dist/{chunk-TYSNOPMQ.cjs → chunk-HNGFRRVZ.cjs} +3 -3
  76. package/dist/{chunk-TYSNOPMQ.cjs.map → chunk-HNGFRRVZ.cjs.map} +1 -1
  77. package/dist/{chunk-3QQKWXMV.cjs → chunk-I6M6CVI2.cjs} +3 -3
  78. package/dist/{chunk-3QQKWXMV.cjs.map → chunk-I6M6CVI2.cjs.map} +1 -1
  79. package/dist/chunk-J76JHN7J.cjs +225 -0
  80. package/dist/chunk-J76JHN7J.cjs.map +1 -0
  81. package/dist/{chunk-SKLMBE3Z.cjs → chunk-JCKGAAPZ.cjs} +7 -7
  82. package/dist/{chunk-SKLMBE3Z.cjs.map → chunk-JCKGAAPZ.cjs.map} +1 -1
  83. package/dist/{chunk-67EXHO4T.js → chunk-JHX6JK3M.js} +79 -75
  84. package/dist/chunk-JHX6JK3M.js.map +1 -0
  85. package/dist/{chunk-XO7WTE6O.js → chunk-JNY7TUDS.js} +4 -6
  86. package/dist/chunk-JNY7TUDS.js.map +1 -0
  87. package/dist/{chunk-GMDVW76A.cjs → chunk-JPYJQ4TF.cjs} +6 -6
  88. package/dist/{chunk-GMDVW76A.cjs.map → chunk-JPYJQ4TF.cjs.map} +1 -1
  89. package/dist/{chunk-SVCWSW2F.js → chunk-JT4KVXJK.js} +65 -12
  90. package/dist/chunk-JT4KVXJK.js.map +1 -0
  91. package/dist/{chunk-FODRHCRP.cjs → chunk-KBQD4JLK.cjs} +3 -3
  92. package/dist/{chunk-FODRHCRP.cjs.map → chunk-KBQD4JLK.cjs.map} +1 -1
  93. package/dist/{chunk-P7J6WZTO.cjs → chunk-KIZVY57H.cjs} +82 -78
  94. package/dist/chunk-KIZVY57H.cjs.map +1 -0
  95. package/dist/{chunk-N5ZWQJTM.cjs → chunk-KREHT4AQ.cjs} +8 -8
  96. package/dist/{chunk-N5ZWQJTM.cjs.map → chunk-KREHT4AQ.cjs.map} +1 -1
  97. package/dist/{chunk-SCLFJHN2.js → chunk-L65MHFMD.js} +3 -3
  98. package/dist/{chunk-CMOBXLNA.js → chunk-LNDFVC2Q.js} +14 -6
  99. package/dist/chunk-LNDFVC2Q.js.map +1 -0
  100. package/dist/{chunk-N77VOYCK.cjs → chunk-LQXFXXMJ.cjs} +8 -7
  101. package/dist/chunk-LQXFXXMJ.cjs.map +1 -0
  102. package/dist/{chunk-OIXPYXR6.js → chunk-MPIVBAMY.js} +2 -2
  103. package/dist/{chunk-TLECMA3B.js → chunk-MQAOXZD4.js} +27 -14
  104. package/dist/chunk-MQAOXZD4.js.map +1 -0
  105. package/dist/{chunk-YUH56CJI.cjs → chunk-NOQF7UQ5.cjs} +6 -6
  106. package/dist/{chunk-YUH56CJI.cjs.map → chunk-NOQF7UQ5.cjs.map} +1 -1
  107. package/dist/{chunk-DMOZURHV.js → chunk-O3QM3BFE.js} +2 -2
  108. package/dist/{chunk-SFRILDXY.js → chunk-OOCCSMWM.js} +4 -4
  109. package/dist/chunk-P4XZH3OR.js +225 -0
  110. package/dist/chunk-P4XZH3OR.js.map +1 -0
  111. package/dist/{chunk-O46UJUZM.cjs → chunk-PMSENLOA.cjs} +35 -27
  112. package/dist/chunk-PMSENLOA.cjs.map +1 -0
  113. package/dist/{chunk-EWTMX4DK.js → chunk-RHFD2Z5V.js} +7 -7
  114. package/dist/{chunk-WT4WBHBR.js → chunk-RHHZRTWM.js} +13 -2
  115. package/dist/chunk-RHHZRTWM.js.map +1 -0
  116. package/dist/{chunk-NF55JG2V.cjs → chunk-RJVHR45I.cjs} +7 -7
  117. package/dist/{chunk-NF55JG2V.cjs.map → chunk-RJVHR45I.cjs.map} +1 -1
  118. package/dist/{chunk-FDMYDIGI.js → chunk-SDUGYJGW.js} +22 -14
  119. package/dist/chunk-SDUGYJGW.js.map +1 -0
  120. package/dist/{chunk-VRNCXYEP.js → chunk-SFFKQQ5Z.js} +4 -4
  121. package/dist/{chunk-AXPEJ5IG.cjs → chunk-TC5IC6OP.cjs} +3 -3
  122. package/dist/{chunk-AXPEJ5IG.cjs.map → chunk-TC5IC6OP.cjs.map} +1 -1
  123. package/dist/{chunk-BGBAZMFE.js → chunk-THCTUBX6.js} +8 -6
  124. package/dist/chunk-THCTUBX6.js.map +1 -0
  125. package/dist/{chunk-FXMRDNR6.cjs → chunk-TTLFY76J.cjs} +6 -6
  126. package/dist/{chunk-FXMRDNR6.cjs.map → chunk-TTLFY76J.cjs.map} +1 -1
  127. package/dist/{chunk-OZQKWDFH.cjs → chunk-V4BZWBZT.cjs} +7 -7
  128. package/dist/{chunk-OZQKWDFH.cjs.map → chunk-V4BZWBZT.cjs.map} +1 -1
  129. package/dist/{chunk-27UANGPW.cjs → chunk-VQGLVBPL.cjs} +13 -11
  130. package/dist/chunk-VQGLVBPL.cjs.map +1 -0
  131. package/dist/{chunk-LIKSLFX6.js → chunk-WE2SBWZ6.js} +7 -7
  132. package/dist/{chunk-GPK2THIG.js → chunk-WNDDS367.js} +3 -3
  133. package/dist/{chunk-3S33BIN2.cjs → chunk-X3BVQBXD.cjs} +16 -16
  134. package/dist/{chunk-3S33BIN2.cjs.map → chunk-X3BVQBXD.cjs.map} +1 -1
  135. package/dist/{chunk-SKBKTNEQ.cjs → chunk-XERBOFYZ.cjs} +3 -3
  136. package/dist/{chunk-SKBKTNEQ.cjs.map → chunk-XERBOFYZ.cjs.map} +1 -1
  137. package/dist/{chunk-6LCYO2HG.cjs → chunk-XZLSHEHE.cjs} +40 -27
  138. package/dist/chunk-XZLSHEHE.cjs.map +1 -0
  139. package/dist/{chunk-CEC3GO4R.js → chunk-YAKTVIVK.js} +3 -3
  140. package/dist/{chunk-3WV6RTXX.js → chunk-YP4HUBKN.js} +2 -2
  141. package/dist/{chunk-XK5USBHB.js → chunk-YXRKBKFB.js} +3 -3
  142. package/dist/{chunk-MW4YZVP5.cjs → chunk-ZMRINZIO.cjs} +17 -24
  143. package/dist/chunk-ZMRINZIO.cjs.map +1 -0
  144. package/dist/color-picker/index.cjs +4 -4
  145. package/dist/color-picker/index.js +3 -3
  146. package/dist/combobox/index.cjs +6 -6
  147. package/dist/combobox/index.js +5 -5
  148. package/dist/command-palette/index.cjs +3 -3
  149. package/dist/command-palette/index.js +2 -2
  150. package/dist/context-menu/index.cjs +6 -6
  151. package/dist/context-menu/index.d.cts +1 -1
  152. package/dist/context-menu/index.d.ts +1 -1
  153. package/dist/context-menu/index.js +5 -5
  154. package/dist/conversation/index.cjs +8 -8
  155. package/dist/conversation/index.d.cts +1 -1
  156. package/dist/conversation/index.d.ts +1 -1
  157. package/dist/conversation/index.js +7 -7
  158. package/dist/data-grid/index.cjs +15 -15
  159. package/dist/data-grid/index.d.cts +13 -14
  160. package/dist/data-grid/index.d.ts +13 -14
  161. package/dist/data-grid/index.js +14 -14
  162. package/dist/date-picker/index.cjs +8 -8
  163. package/dist/date-picker/index.d.cts +11 -1
  164. package/dist/date-picker/index.d.ts +11 -1
  165. package/dist/date-picker/index.js +7 -7
  166. package/dist/drawer/index.cjs +5 -5
  167. package/dist/drawer/index.js +4 -4
  168. package/dist/dropdown/index.cjs +3 -3
  169. package/dist/dropdown/index.d.cts +34 -0
  170. package/dist/dropdown/index.d.ts +34 -0
  171. package/dist/dropdown/index.js +2 -2
  172. package/dist/header/index.cjs +6 -6
  173. package/dist/header/index.js +5 -5
  174. package/dist/index.cjs +38 -38
  175. package/dist/index.css +19 -2
  176. package/dist/index.d.cts +4 -4
  177. package/dist/index.d.ts +4 -4
  178. package/dist/index.js +37 -37
  179. package/dist/inline-edit/index.cjs +5 -5
  180. package/dist/inline-edit/index.js +4 -4
  181. package/dist/input/index.cjs +4 -4
  182. package/dist/input/index.js +3 -3
  183. package/dist/menu/index.cjs +5 -5
  184. package/dist/menu/index.d.cts +23 -2
  185. package/dist/menu/index.d.ts +23 -2
  186. package/dist/menu/index.js +4 -4
  187. package/dist/modal/index.cjs +5 -5
  188. package/dist/modal/index.js +4 -4
  189. package/dist/navigation/index.cjs +5 -5
  190. package/dist/navigation/index.js +4 -4
  191. package/dist/number-input/index.cjs +3 -3
  192. package/dist/number-input/index.js +2 -2
  193. package/dist/page-layout/index.cjs +12 -12
  194. package/dist/page-layout/index.d.cts +2 -2
  195. package/dist/page-layout/index.d.ts +2 -2
  196. package/dist/page-layout/index.js +11 -11
  197. package/dist/pagination/index.cjs +8 -8
  198. package/dist/pagination/index.js +7 -7
  199. package/dist/popover/index.cjs +3 -3
  200. package/dist/popover/index.d.cts +3 -1
  201. package/dist/popover/index.d.ts +3 -1
  202. package/dist/popover/index.js +2 -2
  203. package/dist/segmented-control/index.cjs +4 -4
  204. package/dist/segmented-control/index.js +3 -3
  205. package/dist/select/index.cjs +6 -6
  206. package/dist/select/index.d.cts +2 -2
  207. package/dist/select/index.d.ts +2 -2
  208. package/dist/select/index.js +5 -5
  209. package/dist/snackbar/index.cjs +5 -5
  210. package/dist/snackbar/index.js +4 -4
  211. package/dist/split-button/index.cjs +6 -6
  212. package/dist/split-button/index.js +5 -5
  213. package/dist/table/index.cjs +13 -13
  214. package/dist/table/index.d.cts +2 -2
  215. package/dist/table/index.d.ts +2 -2
  216. package/dist/table/index.js +12 -12
  217. package/dist/tabs/index.cjs +3 -3
  218. package/dist/tabs/index.js +2 -2
  219. package/dist/tag-input/index.cjs +6 -6
  220. package/dist/tag-input/index.js +5 -5
  221. package/dist/textarea/index.cjs +4 -4
  222. package/dist/textarea/index.js +3 -3
  223. package/dist/theme-editor/index.cjs +11 -11
  224. package/dist/theme-editor/index.js +10 -10
  225. package/dist/theme-provider/index.cjs +3 -3
  226. package/dist/theme-provider/index.js +2 -2
  227. package/dist/toolbar/index.cjs +8 -8
  228. package/dist/toolbar/index.d.cts +3 -3
  229. package/dist/toolbar/index.d.ts +3 -3
  230. package/dist/toolbar/index.js +7 -7
  231. package/dist/tooltip/index.cjs +3 -3
  232. package/dist/tooltip/index.js +2 -2
  233. package/package.json +1 -1
  234. package/dist/chunk-22EKNTWJ.js.map +0 -1
  235. package/dist/chunk-27UANGPW.cjs.map +0 -1
  236. package/dist/chunk-4LET2PEX.cjs.map +0 -1
  237. package/dist/chunk-5V7DXZWT.cjs.map +0 -1
  238. package/dist/chunk-67EXHO4T.js.map +0 -1
  239. package/dist/chunk-6LCYO2HG.cjs.map +0 -1
  240. package/dist/chunk-7KVXXHFX.cjs.map +0 -1
  241. package/dist/chunk-BGBAZMFE.js.map +0 -1
  242. package/dist/chunk-CMOBXLNA.js.map +0 -1
  243. package/dist/chunk-CP335H4Q.js +0 -125
  244. package/dist/chunk-CP335H4Q.js.map +0 -1
  245. package/dist/chunk-FDMYDIGI.js.map +0 -1
  246. package/dist/chunk-FPLX5FIK.js.map +0 -1
  247. package/dist/chunk-G74DHVHV.cjs +0 -125
  248. package/dist/chunk-G74DHVHV.cjs.map +0 -1
  249. package/dist/chunk-IXVM2XNS.js.map +0 -1
  250. package/dist/chunk-JKBBHAIC.cjs.map +0 -1
  251. package/dist/chunk-LH5A2SIX.js.map +0 -1
  252. package/dist/chunk-MLUHM3VG.cjs.map +0 -1
  253. package/dist/chunk-MW4YZVP5.cjs.map +0 -1
  254. package/dist/chunk-N77VOYCK.cjs.map +0 -1
  255. package/dist/chunk-O46UJUZM.cjs.map +0 -1
  256. package/dist/chunk-P7J6WZTO.cjs.map +0 -1
  257. package/dist/chunk-SDEKANNL.cjs.map +0 -1
  258. package/dist/chunk-SVCWSW2F.js.map +0 -1
  259. package/dist/chunk-TLECMA3B.js.map +0 -1
  260. package/dist/chunk-TWXZKUCG.cjs.map +0 -1
  261. package/dist/chunk-UDRAM6JU.js.map +0 -1
  262. package/dist/chunk-VHSTB7GB.cjs.map +0 -1
  263. package/dist/chunk-WGCGSM5P.js.map +0 -1
  264. package/dist/chunk-WT4WBHBR.js.map +0 -1
  265. package/dist/chunk-XO7WTE6O.js.map +0 -1
  266. /package/dist/{chunk-BBU7QG7L.js.map → chunk-26SO4LZ5.js.map} +0 -0
  267. /package/dist/{chunk-Y7VSWZWM.js.map → chunk-2JW3WSBF.js.map} +0 -0
  268. /package/dist/{chunk-TYGVKSL6.js.map → chunk-4LNTZPSQ.js.map} +0 -0
  269. /package/dist/{chunk-44T4HMFU.js.map → chunk-75GFIQRU.js.map} +0 -0
  270. /package/dist/{chunk-PG2EII6U.js.map → chunk-A3LMUPG3.js.map} +0 -0
  271. /package/dist/{chunk-BO4LTIJI.js.map → chunk-AR2ZOO6L.js.map} +0 -0
  272. /package/dist/{chunk-MP7LN5CW.js.map → chunk-D7SQ7LHJ.js.map} +0 -0
  273. /package/dist/{chunk-X6UKU3C3.js.map → chunk-GPVGGBIR.js.map} +0 -0
  274. /package/dist/{chunk-NACA72XI.js.map → chunk-GWHZFX2H.js.map} +0 -0
  275. /package/dist/{chunk-YIBPOLNN.js.map → chunk-HEX4IMLO.js.map} +0 -0
  276. /package/dist/{chunk-SCLFJHN2.js.map → chunk-L65MHFMD.js.map} +0 -0
  277. /package/dist/{chunk-OIXPYXR6.js.map → chunk-MPIVBAMY.js.map} +0 -0
  278. /package/dist/{chunk-DMOZURHV.js.map → chunk-O3QM3BFE.js.map} +0 -0
  279. /package/dist/{chunk-SFRILDXY.js.map → chunk-OOCCSMWM.js.map} +0 -0
  280. /package/dist/{chunk-EWTMX4DK.js.map → chunk-RHFD2Z5V.js.map} +0 -0
  281. /package/dist/{chunk-VRNCXYEP.js.map → chunk-SFFKQQ5Z.js.map} +0 -0
  282. /package/dist/{chunk-LIKSLFX6.js.map → chunk-WE2SBWZ6.js.map} +0 -0
  283. /package/dist/{chunk-GPK2THIG.js.map → chunk-WNDDS367.js.map} +0 -0
  284. /package/dist/{chunk-CEC3GO4R.js.map → chunk-YAKTVIVK.js.map} +0 -0
  285. /package/dist/{chunk-3WV6RTXX.js.map → chunk-YP4HUBKN.js.map} +0 -0
  286. /package/dist/{chunk-XK5USBHB.js.map → chunk-YXRKBKFB.js.map} +0 -0
@@ -1,6 +1,8 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkVHSTB7GBcjs = require('./chunk-VHSTB7GB.cjs');
3
+
4
+
5
+ var _chunk35LGEPLPcjs = require('./chunk-35LGEPLP.cjs');
4
6
 
5
7
  // src/components/Dropdown/Dropdown.context.types.ts
6
8
  var _react = require('react');
@@ -33,8 +35,11 @@ var DropdownInternal = ({
33
35
  delay = 0,
34
36
  disabled = false,
35
37
  defaultOpen = false,
38
+ open,
39
+ onOpenChange,
36
40
  triggerClassName = "",
37
41
  contentClassName = "",
42
+ role,
38
43
  closeOnClickOutside = true,
39
44
  closeOnEscape = true,
40
45
  minWidth,
@@ -50,24 +55,58 @@ var DropdownInternal = ({
50
55
  }) => {
51
56
  const context = useDropdownContext();
52
57
  const actualLevel = dropdownLevel !== void 0 ? dropdownLevel : context.level;
58
+ const isClient = _chunk35LGEPLPcjs.useIsClient.call(void 0, );
53
59
  const [dropdownState, setDropdownState] = _react.useState.call(void 0, {
54
60
  isVisible: defaultOpen,
55
61
  isPositioned: false,
56
62
  position: { top: 0, left: 0, placement: preferredPlacement }
57
63
  });
64
+ const isControlled = open !== void 0;
65
+ const isVisible = isControlled ? open : dropdownState.isVisible;
66
+ const wasControlled = _react.useRef.call(void 0, isControlled);
67
+ if (wasControlled.current !== isControlled) {
68
+ _chunk35LGEPLPcjs.devWarn.call(void 0,
69
+ "dropdown-controlled-switch",
70
+ "Dropdown: `open` switched between controlled and uncontrolled. Pick one for the lifetime of the component - the dropdown keeps its own state as a fallback, so switching makes it jump to whatever that happens to be."
71
+ );
72
+ wasControlled.current = isControlled;
73
+ }
74
+ const setOpen = _react.useCallback.call(void 0,
75
+ (next) => {
76
+ setDropdownState((prev) => ({ ...prev, isVisible: next, isPositioned: false }));
77
+ _optionalChain([onOpenChange, 'optionalCall', _ => _(next)]);
78
+ },
79
+ [onOpenChange]
80
+ );
81
+ _react.useEffect.call(void 0, () => {
82
+ if (!isVisible) {
83
+ setDropdownState((prev) => prev.isPositioned ? { ...prev, isPositioned: false } : prev);
84
+ }
85
+ }, [isVisible]);
86
+ _react.useEffect.call(void 0, () => {
87
+ if (!isVisible && timeoutRef.current) {
88
+ clearTimeout(timeoutRef.current);
89
+ timeoutRef.current = void 0;
90
+ }
91
+ }, [isVisible]);
58
92
  const triggerRef = _react.useRef.call(void 0, null);
59
93
  const contentRef = _react.useRef.call(void 0, null);
60
94
  const timeoutRef = _react.useRef.call(void 0, void 0);
61
95
  const animationFrameRef = _react.useRef.call(void 0, void 0);
62
96
  const isScrollingRef = _react.useRef.call(void 0, false);
63
97
  const getTriggerElement = _react.useCallback.call(void 0,
64
- () => _nullishCoalesce(_optionalChain([externalTriggerRef, 'optionalAccess', _ => _.current]), () => ( triggerRef.current)),
98
+ () => _nullishCoalesce(_optionalChain([externalTriggerRef, 'optionalAccess', _2 => _2.current]), () => ( triggerRef.current)),
65
99
  [externalTriggerRef]
66
100
  );
67
101
  const calculateDynamicSizing = _react.useCallback.call(void 0,
102
+ // Only the width is read, so the parameter is the narrowest shape that
103
+ // satisfies it rather than a `DOMRect`. The caller used to fall back to
104
+ // `new DOMRect()`, which is a browser-only global evaluated *during
105
+ // render* - it was the first thing to throw when an open dropdown was
106
+ // server-rendered, before `document.body` ever got a chance to.
68
107
  (triggerRect) => {
69
108
  const styles = { width: "max-content" };
70
- if (autoWidth && (_optionalChain([externalTriggerRef, 'optionalAccess', _2 => _2.current]) || triggerRef.current)) {
109
+ if (autoWidth && triggerRect && (_optionalChain([externalTriggerRef, 'optionalAccess', _3 => _3.current]) || triggerRef.current)) {
71
110
  const triggerWidth = triggerRect.width;
72
111
  styles.minWidth = triggerWidth;
73
112
  }
@@ -167,7 +206,7 @@ var DropdownInternal = ({
167
206
  [preferredPlacement, align]
168
207
  );
169
208
  const handleScroll = _react.useCallback.call(void 0, () => {
170
- if (!dropdownState.isVisible || !dropdownState.isPositioned || isScrollingRef.current) return;
209
+ if (!isVisible || !dropdownState.isPositioned || isScrollingRef.current) return;
171
210
  isScrollingRef.current = true;
172
211
  animationFrameRef.current = requestAnimationFrame(() => {
173
212
  const triggerElement = getTriggerElement();
@@ -182,20 +221,11 @@ var DropdownInternal = ({
182
221
  }
183
222
  isScrollingRef.current = false;
184
223
  });
185
- }, [
186
- dropdownState.isVisible,
187
- dropdownState.isPositioned,
188
- calculateOptimalPosition,
189
- getTriggerElement
190
- ]);
224
+ }, [isVisible, dropdownState.isPositioned, calculateOptimalPosition, getTriggerElement]);
191
225
  const handleTriggerClick = _react.useCallback.call(void 0, () => {
192
226
  if (disabled) return;
193
- if (dropdownState.isVisible) {
194
- setDropdownState((prev) => ({
195
- ...prev,
196
- isVisible: false,
197
- isPositioned: false
198
- }));
227
+ if (isVisible) {
228
+ setOpen(false);
199
229
  } else {
200
230
  if (dropdownGroup) {
201
231
  const siblingDropdowns = document.querySelectorAll(
@@ -207,31 +237,15 @@ var DropdownInternal = ({
207
237
  });
208
238
  }
209
239
  if (delay > 0) {
210
- timeoutRef.current = setTimeout(() => {
211
- setDropdownState((prev) => ({
212
- ...prev,
213
- isVisible: true,
214
- isPositioned: false
215
- }));
216
- }, delay);
240
+ timeoutRef.current = setTimeout(() => setOpen(true), delay);
217
241
  } else {
218
- setDropdownState((prev) => ({
219
- ...prev,
220
- isVisible: true,
221
- isPositioned: false
222
- }));
242
+ setOpen(true);
223
243
  }
224
244
  }
225
- }, [disabled, dropdownState.isVisible, delay, dropdownGroup]);
245
+ }, [disabled, isVisible, delay, dropdownGroup, setOpen]);
226
246
  _react.useEffect.call(void 0, () => {
227
247
  const handleCloseSibling = () => {
228
- if (dropdownState.isVisible) {
229
- setDropdownState((prev) => ({
230
- ...prev,
231
- isVisible: false,
232
- isPositioned: false
233
- }));
234
- }
248
+ if (isVisible) setOpen(false);
235
249
  };
236
250
  const currentContentRef = contentRef.current;
237
251
  if (currentContentRef) {
@@ -242,15 +256,15 @@ var DropdownInternal = ({
242
256
  currentContentRef.removeEventListener("closeSibling", handleCloseSibling);
243
257
  }
244
258
  };
245
- }, [dropdownState.isVisible]);
259
+ }, [isVisible, setOpen]);
246
260
  const handleClickOutside = _react.useCallback.call(void 0,
247
261
  (event) => {
248
- if (!closeOnClickOutside || !dropdownState.isVisible) return;
262
+ if (!closeOnClickOutside || !isVisible) return;
249
263
  const target = event.target;
250
- if (_optionalChain([contentRef, 'access', _3 => _3.current, 'optionalAccess', _4 => _4.contains, 'call', _5 => _5(target)])) {
264
+ if (_optionalChain([contentRef, 'access', _4 => _4.current, 'optionalAccess', _5 => _5.contains, 'call', _6 => _6(target)])) {
251
265
  return;
252
266
  }
253
- if (_optionalChain([getTriggerElement, 'call', _6 => _6(), 'optionalAccess', _7 => _7.contains, 'call', _8 => _8(target)])) {
267
+ if (_optionalChain([getTriggerElement, 'call', _7 => _7(), 'optionalAccess', _8 => _8.contains, 'call', _9 => _9(target)])) {
254
268
  return;
255
269
  }
256
270
  const allDropdowns = document.querySelectorAll("[data-dropdown-content]");
@@ -265,29 +279,21 @@ var DropdownInternal = ({
265
279
  }
266
280
  }
267
281
  }
268
- setDropdownState((prev) => ({
269
- ...prev,
270
- isVisible: false,
271
- isPositioned: false
272
- }));
282
+ setOpen(false);
273
283
  },
274
- [closeOnClickOutside, dropdownState.isVisible, actualLevel, getTriggerElement]
284
+ [closeOnClickOutside, isVisible, actualLevel, getTriggerElement, setOpen]
275
285
  );
276
286
  const handleEscapeKey = _react.useCallback.call(void 0,
277
287
  (event) => {
278
- if (closeOnEscape && event.key === "Escape" && dropdownState.isVisible) {
279
- setDropdownState((prev) => ({
280
- ...prev,
281
- isVisible: false,
282
- isPositioned: false
283
- }));
288
+ if (closeOnEscape && event.key === "Escape" && isVisible) {
289
+ setOpen(false);
284
290
  }
285
291
  },
286
- [closeOnEscape, dropdownState.isVisible]
292
+ [closeOnEscape, isVisible, setOpen]
287
293
  );
288
294
  _react.useEffect.call(void 0, () => {
289
295
  const triggerElement = getTriggerElement();
290
- if (dropdownState.isVisible && !dropdownState.isPositioned && contentRef.current && triggerElement) {
296
+ if (isVisible && !dropdownState.isPositioned && contentRef.current && triggerElement) {
291
297
  const triggerRect = triggerElement.getBoundingClientRect();
292
298
  const contentRect = contentRef.current.getBoundingClientRect();
293
299
  const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);
@@ -298,15 +304,22 @@ var DropdownInternal = ({
298
304
  }));
299
305
  }
300
306
  }, [
301
- dropdownState.isVisible,
307
+ isVisible,
302
308
  dropdownState.isPositioned,
303
309
  calculateOptimalPosition,
304
- getTriggerElement
310
+ getTriggerElement,
311
+ // Load-bearing, not incidental. With `defaultOpen` the panel is "visible"
312
+ // from the first render, but the portal is deferred one render for SSR
313
+ // safety - so this effect's first run finds `contentRef.current` still
314
+ // null, measures nothing, and without `isClient` in the deps it would never
315
+ // run again. The panel then stays `visibility: hidden` forever: mounted,
316
+ // unpositioned, invisible. Caught by `OpensOnMountWithDefaultOpen`.
317
+ isClient
305
318
  ]);
306
319
  _react.useEffect.call(void 0, () => {
307
320
  const handleResize = () => {
308
321
  const triggerElement = getTriggerElement();
309
- if (dropdownState.isVisible && dropdownState.isPositioned && contentRef.current && triggerElement) {
322
+ if (isVisible && dropdownState.isPositioned && contentRef.current && triggerElement) {
310
323
  const triggerRect = triggerElement.getBoundingClientRect();
311
324
  const contentRect = contentRef.current.getBoundingClientRect();
312
325
  const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);
@@ -318,24 +331,17 @@ var DropdownInternal = ({
318
331
  };
319
332
  window.addEventListener("resize", handleResize);
320
333
  return () => window.removeEventListener("resize", handleResize);
321
- }, [
322
- dropdownState.isVisible,
323
- dropdownState.isPositioned,
324
- calculateOptimalPosition,
325
- getTriggerElement
326
- ]);
334
+ }, [isVisible, dropdownState.isPositioned, calculateOptimalPosition, getTriggerElement]);
327
335
  _react.useEffect.call(void 0, () => {
328
- if (dropdownState.isVisible) {
329
- window.addEventListener("scroll", handleScroll, { passive: true });
330
- document.body.addEventListener("scroll", handleScroll, { passive: true });
336
+ if (isVisible) {
337
+ document.addEventListener("scroll", handleScroll, { capture: true, passive: true });
331
338
  }
332
339
  return () => {
333
- window.removeEventListener("scroll", handleScroll);
334
- document.body.removeEventListener("scroll", handleScroll);
340
+ document.removeEventListener("scroll", handleScroll, { capture: true });
335
341
  };
336
- }, [dropdownState.isVisible, handleScroll]);
342
+ }, [isVisible, handleScroll]);
337
343
  _react.useEffect.call(void 0, () => {
338
- if (dropdownState.isVisible) {
344
+ if (isVisible) {
339
345
  document.addEventListener("mousedown", handleClickOutside);
340
346
  document.addEventListener("keydown", handleEscapeKey);
341
347
  }
@@ -343,7 +349,7 @@ var DropdownInternal = ({
343
349
  document.removeEventListener("mousedown", handleClickOutside);
344
350
  document.removeEventListener("keydown", handleEscapeKey);
345
351
  };
346
- }, [dropdownState.isVisible, handleClickOutside, handleEscapeKey]);
352
+ }, [isVisible, handleClickOutside, handleEscapeKey]);
347
353
  _react.useEffect.call(void 0, () => {
348
354
  return () => {
349
355
  if (timeoutRef.current) {
@@ -360,11 +366,11 @@ var DropdownInternal = ({
360
366
  {
361
367
  ref: triggerRef,
362
368
  onClick: handleTriggerClick,
363
- className: `eidos-dropdown-trigger ${fullWidth ? _chunkVHSTB7GBcjs.fullWidthModifier.call(void 0, "eidos-dropdown-trigger") : ""} ${triggerClassName}`,
369
+ className: `eidos-dropdown-trigger ${fullWidth ? _chunk35LGEPLPcjs.fullWidthModifier.call(void 0, "eidos-dropdown-trigger") : ""} ${triggerClassName}`,
364
370
  children: trigger
365
371
  }
366
372
  ),
367
- dropdownState.isVisible && _reactdom.createPortal.call(void 0,
373
+ isClient && isVisible && _reactdom.createPortal.call(void 0,
368
374
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
369
375
  "div",
370
376
  {
@@ -376,11 +382,9 @@ var DropdownInternal = ({
376
382
  style: {
377
383
  top: dropdownState.position.top,
378
384
  left: dropdownState.position.left,
379
- ...calculateDynamicSizing(
380
- _optionalChain([getTriggerElement, 'call', _9 => _9(), 'optionalAccess', _10 => _10.getBoundingClientRect, 'call', _11 => _11()]) || new DOMRect()
381
- )
385
+ ...calculateDynamicSizing(_nullishCoalesce(_optionalChain([getTriggerElement, 'call', _10 => _10(), 'optionalAccess', _11 => _11.getBoundingClientRect, 'call', _12 => _12()]), () => ( null)))
382
386
  },
383
- role: "menu",
387
+ role,
384
388
  children: content
385
389
  }
386
390
  ),
@@ -400,4 +404,4 @@ Dropdown.displayName = "Dropdown";
400
404
 
401
405
 
402
406
  exports.DropdownProvider = DropdownProvider; exports.useDropdownContext = useDropdownContext; exports.Dropdown = Dropdown;
403
- //# sourceMappingURL=chunk-P7J6WZTO.cjs.map
407
+ //# sourceMappingURL=chunk-KIZVY57H.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-KIZVY57H.cjs","../src/components/Dropdown/Dropdown.context.types.ts","../src/components/Dropdown/Dropdown.context.tsx","../src/components/Dropdown/Dropdown.hooks.ts","../src/components/Dropdown/Dropdown.component.tsx"],"names":["jsx"],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-KIZVY57H.cjs","sourcesContent":[null,"import { createContext } from 'react';\n\nexport interface DropdownContextValue {\n level: number;\n}\n\nexport const DropdownContext = createContext<DropdownContextValue>({ level: 0 });\n","import React from 'react';\nimport { DropdownContext } from './Dropdown.context.types';\n\nexport const DropdownProvider: React.FC<{ children: React.ReactNode; level?: number }> = ({\n children,\n level = 0,\n}) => {\n return <DropdownContext.Provider value={{ level }}>{children}</DropdownContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { DropdownContext } from './Dropdown.context.types';\n\nexport const useDropdownContext = () => {\n return useContext(DropdownContext);\n};\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { devWarn, fullWidthModifier, useIsClient } from '../../utils';\nimport type { DropdownProps, DropdownState } from './Dropdown.types';\nimport { DropdownProvider } from './Dropdown.context';\nimport { useDropdownContext } from './Dropdown.hooks';\n\nconst DropdownInternal: React.FC<DropdownProps> = ({\n trigger,\n content,\n placement: preferredPlacement = 'bottom',\n align = 'start',\n delay = 0,\n disabled = false,\n defaultOpen = false,\n open,\n onOpenChange,\n triggerClassName = '',\n contentClassName = '',\n role,\n closeOnClickOutside = true,\n closeOnEscape = true,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n autoWidth = true,\n fullWidth = false,\n triggerRef: externalTriggerRef,\n isNested = false,\n dropdownLevel,\n dropdownGroup,\n}) => {\n const context = useDropdownContext();\n const actualLevel = dropdownLevel !== undefined ? dropdownLevel : context.level;\n // `defaultOpen` makes the portal reachable on the first render, which cannot\n // happen on a server - see `useIsClient`.\n const isClient = useIsClient();\n const [dropdownState, setDropdownState] = useState<DropdownState>({\n isVisible: defaultOpen,\n isPositioned: false,\n position: { top: 0, left: 0, placement: preferredPlacement },\n });\n\n // ── Controlled / uncontrolled open state ──────────────────────────────────\n //\n // `dropdownState.isVisible` stays the *uncontrolled* value and is kept in\n // step even while controlled, so removing `open` later leaves coherent state.\n // Everything downstream reads `isVisible` below, never the field directly.\n //\n // `DropdownState` is exported from the package root, so it keeps its shape:\n // splitting `isVisible` out of it would be a breaking type change for a\n // consumer who imports it, in exchange for nothing a reader of this file\n // needs.\n const isControlled = open !== undefined;\n const isVisible = isControlled ? open : dropdownState.isVisible;\n\n const wasControlled = useRef(isControlled);\n if (wasControlled.current !== isControlled) {\n devWarn(\n 'dropdown-controlled-switch',\n 'Dropdown: `open` switched between controlled and uncontrolled. Pick one for the lifetime of the component - the dropdown keeps its own state as a fallback, so switching makes it jump to whatever that happens to be.',\n );\n wasControlled.current = isControlled;\n }\n\n /**\n * The single place the open state changes. Every route - trigger click,\n * click-outside, Escape, a group sibling, the `delay` timer - goes through\n * here, so a controlled consumer sees all of them and cannot desync.\n */\n const setOpen = useCallback(\n (next: boolean) => {\n setDropdownState((prev) => ({ ...prev, isVisible: next, isPositioned: false }));\n onOpenChange?.(next);\n },\n [onOpenChange],\n );\n\n // A controlled caller can flip `open` without going through `setOpen`, which\n // would leave `isPositioned` true from the previous open and paint the panel\n // at its old coordinates for a frame. Re-arm the positioning pass from the\n // transition itself.\n useEffect(() => {\n if (!isVisible) {\n setDropdownState((prev) => (prev.isPositioned ? { ...prev, isPositioned: false } : prev));\n }\n }, [isVisible]);\n\n // A pending `delay` timer outlives a controlled close otherwise, and reopens\n // the panel a moment after the consumer closed it.\n useEffect(() => {\n if (!isVisible && timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = undefined;\n }\n }, [isVisible]);\n const triggerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const animationFrameRef = useRef<number | undefined>(undefined);\n const isScrollingRef = useRef(false);\n\n // The element to actually measure/anchor against. When a consumer passes\n // `triggerRef`, that's an explicit statement of \"this is what I want the\n // dropdown positioned relative to\" - it must win over the internal wrapper\n // div, not just inform sizing. Consumers occasionally need `trigger` to be\n // a small anchor node (e.g. a 0-height span) sitting inside a larger,\n // variable-content field (chips, wrapped text); anchoring position to the\n // wrapper instead of that field silently drifts as soon as the field's\n // internal layout changes, since the wrapper only ever contains `trigger`\n // itself, never the field around it.\n const getTriggerElement = useCallback(\n (): HTMLElement | null => externalTriggerRef?.current ?? triggerRef.current,\n [externalTriggerRef],\n );\n\n const calculateDynamicSizing = useCallback(\n // Only the width is read, so the parameter is the narrowest shape that\n // satisfies it rather than a `DOMRect`. The caller used to fall back to\n // `new DOMRect()`, which is a browser-only global evaluated *during\n // render* - it was the first thing to throw when an open dropdown was\n // server-rendered, before `document.body` ever got a chance to.\n (triggerRect: { width: number } | null) => {\n // Shrink the panel to its content by default. This prevents the\n // position:fixed element from expanding to viewport width when children\n // use `width:100%` or `flex:1`. `minWidth` (set below) still wins when\n // the trigger is wider than the content, as CSS min-width overrides width.\n const styles: Record<string, string | number> = { width: 'max-content' };\n\n if (autoWidth && triggerRect && (externalTriggerRef?.current || triggerRef.current)) {\n const triggerWidth = triggerRect.width;\n styles.minWidth = triggerWidth;\n }\n\n if (minWidth !== undefined) {\n styles.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;\n }\n if (maxWidth !== undefined) {\n if (maxWidth === 'auto') {\n styles.maxWidth = 'none';\n } else {\n styles.maxWidth = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth;\n }\n }\n if (minHeight !== undefined) {\n styles.minHeight = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n }\n if (maxHeight !== undefined) {\n if (maxHeight === 'auto') {\n styles.maxHeight = 'none';\n } else {\n styles.maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n }\n\n const hasHeightConstraint = minHeight !== undefined || maxHeight !== undefined;\n if (hasHeightConstraint) {\n styles.overflowY = 'auto';\n } else {\n styles.overflowY = 'visible';\n }\n\n return styles;\n },\n [autoWidth, externalTriggerRef, minWidth, maxWidth, minHeight, maxHeight],\n );\n\n const calculateOptimalPosition = useCallback(\n (triggerRect: DOMRect, contentRect: DOMRect) => {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 8;\n\n let placement: 'top' | 'bottom' | 'left' | 'right' = preferredPlacement;\n let top = 0;\n let left = 0;\n\n // Helpers for cross-axis alignment\n const alignedLeft = (() => {\n switch (align) {\n case 'end':\n return triggerRect.right - contentRect.width;\n case 'center':\n return triggerRect.left + (triggerRect.width - contentRect.width) / 2;\n default:\n return triggerRect.left; // \"start\"\n }\n })();\n const alignedTop = (() => {\n switch (align) {\n case 'end':\n return triggerRect.bottom - contentRect.height;\n case 'center':\n return triggerRect.top + (triggerRect.height - contentRect.height) / 2;\n default:\n return triggerRect.top; // \"start\"\n }\n })();\n\n switch (preferredPlacement) {\n case 'top':\n top = triggerRect.top - contentRect.height - gap;\n left = alignedLeft;\n break;\n case 'bottom':\n top = triggerRect.bottom + gap;\n left = alignedLeft;\n break;\n case 'left':\n top = alignedTop;\n left = triggerRect.left - contentRect.width - gap;\n break;\n case 'right':\n top = alignedTop;\n left = triggerRect.right + gap;\n break;\n }\n\n if (placement === 'top' && top < gap) {\n placement = 'bottom';\n top = triggerRect.bottom + gap;\n } else if (placement === 'bottom' && top + contentRect.height > viewportHeight - gap) {\n placement = 'top';\n top = triggerRect.top - contentRect.height - gap;\n } else if (placement === 'left' && left < gap) {\n placement = 'right';\n left = triggerRect.right + gap;\n } else if (placement === 'right' && left + contentRect.width > viewportWidth - gap) {\n placement = 'left';\n left = triggerRect.left - contentRect.width - gap;\n }\n\n // Always clamp to both viewport edges - not just the near one - regardless\n // of whether an explicit min/max size was passed. `autoWidth` consumers\n // (Combobox, Select, TagInput suggestions, Menu, ...) never set\n // minWidth/maxWidth, so gating this on those props left the far edge\n // (right/bottom) completely unclamped and let content overflow the\n // viewport whenever it rendered wider/taller than its trigger.\n top = Math.max(gap, Math.min(top, viewportHeight - contentRect.height - gap));\n\n left = Math.max(gap, Math.min(left, viewportWidth - contentRect.width - gap));\n\n return { top, left, placement };\n },\n [preferredPlacement, align],\n );\n\n const handleScroll = useCallback(() => {\n if (!isVisible || !dropdownState.isPositioned || isScrollingRef.current) return;\n\n isScrollingRef.current = true;\n\n animationFrameRef.current = requestAnimationFrame(() => {\n const triggerElement = getTriggerElement();\n if (triggerElement && contentRef.current) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n }));\n }\n\n isScrollingRef.current = false;\n });\n }, [isVisible, dropdownState.isPositioned, calculateOptimalPosition, getTriggerElement]);\n\n const handleTriggerClick = useCallback(() => {\n if (disabled) return;\n\n if (isVisible) {\n setOpen(false);\n } else {\n if (dropdownGroup) {\n const siblingDropdowns = document.querySelectorAll(\n `[data-dropdown-group=\"${dropdownGroup}\"][data-dropdown-content]`,\n );\n siblingDropdowns.forEach((dropdown) => {\n const dropdownElement = dropdown as HTMLElement;\n\n dropdownElement.dispatchEvent(new CustomEvent('closeSibling'));\n });\n }\n\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => setOpen(true), delay);\n } else {\n setOpen(true);\n }\n }\n }, [disabled, isVisible, delay, dropdownGroup, setOpen]);\n\n useEffect(() => {\n const handleCloseSibling = () => {\n if (isVisible) setOpen(false);\n };\n\n const currentContentRef = contentRef.current;\n if (currentContentRef) {\n currentContentRef.addEventListener('closeSibling', handleCloseSibling);\n }\n\n return () => {\n if (currentContentRef) {\n currentContentRef.removeEventListener('closeSibling', handleCloseSibling);\n }\n };\n }, [isVisible, setOpen]);\n\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!closeOnClickOutside || !isVisible) return;\n\n const target = event.target as Node;\n\n if (contentRef.current?.contains(target)) {\n return;\n }\n\n if (getTriggerElement()?.contains(target)) {\n return;\n }\n\n const allDropdowns = document.querySelectorAll('[data-dropdown-content]');\n for (const dropdown of allDropdowns) {\n if (dropdown === contentRef.current) continue;\n\n if (dropdown.contains(target)) {\n const clickedDropdownLevel = parseInt(\n dropdown.getAttribute('data-dropdown-level') || '0',\n );\n\n if (clickedDropdownLevel > actualLevel) {\n return;\n }\n }\n }\n\n setOpen(false);\n },\n [closeOnClickOutside, isVisible, actualLevel, getTriggerElement, setOpen],\n );\n\n const handleEscapeKey = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEscape && event.key === 'Escape' && isVisible) {\n setOpen(false);\n }\n },\n [closeOnEscape, isVisible, setOpen],\n );\n\n useEffect(() => {\n const triggerElement = getTriggerElement();\n if (isVisible && !dropdownState.isPositioned && contentRef.current && triggerElement) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n isPositioned: true,\n }));\n }\n }, [\n isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n // Load-bearing, not incidental. With `defaultOpen` the panel is \"visible\"\n // from the first render, but the portal is deferred one render for SSR\n // safety - so this effect's first run finds `contentRef.current` still\n // null, measures nothing, and without `isClient` in the deps it would never\n // run again. The panel then stays `visibility: hidden` forever: mounted,\n // unpositioned, invisible. Caught by `OpensOnMountWithDefaultOpen`.\n isClient,\n ]);\n\n useEffect(() => {\n const handleResize = () => {\n const triggerElement = getTriggerElement();\n if (isVisible && dropdownState.isPositioned && contentRef.current && triggerElement) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n }));\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [isVisible, dropdownState.isPositioned, calculateOptimalPosition, getTriggerElement]);\n\n useEffect(() => {\n if (isVisible) {\n // Capture phase on `document`, which is the only way to see scrolling in\n // an arbitrary ancestor: `scroll` does not bubble from an element, so the\n // previous listeners on `window` and `document.body` only ever fired for\n // the page itself. Any other scroll container - `PageLayout`'s\n // `&__content` is the layout's scrollport, so this is every dropdown\n // inside it - moved the trigger while the portaled, `position: fixed`\n // content stayed at its original viewport coordinates.\n document.addEventListener('scroll', handleScroll, { capture: true, passive: true });\n }\n\n return () => {\n document.removeEventListener('scroll', handleScroll, { capture: true });\n };\n }, [isVisible, handleScroll]);\n\n useEffect(() => {\n if (isVisible) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [isVisible, handleClickOutside, handleEscapeKey]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n };\n }, []);\n\n return (\n <>\n {/*\n A positioning and click-capturing wrapper, and nothing more - it\n deliberately carries no `role` and no `tabIndex`.\n\n It used to be `role=\"button\" tabIndex={-1}`, which was wrong in both\n directions at once. `tabIndex={-1}` with no key handler meant the\n wrapper was never keyboard-operable, so the button role it advertised\n could not be activated by anyone using a keyboard - it promised a\n control that did not exist. Meanwhile, because `trigger` is virtually\n always a real control (Select and Combobox pass an `<input>`, Menu and\n SplitButton a `<button>`, ...), the role wrapped an interactive element\n in another interactive element: invalid ARIA, flagged by axe as\n `nested-interactive`, and announced by screen readers as a button\n inside a button. One attribute did this across every component built\n on Dropdown - Select, Combobox, Menu, Popover, ContextMenu,\n ColorPicker and TagInput - 212 violations in a single axe run.\n\n Semantics belong to whatever is passed as `trigger`, which is the only\n element that can actually own them. A consumer passing a\n non-interactive node should pass a `<button>` instead; it was never\n keyboard-accessible under the old markup either.\n */}\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n className={`eidos-dropdown-trigger ${fullWidth ? fullWidthModifier('eidos-dropdown-trigger') : ''} ${triggerClassName}`}\n >\n {trigger}\n </div>\n {isClient &&\n isVisible &&\n createPortal(\n <div\n ref={contentRef}\n data-dropdown-content\n data-dropdown-level={actualLevel}\n data-dropdown-group={dropdownGroup || ''}\n className={`eidos-dropdown-content eidos-dropdown-content--${dropdownState.position.placement} ${isNested ? 'eidos-dropdown-content--nested' : ''} ${dropdownState.isPositioned ? 'eidos-dropdown-content--positioned' : ''} ${contentClassName || ''}`}\n style={{\n top: dropdownState.position.top,\n left: dropdownState.position.left,\n ...calculateDynamicSizing(getTriggerElement()?.getBoundingClientRect() ?? null),\n }}\n // No default role: see the `role` prop's note in `Dropdown.types`.\n // This was `role=\"menu\"` unconditionally, which made a menu out of\n // every `Select` listbox, date picker and toolbar panel in the\n // library.\n role={role}\n >\n {content}\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nexport const Dropdown: React.FC<DropdownProps> = (props) => {\n const context = useDropdownContext();\n const nextLevel = props.dropdownLevel !== undefined ? props.dropdownLevel : context.level + 1;\n\n return (\n <DropdownProvider level={nextLevel}>\n <DropdownInternal {...props} />\n </DropdownProvider>\n );\n};\n\nDropdown.displayName = 'Dropdown';\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk6LCYO2HGcjs = require('./chunk-6LCYO2HG.cjs');
3
+ var _chunkXZLSHEHEcjs = require('./chunk-XZLSHEHE.cjs');
4
4
 
5
5
 
6
- var _chunkOWWPHXAFcjs = require('./chunk-OWWPHXAF.cjs');
6
+ var _chunkDA375AI6cjs = require('./chunk-DA375AI6.cjs');
7
7
 
8
8
  // src/components/Pagination/Pagination.component.tsx
9
9
  var _react = require('react');
@@ -79,7 +79,7 @@ var Pagination = ({
79
79
  ].filter(Boolean).join(" ");
80
80
  const nav = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "nav", { "aria-label": "Pagination", className: "eidos-pagination-nav", children: [
81
81
  showFirstLast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
82
- _chunkOWWPHXAFcjs.Button,
82
+ _chunkDA375AI6cjs.Button,
83
83
  {
84
84
  variant: "text",
85
85
  size,
@@ -90,7 +90,7 @@ var Pagination = ({
90
90
  }
91
91
  ),
92
92
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
93
- _chunkOWWPHXAFcjs.Button,
93
+ _chunkDA375AI6cjs.Button,
94
94
  {
95
95
  variant: "text",
96
96
  size,
@@ -146,7 +146,7 @@ var Pagination = ({
146
146
  )
147
147
  ),
148
148
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
149
- _chunkOWWPHXAFcjs.Button,
149
+ _chunkDA375AI6cjs.Button,
150
150
  {
151
151
  variant: "text",
152
152
  size,
@@ -157,7 +157,7 @@ var Pagination = ({
157
157
  }
158
158
  ),
159
159
  showFirstLast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
160
- _chunkOWWPHXAFcjs.Button,
160
+ _chunkDA375AI6cjs.Button,
161
161
  {
162
162
  variant: "text",
163
163
  size,
@@ -185,7 +185,7 @@ var Pagination = ({
185
185
  hasPageSize && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-pagination-size", children: [
186
186
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { className: "eidos-pagination-size-label", htmlFor: pageSizeId, children: "Show:" }),
187
187
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
188
- _chunk6LCYO2HGcjs.Select,
188
+ _chunkXZLSHEHEcjs.Select,
189
189
  {
190
190
  value: String(pageSize),
191
191
  onChange: (val) => onPageSizeChange(Number(val)),
@@ -209,4 +209,4 @@ Pagination.displayName = "Pagination";
209
209
 
210
210
 
211
211
  exports.Pagination = Pagination;
212
- //# sourceMappingURL=chunk-N5ZWQJTM.cjs.map
212
+ //# sourceMappingURL=chunk-KREHT4AQ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-N5ZWQJTM.cjs","../src/components/Pagination/Pagination.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-N5ZWQJTM.cjs","sourcesContent":[null,"import React, { useState, useEffect, useId } from 'react';\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';\nimport { Button } from '../Button';\nimport { Select } from '../Select';\nimport type { PaginationProps } from './Pagination.types';\n\n// ── Ellipsis range helper ─────────────────────────────────────────────────────\n\nconst ELLIPSIS = 'ellipsis' as const;\ntype PageItem = number | typeof ELLIPSIS;\n\nfunction usePaginationRange(page: number, totalPages: number, siblingCount: number): PageItem[] {\n const totalShown = siblingCount * 2 + 5;\n\n if (totalPages <= totalShown) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSibling = Math.max(page - siblingCount, 1);\n const rightSibling = Math.min(page + siblingCount, totalPages);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < totalPages - 1;\n\n const items: PageItem[] = [1];\n\n if (showLeftEllipsis) {\n items.push(ELLIPSIS);\n } else {\n for (let i = 2; i < leftSibling; i++) items.push(i);\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) {\n if (i !== 1 && i !== totalPages) items.push(i);\n }\n\n if (showRightEllipsis) {\n items.push(ELLIPSIS);\n } else {\n for (let i = rightSibling + 1; i < totalPages; i++) items.push(i);\n }\n\n items.push(totalPages);\n\n return items;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport const Pagination: React.FC<PaginationProps> = ({\n page,\n totalPages,\n onChange,\n siblingCount = 1,\n showFirstLast = false,\n color = 'primary',\n size = 'sm',\n disabled = false,\n className = '',\n // Table-footer mode\n totalItems,\n pageSize,\n onPageSizeChange,\n pageSizeOptions = [10, 25, 50, 100],\n}) => {\n const pageSizeId = useId();\n const items = usePaginationRange(page, totalPages, siblingCount);\n\n // ── Active-page editable input ─────────────────────────────────────────────\n const [inputValue, setInputValue] = useState(String(page));\n useEffect(() => {\n setInputValue(String(page));\n }, [page]);\n\n const commitInput = (raw: string) => {\n const val = parseInt(raw, 10);\n if (!isNaN(val) && val >= 1 && val <= totalPages && val !== page) {\n onChange(val);\n } else {\n setInputValue(String(page)); // revert on invalid or same-page\n }\n };\n\n // ── Layout flags ───────────────────────────────────────────────────────────\n const hasResults = totalItems !== undefined && pageSize !== undefined;\n const hasPageSize = !!onPageSizeChange && pageSize !== undefined;\n const tableMode = hasResults || hasPageSize;\n\n const startItem = hasResults ? (totalItems === 0 ? 0 : (page - 1) * pageSize! + 1) : undefined;\n const endItem = hasResults ? Math.min(page * pageSize!, totalItems!) : undefined;\n\n const rootClasses = [\n 'eidos-pagination',\n `eidos-pagination--${size}`,\n tableMode && 'eidos-pagination--table',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // ── Navigation block ───────────────────────────────────────────────────────\n const nav = (\n <nav aria-label=\"Pagination\" className=\"eidos-pagination-nav\">\n {showFirstLast && (\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronsLeft}\n disabled={page === 1 || disabled}\n onClick={() => onChange(1)}\n aria-label=\"First page\"\n />\n )}\n\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronLeft}\n disabled={page === 1 || disabled}\n onClick={() => onChange(page - 1)}\n aria-label=\"Previous page\"\n />\n\n {items.map((item, i) =>\n item === ELLIPSIS ? (\n <span key={`ellipsis-${i}`} className=\"eidos-pagination-ellipsis\" aria-hidden=\"true\">\n …\n </span>\n ) : item === page ? (\n // Active page - styled as filled chip, editable via keyboard/click\n <input\n key=\"active-page\"\n type=\"text\"\n inputMode=\"numeric\"\n className={[\n 'eidos-pagination-page',\n 'eidos-pagination-page--active',\n `eidos-pagination-page--${color}`,\n ].join(' ')}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onFocus={(e) => e.target.select()}\n onBlur={() => commitInput(inputValue)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n commitInput(inputValue);\n e.currentTarget.blur();\n } else if (e.key === 'Escape') {\n setInputValue(String(page));\n e.currentTarget.blur();\n }\n }}\n aria-label={`Page ${page} of ${totalPages}, editable`}\n aria-current=\"page\"\n disabled={disabled}\n />\n ) : (\n <button\n key={item}\n type=\"button\"\n className=\"eidos-pagination-page\"\n onClick={() => onChange(item)}\n disabled={disabled}\n aria-label={`Page ${item}`}\n >\n {item}\n </button>\n ),\n )}\n\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronRight}\n disabled={page === totalPages || disabled}\n onClick={() => onChange(page + 1)}\n aria-label=\"Next page\"\n />\n\n {showFirstLast && (\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronsRight}\n disabled={page === totalPages || disabled}\n onClick={() => onChange(totalPages)}\n aria-label=\"Last page\"\n />\n )}\n </nav>\n );\n\n // ── Standalone mode ────────────────────────────────────────────────────────\n if (!tableMode) {\n return <div className={rootClasses}>{nav}</div>;\n }\n\n // ── Table-footer mode ──────────────────────────────────────────────────────\n return (\n <div className={rootClasses}>\n {hasResults && (\n <span className=\"eidos-pagination-info\">\n Showing {startItem}-{endItem} of {totalItems} results\n </span>\n )}\n\n <div className=\"eidos-pagination-controls\">\n {hasPageSize && (\n <div className=\"eidos-pagination-size\">\n <label className=\"eidos-pagination-size-label\" htmlFor={pageSizeId}>\n Show:\n </label>\n <Select\n value={String(pageSize)}\n onChange={(val) => onPageSizeChange(Number(val))}\n options={pageSizeOptions.map((n) => ({\n id: String(n),\n value: String(n),\n label: String(n),\n }))}\n clearable={false}\n disabled={disabled}\n // Sizes the whole field, chevron and padding included - wide\n // enough for a 3-digit page size. `'3ch'` used to work here only\n // because `Input.width` sized the inner <input> and let the\n // chrome overflow it; now that it sizes the field, 3ch left no\n // room for the value at all.\n // Associated with the visible \"Show:\" label above rather\n // than given an `aria-label`. The `<label>` was real but had no\n // `htmlFor`, so it named nothing; an `aria-label` would have\n // worked for axe while risking SC 2.5.3 Label in Name, since\n // the spoken name would no longer contain the visible text.\n inputProps={{ size: 'sm', width: 72, id: pageSizeId }}\n />\n </div>\n )}\n\n {totalPages > 1 && nav}\n </div>\n </div>\n );\n};\n\nPagination.displayName = 'Pagination';\n"]}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-KREHT4AQ.cjs","../src/components/Pagination/Pagination.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-KREHT4AQ.cjs","sourcesContent":[null,"import React, { useState, useEffect, useId } from 'react';\nimport { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from 'lucide-react';\nimport { Button } from '../Button';\nimport { Select } from '../Select';\nimport type { PaginationProps } from './Pagination.types';\n\n// ── Ellipsis range helper ─────────────────────────────────────────────────────\n\nconst ELLIPSIS = 'ellipsis' as const;\ntype PageItem = number | typeof ELLIPSIS;\n\nfunction usePaginationRange(page: number, totalPages: number, siblingCount: number): PageItem[] {\n const totalShown = siblingCount * 2 + 5;\n\n if (totalPages <= totalShown) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const leftSibling = Math.max(page - siblingCount, 1);\n const rightSibling = Math.min(page + siblingCount, totalPages);\n\n const showLeftEllipsis = leftSibling > 2;\n const showRightEllipsis = rightSibling < totalPages - 1;\n\n const items: PageItem[] = [1];\n\n if (showLeftEllipsis) {\n items.push(ELLIPSIS);\n } else {\n for (let i = 2; i < leftSibling; i++) items.push(i);\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) {\n if (i !== 1 && i !== totalPages) items.push(i);\n }\n\n if (showRightEllipsis) {\n items.push(ELLIPSIS);\n } else {\n for (let i = rightSibling + 1; i < totalPages; i++) items.push(i);\n }\n\n items.push(totalPages);\n\n return items;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport const Pagination: React.FC<PaginationProps> = ({\n page,\n totalPages,\n onChange,\n siblingCount = 1,\n showFirstLast = false,\n color = 'primary',\n size = 'sm',\n disabled = false,\n className = '',\n // Table-footer mode\n totalItems,\n pageSize,\n onPageSizeChange,\n pageSizeOptions = [10, 25, 50, 100],\n}) => {\n const pageSizeId = useId();\n const items = usePaginationRange(page, totalPages, siblingCount);\n\n // ── Active-page editable input ─────────────────────────────────────────────\n const [inputValue, setInputValue] = useState(String(page));\n useEffect(() => {\n setInputValue(String(page));\n }, [page]);\n\n const commitInput = (raw: string) => {\n const val = parseInt(raw, 10);\n if (!isNaN(val) && val >= 1 && val <= totalPages && val !== page) {\n onChange(val);\n } else {\n setInputValue(String(page)); // revert on invalid or same-page\n }\n };\n\n // ── Layout flags ───────────────────────────────────────────────────────────\n const hasResults = totalItems !== undefined && pageSize !== undefined;\n const hasPageSize = !!onPageSizeChange && pageSize !== undefined;\n const tableMode = hasResults || hasPageSize;\n\n const startItem = hasResults ? (totalItems === 0 ? 0 : (page - 1) * pageSize! + 1) : undefined;\n const endItem = hasResults ? Math.min(page * pageSize!, totalItems!) : undefined;\n\n const rootClasses = [\n 'eidos-pagination',\n `eidos-pagination--${size}`,\n tableMode && 'eidos-pagination--table',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // ── Navigation block ───────────────────────────────────────────────────────\n const nav = (\n <nav aria-label=\"Pagination\" className=\"eidos-pagination-nav\">\n {showFirstLast && (\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronsLeft}\n disabled={page === 1 || disabled}\n onClick={() => onChange(1)}\n aria-label=\"First page\"\n />\n )}\n\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronLeft}\n disabled={page === 1 || disabled}\n onClick={() => onChange(page - 1)}\n aria-label=\"Previous page\"\n />\n\n {items.map((item, i) =>\n item === ELLIPSIS ? (\n <span key={`ellipsis-${i}`} className=\"eidos-pagination-ellipsis\" aria-hidden=\"true\">\n …\n </span>\n ) : item === page ? (\n // Active page - styled as filled chip, editable via keyboard/click\n <input\n key=\"active-page\"\n type=\"text\"\n inputMode=\"numeric\"\n className={[\n 'eidos-pagination-page',\n 'eidos-pagination-page--active',\n `eidos-pagination-page--${color}`,\n ].join(' ')}\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onFocus={(e) => e.target.select()}\n onBlur={() => commitInput(inputValue)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n commitInput(inputValue);\n e.currentTarget.blur();\n } else if (e.key === 'Escape') {\n setInputValue(String(page));\n e.currentTarget.blur();\n }\n }}\n aria-label={`Page ${page} of ${totalPages}, editable`}\n aria-current=\"page\"\n disabled={disabled}\n />\n ) : (\n <button\n key={item}\n type=\"button\"\n className=\"eidos-pagination-page\"\n onClick={() => onChange(item)}\n disabled={disabled}\n aria-label={`Page ${item}`}\n >\n {item}\n </button>\n ),\n )}\n\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronRight}\n disabled={page === totalPages || disabled}\n onClick={() => onChange(page + 1)}\n aria-label=\"Next page\"\n />\n\n {showFirstLast && (\n <Button\n variant=\"text\"\n size={size}\n icon={ChevronsRight}\n disabled={page === totalPages || disabled}\n onClick={() => onChange(totalPages)}\n aria-label=\"Last page\"\n />\n )}\n </nav>\n );\n\n // ── Standalone mode ────────────────────────────────────────────────────────\n if (!tableMode) {\n return <div className={rootClasses}>{nav}</div>;\n }\n\n // ── Table-footer mode ──────────────────────────────────────────────────────\n return (\n <div className={rootClasses}>\n {hasResults && (\n <span className=\"eidos-pagination-info\">\n Showing {startItem}-{endItem} of {totalItems} results\n </span>\n )}\n\n <div className=\"eidos-pagination-controls\">\n {hasPageSize && (\n <div className=\"eidos-pagination-size\">\n <label className=\"eidos-pagination-size-label\" htmlFor={pageSizeId}>\n Show:\n </label>\n <Select\n value={String(pageSize)}\n onChange={(val) => onPageSizeChange(Number(val))}\n options={pageSizeOptions.map((n) => ({\n id: String(n),\n value: String(n),\n label: String(n),\n }))}\n clearable={false}\n disabled={disabled}\n // Sizes the whole field, chevron and padding included - wide\n // enough for a 3-digit page size. `'3ch'` used to work here only\n // because `Input.width` sized the inner <input> and let the\n // chrome overflow it; now that it sizes the field, 3ch left no\n // room for the value at all.\n // Associated with the visible \"Show:\" label above rather\n // than given an `aria-label`. The `<label>` was real but had no\n // `htmlFor`, so it named nothing; an `aria-label` would have\n // worked for axe while risking SC 2.5.3 Label in Name, since\n // the spoken name would no longer contain the visible text.\n inputProps={{ size: 'sm', width: 72, id: pageSizeId }}\n />\n </div>\n )}\n\n {totalPages > 1 && nav}\n </div>\n </div>\n );\n};\n\nPagination.displayName = 'Pagination';\n"]}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Tooltip
3
- } from "./chunk-XO7WTE6O.js";
3
+ } from "./chunk-JNY7TUDS.js";
4
4
  import {
5
5
  devWarn,
6
6
  renderIcon
7
- } from "./chunk-WT4WBHBR.js";
7
+ } from "./chunk-RHHZRTWM.js";
8
8
 
9
9
  // src/components/SegmentedControl/SegmentedControl.component.tsx
10
10
  import React, { useEffect, useLayoutEffect, useRef, useState } from "react";
@@ -191,4 +191,4 @@ var SegmentedControl = ({
191
191
  export {
192
192
  SegmentedControl
193
193
  };
194
- //# sourceMappingURL=chunk-SCLFJHN2.js.map
194
+ //# sourceMappingURL=chunk-L65MHFMD.js.map
@@ -51,13 +51,22 @@ var AccordionItem = ({
51
51
  }) => {
52
52
  const { openValues, toggle, size, color } = useAccordion();
53
53
  const isOpen = openValues.includes(value);
54
- const contentRef = useRef(null);
54
+ const innerRef = useRef(null);
55
55
  const triggerId = useId();
56
56
  const panelId = useId();
57
57
  const [maxHeight, setMaxHeight] = useState(0);
58
58
  useEffect(() => {
59
- if (!contentRef.current) return;
60
- setMaxHeight(isOpen ? contentRef.current.scrollHeight : 0);
59
+ if (!isOpen) {
60
+ setMaxHeight(0);
61
+ return;
62
+ }
63
+ const node = innerRef.current;
64
+ if (!node) return;
65
+ const update = () => setMaxHeight(node.scrollHeight);
66
+ update();
67
+ const observer = new ResizeObserver(update);
68
+ observer.observe(node);
69
+ return () => observer.disconnect();
61
70
  }, [isOpen]);
62
71
  const itemClasses = [
63
72
  "eidos-accordion-item",
@@ -95,10 +104,9 @@ var AccordionItem = ({
95
104
  id: panelId,
96
105
  role: "region",
97
106
  "aria-labelledby": triggerId,
98
- ref: contentRef,
99
107
  className: "eidos-accordion-content-wrapper",
100
108
  style: { maxHeight: `${maxHeight}px` },
101
- children: /* @__PURE__ */ jsx("div", { className: "eidos-accordion-content", children })
109
+ children: /* @__PURE__ */ jsx("div", { ref: innerRef, className: "eidos-accordion-content", children })
102
110
  }
103
111
  )
104
112
  ] });
@@ -109,4 +117,4 @@ export {
109
117
  Accordion,
110
118
  AccordionItem
111
119
  };
112
- //# sourceMappingURL=chunk-CMOBXLNA.js.map
120
+ //# sourceMappingURL=chunk-LNDFVC2Q.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Accordion/Accordion.component.tsx"],"sourcesContent":["import React, { useState, useRef, useContext, useId, useEffect, useCallback } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { AccordionProps, AccordionItemProps, AccordionContextValue } from './Accordion.types';\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/** Normalise a controlled/default value (string | string[] | undefined) to string[]. */\nconst toArray = (v: string | string[] | undefined): string[] =>\n v === undefined ? [] : Array.isArray(v) ? v : [v];\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nconst useAccordion = (): AccordionContextValue => {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('AccordionItem must be used inside <Accordion>');\n return ctx;\n};\n\n// ============================================================================\n// ACCORDION - root container; owns open state; provides context\n// ============================================================================\n\nexport const Accordion: React.FC<AccordionProps> = ({\n multiple = false,\n value,\n defaultValue,\n onChange,\n variant = 'default',\n size = 'md',\n color = 'primary',\n className = '',\n children,\n}) => {\n const isControlled = value !== undefined;\n\n const [localOpen, setLocalOpen] = useState<string[]>(() => toArray(defaultValue));\n const openValues = isControlled ? toArray(value) : localOpen;\n\n const toggle = useCallback(\n (itemValue: string) => {\n const isOpen = openValues.includes(itemValue);\n let next: string[];\n\n if (multiple) {\n next = isOpen ? openValues.filter((v) => v !== itemValue) : [...openValues, itemValue];\n } else {\n next = isOpen ? [] : [itemValue];\n }\n\n if (!isControlled) setLocalOpen(next);\n onChange?.(multiple ? next : (next[0] ?? ''));\n },\n [openValues, multiple, isControlled, onChange],\n );\n\n const rootClasses = ['eidos-accordion', `eidos-accordion--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <AccordionContext.Provider value={{ openValues, toggle, variant, size, color }}>\n <div className={rootClasses}>{children}</div>\n </AccordionContext.Provider>\n );\n};\n\nAccordion.displayName = 'Accordion';\n\n// ============================================================================\n// ACCORDION ITEM - individual item; reads context; renders trigger + animated panel\n// ============================================================================\n\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n value,\n label,\n icon,\n disabled = false,\n className = '',\n children,\n}) => {\n const { openValues, toggle, size, color } = useAccordion();\n const isOpen = openValues.includes(value);\n // The unclipped content itself, not the wrapper around it. The wrapper's own\n // height is what `maxHeight` below sets, so observing it would feed the\n // observer its own output; the inner node is always laid out at its natural\n // height regardless of the wrapper's clipping, so its size genuinely changes\n // when its content does.\n const innerRef = useRef<HTMLDivElement>(null);\n const triggerId = useId();\n const panelId = useId();\n\n // Drives the max-height CSS transition.\n // On open: set to the content's height so the wrapper animates to it.\n // On close: set to 0 so the wrapper animates shut.\n // The CSS transition on .eidos-accordion-content-wrapper handles the animation.\n const [maxHeight, setMaxHeight] = useState<number>(0);\n\n // `max-height` is a fixed px value, so it goes stale the moment the panel's\n // content reflows after opening - a narrower viewport rewrapping prose, a\n // font finishing loading, an image arriving, a nested collapsible opening.\n // The wrapper is `overflow: hidden` with no scrollbar, so a stale value\n // silently clips the tail of the panel with nothing on screen to suggest\n // content is missing. Tracking the content for as long as the panel stays\n // open is therefore part of the technique, not a refinement of it - which is\n // what `DataGrid`'s row expansion (`useExpandAnimation`) already does.\n useEffect(() => {\n if (!isOpen) {\n setMaxHeight(0);\n return;\n }\n\n const node = innerRef.current;\n if (!node) return;\n\n const update = () => setMaxHeight(node.scrollHeight);\n update();\n\n const observer = new ResizeObserver(update);\n observer.observe(node);\n return () => observer.disconnect();\n }, [isOpen]);\n\n const itemClasses = [\n 'eidos-accordion-item',\n isOpen && 'eidos-accordion-item--open',\n disabled && 'eidos-accordion-item--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const triggerClasses = [\n 'eidos-accordion-trigger',\n `eidos-accordion-trigger--${size}`,\n isOpen && 'eidos-accordion-trigger--open',\n isOpen && `eidos-accordion-trigger--${color}`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={itemClasses}>\n <button\n id={triggerId}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && toggle(value)}\n className={triggerClasses}\n >\n {icon && <span className=\"eidos-accordion-trigger-icon\">{icon}</span>}\n <span className=\"eidos-accordion-trigger-label\">{label}</span>\n <ChevronDown className=\"eidos-accordion-chevron\" aria-hidden=\"true\" />\n </button>\n\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"eidos-accordion-content-wrapper\"\n style={{ maxHeight: `${maxHeight}px` }}\n >\n <div ref={innerRef} className=\"eidos-accordion-content\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nAccordionItem.displayName = 'AccordionItem';\n"],"mappings":"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","names":[]}
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkG74DHVHVcjs = require('./chunk-G74DHVHV.cjs');
3
+ var _chunkJ76JHN7Jcjs = require('./chunk-J76JHN7J.cjs');
4
4
 
5
5
 
6
- var _chunkP7J6WZTOcjs = require('./chunk-P7J6WZTO.cjs');
6
+ var _chunkKIZVY57Hcjs = require('./chunk-KIZVY57H.cjs');
7
7
 
8
8
 
9
- var _chunkVHSTB7GBcjs = require('./chunk-VHSTB7GB.cjs');
9
+ var _chunk35LGEPLPcjs = require('./chunk-35LGEPLP.cjs');
10
10
 
11
11
  // src/components/SplitButton/SplitButton.component.tsx
12
12
  var _react = require('react');
@@ -48,6 +48,7 @@ var SplitButton = ({
48
48
  className: `${baseClass} eidos-split-button__chevron`,
49
49
  disabled: disabledOrLoading,
50
50
  "aria-label": "More options",
51
+ "aria-haspopup": "menu",
51
52
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronDown, { className: "eidos-split-button__chevron-icon", "aria-hidden": "true" })
52
53
  }
53
54
  );
@@ -71,16 +72,16 @@ var SplitButton = ({
71
72
  disabled: disabledOrLoading,
72
73
  onClick,
73
74
  children: [
74
- loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { className: "eidos-split-button__spinner", "aria-hidden": "true" }) : preIcon && _chunkVHSTB7GBcjs.renderIcon.call(void 0, preIcon, "eidos-split-button__pre-icon"),
75
+ loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { className: "eidos-split-button__spinner", "aria-hidden": "true" }) : preIcon && _chunk35LGEPLPcjs.renderIcon.call(void 0, preIcon, "eidos-split-button__pre-icon"),
75
76
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-split-button__label", children: label })
76
77
  ]
77
78
  }
78
79
  ),
79
80
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
80
- _chunkP7J6WZTOcjs.Dropdown,
81
+ _chunkKIZVY57Hcjs.Dropdown,
81
82
  {
82
83
  trigger: chevronTrigger,
83
- content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkG74DHVHVcjs.MenuPanel, { items: menuItems, onItemClick: handleItemClick }),
84
+ content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJ76JHN7Jcjs.MenuPanel, { items: menuItems, onItemClick: handleItemClick }),
84
85
  placement: "bottom",
85
86
  align: "end",
86
87
  disabled: disabledOrLoading
@@ -94,4 +95,4 @@ var SplitButton = ({
94
95
 
95
96
 
96
97
  exports.SplitButton = SplitButton;
97
- //# sourceMappingURL=chunk-N77VOYCK.cjs.map
98
+ //# sourceMappingURL=chunk-LQXFXXMJ.cjs.map