eidos-ui 3.2.1 → 3.4.0

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 (332) hide show
  1. package/README.md +17 -5
  2. package/dist/{Input.types-XrJTI0JC.d.ts → Input.types-CSDMaZNe.d.ts} +10 -0
  3. package/dist/{Input.types-DFZNyJGF.d.cts → Input.types-D7-sWq-q.d.cts} +10 -0
  4. package/dist/{Select.types-CAkT2ACt.d.cts → Select.types-2p-mpaBL.d.cts} +1 -1
  5. package/dist/{Select.types-B4kDpkGB.d.ts → Select.types-BqaD7bmB.d.ts} +1 -1
  6. package/dist/alert/index.cjs +5 -5
  7. package/dist/alert/index.js +4 -4
  8. package/dist/button/index.cjs +4 -4
  9. package/dist/button/index.js +3 -3
  10. package/dist/checkbox/index.cjs +2 -2
  11. package/dist/checkbox/index.js +1 -1
  12. package/dist/chip/index.cjs +4 -4
  13. package/dist/chip/index.js +3 -3
  14. package/dist/{chunk-RYOQYYDO.js → chunk-22EKNTWJ.js} +9 -5
  15. package/dist/chunk-22EKNTWJ.js.map +1 -0
  16. package/dist/{chunk-3E7TKBQI.cjs → chunk-27UANGPW.cjs} +14 -6
  17. package/dist/chunk-27UANGPW.cjs.map +1 -0
  18. package/dist/{chunk-CJGFRPAS.cjs → chunk-3QQKWXMV.cjs} +4 -4
  19. package/dist/chunk-3QQKWXMV.cjs.map +1 -0
  20. package/dist/{chunk-R3WPVTGY.cjs → chunk-3S33BIN2.cjs} +23 -21
  21. package/dist/chunk-3S33BIN2.cjs.map +1 -0
  22. package/dist/{chunk-ZPDETHQ7.js → chunk-3WV6RTXX.js} +3 -3
  23. package/dist/{chunk-ZPDETHQ7.js.map → chunk-3WV6RTXX.js.map} +1 -1
  24. package/dist/chunk-44T4HMFU.js +88 -0
  25. package/dist/chunk-44T4HMFU.js.map +1 -0
  26. package/dist/{chunk-3EPND5M2.cjs → chunk-4LET2PEX.cjs} +12 -12
  27. package/dist/chunk-4LET2PEX.cjs.map +1 -0
  28. package/dist/{chunk-VRQBDTLT.cjs → chunk-5E4DYTZ3.cjs} +48 -37
  29. package/dist/chunk-5E4DYTZ3.cjs.map +1 -0
  30. package/dist/{chunk-EL3YXTOW.cjs → chunk-5V7DXZWT.cjs} +79 -76
  31. package/dist/chunk-5V7DXZWT.cjs.map +1 -0
  32. package/dist/{chunk-2R77XZEP.js → chunk-67EXHO4T.js} +2 -4
  33. package/dist/{chunk-2R77XZEP.js.map → chunk-67EXHO4T.js.map} +1 -1
  34. package/dist/{chunk-HI6WCX4T.cjs → chunk-6LCYO2HG.cjs} +10 -9
  35. package/dist/chunk-6LCYO2HG.cjs.map +1 -0
  36. package/dist/{chunk-ZNWIHUHZ.cjs → chunk-7KVXXHFX.cjs} +9 -3
  37. package/dist/chunk-7KVXXHFX.cjs.map +1 -0
  38. package/dist/{chunk-55J4LEKT.cjs → chunk-AHVDTWVM.cjs} +11 -8
  39. package/dist/chunk-AHVDTWVM.cjs.map +1 -0
  40. package/dist/{chunk-OAPOGYA5.cjs → chunk-AXPEJ5IG.cjs} +7 -4
  41. package/dist/chunk-AXPEJ5IG.cjs.map +1 -0
  42. package/dist/{chunk-BHVHM66Z.js → chunk-BBU7QG7L.js} +4 -4
  43. package/dist/{chunk-T2KB3DJJ.js → chunk-BGBAZMFE.js} +9 -3
  44. package/dist/chunk-BGBAZMFE.js.map +1 -0
  45. package/dist/{chunk-EH42ND5Q.cjs → chunk-BIANFFJL.cjs} +5 -5
  46. package/dist/{chunk-EH42ND5Q.cjs.map → chunk-BIANFFJL.cjs.map} +1 -1
  47. package/dist/{chunk-O2AACVSF.js → chunk-BO4LTIJI.js} +3 -3
  48. package/dist/{chunk-ZGT4LT5Y.cjs → chunk-CBT3TTQR.cjs} +36 -36
  49. package/dist/{chunk-ZGT4LT5Y.cjs.map → chunk-CBT3TTQR.cjs.map} +1 -1
  50. package/dist/{chunk-JRLUZDKA.js → chunk-CEC3GO4R.js} +20 -7
  51. package/dist/chunk-CEC3GO4R.js.map +1 -0
  52. package/dist/{chunk-KNQ6NN6L.js → chunk-CP335H4Q.js} +4 -4
  53. package/dist/{chunk-H6CWTMAH.js → chunk-DGXHR6FV.js} +5 -2
  54. package/dist/chunk-DGXHR6FV.js.map +1 -0
  55. package/dist/{chunk-FALDCW2E.js → chunk-DMOZURHV.js} +2 -2
  56. package/dist/{chunk-NWJ6NETE.js → chunk-EWTMX4DK.js} +8 -8
  57. package/dist/{chunk-3RLGH45H.js → chunk-FDMYDIGI.js} +8 -6
  58. package/dist/chunk-FDMYDIGI.js.map +1 -0
  59. package/dist/{chunk-LVHZBCTA.cjs → chunk-FODRHCRP.cjs} +5 -4
  60. package/dist/chunk-FODRHCRP.cjs.map +1 -0
  61. package/dist/{chunk-QIITXVRG.js → chunk-FPLX5FIK.js} +4 -4
  62. package/dist/{chunk-NEYLNRVG.cjs → chunk-FXMRDNR6.cjs} +21 -16
  63. package/dist/chunk-FXMRDNR6.cjs.map +1 -0
  64. package/dist/{chunk-D2SKXRKP.cjs → chunk-G74DHVHV.cjs} +9 -9
  65. package/dist/{chunk-D2SKXRKP.cjs.map → chunk-G74DHVHV.cjs.map} +1 -1
  66. package/dist/{chunk-O3LG7B2J.cjs → chunk-GMDVW76A.cjs} +13 -5
  67. package/dist/chunk-GMDVW76A.cjs.map +1 -0
  68. package/dist/{chunk-NQ4L6PYW.js → chunk-GOF6A4M4.js} +2 -2
  69. package/dist/{chunk-NQ4L6PYW.js.map → chunk-GOF6A4M4.js.map} +1 -1
  70. package/dist/{chunk-QUDVJUZU.js → chunk-GPK2THIG.js} +7 -6
  71. package/dist/chunk-GPK2THIG.js.map +1 -0
  72. package/dist/{chunk-CJVC3A4O.js → chunk-H2RS6Z6Q.js} +44 -27
  73. package/dist/chunk-H2RS6Z6Q.js.map +1 -0
  74. package/dist/{chunk-UOOGS6N7.cjs → chunk-H5D3ZFBM.cjs} +68 -61
  75. package/dist/chunk-H5D3ZFBM.cjs.map +1 -0
  76. package/dist/{chunk-IYWAZEFI.cjs → chunk-IGFR5TES.cjs} +3 -2
  77. package/dist/chunk-IGFR5TES.cjs.map +1 -0
  78. package/dist/{chunk-PR7CVQ4R.js → chunk-IXVM2XNS.js} +7 -6
  79. package/dist/chunk-IXVM2XNS.js.map +1 -0
  80. package/dist/{chunk-Q6ICDKQZ.cjs → chunk-JKBBHAIC.cjs} +21 -20
  81. package/dist/chunk-JKBBHAIC.cjs.map +1 -0
  82. package/dist/{chunk-QQIALSTX.cjs → chunk-KPMIIGHH.cjs} +27 -17
  83. package/dist/chunk-KPMIIGHH.cjs.map +1 -0
  84. package/dist/{chunk-EBSKRZXI.cjs → chunk-KWDOOMHR.cjs} +7 -7
  85. package/dist/{chunk-EBSKRZXI.cjs.map → chunk-KWDOOMHR.cjs.map} +1 -1
  86. package/dist/{chunk-BC5I2MYB.js → chunk-LH5A2SIX.js} +78 -75
  87. package/dist/{chunk-BC5I2MYB.js.map → chunk-LH5A2SIX.js.map} +1 -1
  88. package/dist/{chunk-2WP27QAN.js → chunk-LIKSLFX6.js} +20 -9
  89. package/dist/chunk-LIKSLFX6.js.map +1 -0
  90. package/dist/{chunk-Z5U4NJTW.cjs → chunk-MLUHM3VG.cjs} +48 -19
  91. package/dist/chunk-MLUHM3VG.cjs.map +1 -0
  92. package/dist/{chunk-M7PF4FKQ.js → chunk-MP7LN5CW.js} +6 -3
  93. package/dist/chunk-MP7LN5CW.js.map +1 -0
  94. package/dist/{chunk-4MZ7HEQC.cjs → chunk-MW4YZVP5.cjs} +96 -97
  95. package/dist/chunk-MW4YZVP5.cjs.map +1 -0
  96. package/dist/{chunk-WFEORBLC.cjs → chunk-N5ZWQJTM.cjs} +11 -10
  97. package/dist/chunk-N5ZWQJTM.cjs.map +1 -0
  98. package/dist/{chunk-OMLXP2CK.cjs → chunk-N77VOYCK.cjs} +7 -7
  99. package/dist/{chunk-OMLXP2CK.cjs.map → chunk-N77VOYCK.cjs.map} +1 -1
  100. package/dist/{chunk-OAK7HFOJ.js → chunk-NACA72XI.js} +21 -16
  101. package/dist/chunk-NACA72XI.js.map +1 -0
  102. package/dist/{chunk-TEVZHN5I.cjs → chunk-NCZUQFKL.cjs} +28 -15
  103. package/dist/chunk-NCZUQFKL.cjs.map +1 -0
  104. package/dist/{chunk-NZO2I5AL.cjs → chunk-NF55JG2V.cjs} +7 -7
  105. package/dist/{chunk-NZO2I5AL.cjs.map → chunk-NF55JG2V.cjs.map} +1 -1
  106. package/dist/{chunk-KBGFDHKD.cjs → chunk-O46UJUZM.cjs} +21 -19
  107. package/dist/chunk-O46UJUZM.cjs.map +1 -0
  108. package/dist/{chunk-25PSIDPC.js → chunk-OIXPYXR6.js} +79 -21
  109. package/dist/chunk-OIXPYXR6.js.map +1 -0
  110. package/dist/chunk-OWWPHXAF.cjs +88 -0
  111. package/dist/chunk-OWWPHXAF.cjs.map +1 -0
  112. package/dist/{chunk-65PC3YDT.cjs → chunk-OZQKWDFH.cjs} +7 -7
  113. package/dist/{chunk-65PC3YDT.cjs.map → chunk-OZQKWDFH.cjs.map} +1 -1
  114. package/dist/{chunk-75VXB3H2.cjs → chunk-P7J6WZTO.cjs} +3 -5
  115. package/dist/chunk-P7J6WZTO.cjs.map +1 -0
  116. package/dist/{chunk-KQJ3IAFT.js → chunk-PG2EII6U.js} +2 -2
  117. package/dist/{chunk-6A2ZKVST.cjs → chunk-RUDXHT76.cjs} +47 -30
  118. package/dist/chunk-RUDXHT76.cjs.map +1 -0
  119. package/dist/{chunk-S4S4LB63.js → chunk-SCLFJHN2.js} +11 -3
  120. package/dist/chunk-SCLFJHN2.js.map +1 -0
  121. package/dist/{chunk-WKDT2XFQ.js → chunk-SFRILDXY.js} +4 -4
  122. package/dist/{chunk-J5RMLZ4P.cjs → chunk-SKBKTNEQ.cjs} +80 -22
  123. package/dist/chunk-SKBKTNEQ.cjs.map +1 -0
  124. package/dist/{chunk-75TDY7XF.cjs → chunk-SKLMBE3Z.cjs} +7 -7
  125. package/dist/{chunk-75TDY7XF.cjs.map → chunk-SKLMBE3Z.cjs.map} +1 -1
  126. package/dist/{chunk-PY2376XI.js → chunk-SVCWSW2F.js} +8 -8
  127. package/dist/chunk-SVCWSW2F.js.map +1 -0
  128. package/dist/{chunk-2RXQMQYW.js → chunk-SXL4DMZ7.js} +27 -17
  129. package/dist/{chunk-2RXQMQYW.js.map → chunk-SXL4DMZ7.js.map} +1 -1
  130. package/dist/{chunk-X3U7SDOZ.js → chunk-TLECMA3B.js} +5 -4
  131. package/dist/{chunk-X3U7SDOZ.js.map → chunk-TLECMA3B.js.map} +1 -1
  132. package/dist/{chunk-FXZJL2AM.cjs → chunk-TWXZKUCG.cjs} +9 -5
  133. package/dist/chunk-TWXZKUCG.cjs.map +1 -0
  134. package/dist/{chunk-YDPEHUMH.js → chunk-TYGVKSL6.js} +4 -3
  135. package/dist/chunk-TYGVKSL6.js.map +1 -0
  136. package/dist/{chunk-I3CSPYHG.cjs → chunk-TYSNOPMQ.cjs} +3 -3
  137. package/dist/{chunk-I3CSPYHG.cjs.map → chunk-TYSNOPMQ.cjs.map} +1 -1
  138. package/dist/{chunk-ZZSPQFMX.js → chunk-U233KQZX.js} +2 -1
  139. package/dist/{chunk-ZZSPQFMX.js.map → chunk-U233KQZX.js.map} +1 -1
  140. package/dist/{chunk-5HUZYY54.js → chunk-UDRAM6JU.js} +13 -5
  141. package/dist/chunk-UDRAM6JU.js.map +1 -0
  142. package/dist/{chunk-TJC7UELT.js → chunk-UGTKZ7HP.js} +30 -23
  143. package/dist/chunk-UGTKZ7HP.js.map +1 -0
  144. package/dist/{chunk-FKXKBJUI.cjs → chunk-VHO6JPRR.cjs} +2 -1
  145. package/dist/chunk-VHO6JPRR.cjs.map +1 -0
  146. package/dist/chunk-VHSTB7GB.cjs +123 -0
  147. package/dist/chunk-VHSTB7GB.cjs.map +1 -0
  148. package/dist/{chunk-ATL7325T.js → chunk-VRNCXYEP.js} +4 -4
  149. package/dist/{chunk-4ZWAJTNH.js → chunk-WGCGSM5P.js} +96 -97
  150. package/dist/chunk-WGCGSM5P.js.map +1 -0
  151. package/dist/chunk-WT4WBHBR.js +123 -0
  152. package/dist/chunk-WT4WBHBR.js.map +1 -0
  153. package/dist/{chunk-L23WWO3D.js → chunk-X6UKU3C3.js} +2 -2
  154. package/dist/{chunk-5WH3JMR5.js → chunk-XK5USBHB.js} +7 -4
  155. package/dist/chunk-XK5USBHB.js.map +1 -0
  156. package/dist/{chunk-ND526PMG.cjs → chunk-XMXL6NVJ.cjs} +11 -11
  157. package/dist/{chunk-ND526PMG.cjs.map → chunk-XMXL6NVJ.cjs.map} +1 -1
  158. package/dist/{chunk-YV57RSPD.js → chunk-XO7WTE6O.js} +47 -18
  159. package/dist/chunk-XO7WTE6O.js.map +1 -0
  160. package/dist/{chunk-3CXULV4G.cjs → chunk-XRVRGRC3.cjs} +2 -2
  161. package/dist/{chunk-3CXULV4G.cjs.map → chunk-XRVRGRC3.cjs.map} +1 -1
  162. package/dist/{chunk-O3I3RBZJ.js → chunk-Y55M34RQ.js} +3 -2
  163. package/dist/chunk-Y55M34RQ.js.map +1 -0
  164. package/dist/{chunk-QZX3A4FX.js → chunk-Y7VSWZWM.js} +7 -5
  165. package/dist/chunk-Y7VSWZWM.js.map +1 -0
  166. package/dist/{chunk-2QEKSRVX.js → chunk-YIBPOLNN.js} +4 -4
  167. package/dist/{chunk-IJ4DXG7D.cjs → chunk-YJNQLH2L.cjs} +5 -2
  168. package/dist/chunk-YJNQLH2L.cjs.map +1 -0
  169. package/dist/{chunk-6CSUUQ5M.cjs → chunk-YUH56CJI.cjs} +6 -6
  170. package/dist/{chunk-6CSUUQ5M.cjs.map → chunk-YUH56CJI.cjs.map} +1 -1
  171. package/dist/color-picker/index.cjs +4 -4
  172. package/dist/color-picker/index.d.cts +8 -0
  173. package/dist/color-picker/index.d.ts +8 -0
  174. package/dist/color-picker/index.js +3 -3
  175. package/dist/combobox/index.cjs +6 -6
  176. package/dist/combobox/index.js +5 -5
  177. package/dist/command-palette/index.cjs +3 -2
  178. package/dist/command-palette/index.cjs.map +1 -1
  179. package/dist/command-palette/index.js +2 -1
  180. package/dist/context-menu/index.cjs +6 -6
  181. package/dist/context-menu/index.js +5 -5
  182. package/dist/conversation/index.cjs +9 -9
  183. package/dist/conversation/index.js +8 -8
  184. package/dist/data-grid/index.cjs +16 -16
  185. package/dist/data-grid/index.d.cts +2 -2
  186. package/dist/data-grid/index.d.ts +2 -2
  187. package/dist/data-grid/index.js +15 -15
  188. package/dist/date-picker/index.cjs +8 -8
  189. package/dist/date-picker/index.d.cts +1 -1
  190. package/dist/date-picker/index.d.ts +1 -1
  191. package/dist/date-picker/index.js +7 -7
  192. package/dist/drawer/index.cjs +5 -5
  193. package/dist/drawer/index.js +4 -4
  194. package/dist/dropdown/index.cjs +3 -3
  195. package/dist/dropdown/index.js +2 -2
  196. package/dist/file-upload/index.cjs +2 -2
  197. package/dist/file-upload/index.js +1 -1
  198. package/dist/header/index.cjs +6 -6
  199. package/dist/header/index.js +5 -5
  200. package/dist/index.cjs +43 -43
  201. package/dist/index.css +205 -148
  202. package/dist/index.d.cts +2 -2
  203. package/dist/index.d.ts +2 -2
  204. package/dist/index.js +42 -42
  205. package/dist/inline-edit/index.cjs +5 -5
  206. package/dist/inline-edit/index.js +4 -4
  207. package/dist/input/index.cjs +4 -4
  208. package/dist/input/index.d.cts +2 -2
  209. package/dist/input/index.d.ts +2 -2
  210. package/dist/input/index.js +3 -3
  211. package/dist/menu/index.cjs +5 -5
  212. package/dist/menu/index.js +4 -4
  213. package/dist/modal/index.cjs +5 -5
  214. package/dist/modal/index.js +4 -4
  215. package/dist/navigation/index.cjs +5 -5
  216. package/dist/navigation/index.js +4 -4
  217. package/dist/number-input/index.cjs +3 -3
  218. package/dist/number-input/index.js +2 -2
  219. package/dist/o-t-p-input/index.cjs +2 -2
  220. package/dist/o-t-p-input/index.js +1 -1
  221. package/dist/page-layout/index.cjs +12 -12
  222. package/dist/page-layout/index.js +11 -11
  223. package/dist/pagination/index.cjs +8 -8
  224. package/dist/pagination/index.js +7 -7
  225. package/dist/popover/index.cjs +3 -2
  226. package/dist/popover/index.cjs.map +1 -1
  227. package/dist/popover/index.js +2 -1
  228. package/dist/radio/index.cjs +2 -2
  229. package/dist/radio/index.js +1 -1
  230. package/dist/segmented-control/index.cjs +4 -4
  231. package/dist/segmented-control/index.js +3 -3
  232. package/dist/select/index.cjs +6 -6
  233. package/dist/select/index.d.cts +3 -3
  234. package/dist/select/index.d.ts +3 -3
  235. package/dist/select/index.js +5 -5
  236. package/dist/skeleton/index.cjs +2 -2
  237. package/dist/skeleton/index.js +1 -1
  238. package/dist/snackbar/index.cjs +5 -5
  239. package/dist/snackbar/index.d.cts +4 -0
  240. package/dist/snackbar/index.d.ts +4 -0
  241. package/dist/snackbar/index.js +4 -4
  242. package/dist/split-button/index.cjs +6 -6
  243. package/dist/split-button/index.js +5 -5
  244. package/dist/table/index.cjs +14 -14
  245. package/dist/table/index.js +13 -13
  246. package/dist/tabs/index.cjs +3 -3
  247. package/dist/tabs/index.js +2 -2
  248. package/dist/tag-input/index.cjs +6 -6
  249. package/dist/tag-input/index.js +5 -5
  250. package/dist/textarea/index.cjs +4 -4
  251. package/dist/textarea/index.js +3 -3
  252. package/dist/theme-editor/index.cjs +11 -11
  253. package/dist/theme-editor/index.js +10 -10
  254. package/dist/theme-provider/index.cjs +3 -3
  255. package/dist/theme-provider/index.js +2 -2
  256. package/dist/toolbar/index.cjs +8 -8
  257. package/dist/toolbar/index.js +7 -7
  258. package/dist/tooltip/index.cjs +3 -2
  259. package/dist/tooltip/index.cjs.map +1 -1
  260. package/dist/tooltip/index.js +2 -1
  261. package/dist/virtual-list/index.cjs +3 -3
  262. package/dist/virtual-list/index.js +2 -2
  263. package/package.json +8 -2
  264. package/dist/chunk-25PSIDPC.js.map +0 -1
  265. package/dist/chunk-2WP27QAN.js.map +0 -1
  266. package/dist/chunk-3E7TKBQI.cjs.map +0 -1
  267. package/dist/chunk-3EPND5M2.cjs.map +0 -1
  268. package/dist/chunk-3RLGH45H.js.map +0 -1
  269. package/dist/chunk-4MZ7HEQC.cjs.map +0 -1
  270. package/dist/chunk-4ZWAJTNH.js.map +0 -1
  271. package/dist/chunk-55J4LEKT.cjs.map +0 -1
  272. package/dist/chunk-5HUZYY54.js.map +0 -1
  273. package/dist/chunk-5WH3JMR5.js.map +0 -1
  274. package/dist/chunk-6A2ZKVST.cjs.map +0 -1
  275. package/dist/chunk-75VXB3H2.cjs.map +0 -1
  276. package/dist/chunk-CJGFRPAS.cjs.map +0 -1
  277. package/dist/chunk-CJVC3A4O.js.map +0 -1
  278. package/dist/chunk-CUJBNRJJ.cjs +0 -38
  279. package/dist/chunk-CUJBNRJJ.cjs.map +0 -1
  280. package/dist/chunk-EAJHEYZM.js +0 -38
  281. package/dist/chunk-EAJHEYZM.js.map +0 -1
  282. package/dist/chunk-EL3YXTOW.cjs.map +0 -1
  283. package/dist/chunk-FKXKBJUI.cjs.map +0 -1
  284. package/dist/chunk-FXZJL2AM.cjs.map +0 -1
  285. package/dist/chunk-H6CWTMAH.js.map +0 -1
  286. package/dist/chunk-HI6WCX4T.cjs.map +0 -1
  287. package/dist/chunk-IJ4DXG7D.cjs.map +0 -1
  288. package/dist/chunk-IYWAZEFI.cjs.map +0 -1
  289. package/dist/chunk-J5RMLZ4P.cjs.map +0 -1
  290. package/dist/chunk-JRLUZDKA.js.map +0 -1
  291. package/dist/chunk-KBGFDHKD.cjs.map +0 -1
  292. package/dist/chunk-L5Q6UDY3.js +0 -69
  293. package/dist/chunk-L5Q6UDY3.js.map +0 -1
  294. package/dist/chunk-LVHZBCTA.cjs.map +0 -1
  295. package/dist/chunk-M7PF4FKQ.js.map +0 -1
  296. package/dist/chunk-NEYLNRVG.cjs.map +0 -1
  297. package/dist/chunk-O3I3RBZJ.js.map +0 -1
  298. package/dist/chunk-O3LG7B2J.cjs.map +0 -1
  299. package/dist/chunk-OAK7HFOJ.js.map +0 -1
  300. package/dist/chunk-OAPOGYA5.cjs.map +0 -1
  301. package/dist/chunk-PR7CVQ4R.js.map +0 -1
  302. package/dist/chunk-PY2376XI.js.map +0 -1
  303. package/dist/chunk-Q6ICDKQZ.cjs.map +0 -1
  304. package/dist/chunk-QQIALSTX.cjs.map +0 -1
  305. package/dist/chunk-QUDVJUZU.js.map +0 -1
  306. package/dist/chunk-QZX3A4FX.js.map +0 -1
  307. package/dist/chunk-R3WPVTGY.cjs.map +0 -1
  308. package/dist/chunk-RYOQYYDO.js.map +0 -1
  309. package/dist/chunk-S4S4LB63.js.map +0 -1
  310. package/dist/chunk-T2KB3DJJ.js.map +0 -1
  311. package/dist/chunk-TEVZHN5I.cjs.map +0 -1
  312. package/dist/chunk-TJC7UELT.js.map +0 -1
  313. package/dist/chunk-UOOGS6N7.cjs.map +0 -1
  314. package/dist/chunk-VRQBDTLT.cjs.map +0 -1
  315. package/dist/chunk-WFEORBLC.cjs.map +0 -1
  316. package/dist/chunk-WWYJNWJY.cjs +0 -69
  317. package/dist/chunk-WWYJNWJY.cjs.map +0 -1
  318. package/dist/chunk-YDPEHUMH.js.map +0 -1
  319. package/dist/chunk-YV57RSPD.js.map +0 -1
  320. package/dist/chunk-Z5U4NJTW.cjs.map +0 -1
  321. package/dist/chunk-ZNWIHUHZ.cjs.map +0 -1
  322. /package/dist/{chunk-BHVHM66Z.js.map → chunk-BBU7QG7L.js.map} +0 -0
  323. /package/dist/{chunk-O2AACVSF.js.map → chunk-BO4LTIJI.js.map} +0 -0
  324. /package/dist/{chunk-KNQ6NN6L.js.map → chunk-CP335H4Q.js.map} +0 -0
  325. /package/dist/{chunk-FALDCW2E.js.map → chunk-DMOZURHV.js.map} +0 -0
  326. /package/dist/{chunk-NWJ6NETE.js.map → chunk-EWTMX4DK.js.map} +0 -0
  327. /package/dist/{chunk-QIITXVRG.js.map → chunk-FPLX5FIK.js.map} +0 -0
  328. /package/dist/{chunk-KQJ3IAFT.js.map → chunk-PG2EII6U.js.map} +0 -0
  329. /package/dist/{chunk-WKDT2XFQ.js.map → chunk-SFRILDXY.js.map} +0 -0
  330. /package/dist/{chunk-ATL7325T.js.map → chunk-VRNCXYEP.js.map} +0 -0
  331. /package/dist/{chunk-L23WWO3D.js.map → chunk-X6UKU3C3.js.map} +0 -0
  332. /package/dist/{chunk-2QEKSRVX.js.map → chunk-YIBPOLNN.js.map} +0 -0
@@ -1,9 +1,9 @@
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 _chunkNEYLNRVGcjs = require('./chunk-NEYLNRVG.cjs');
3
+ var _chunkFXMRDNR6cjs = require('./chunk-FXMRDNR6.cjs');
4
4
 
5
5
 
6
- var _chunk75VXB3H2cjs = require('./chunk-75VXB3H2.cjs');
6
+ var _chunkP7J6WZTOcjs = require('./chunk-P7J6WZTO.cjs');
7
7
 
8
8
  // src/components/TagInput/TagInput.component.tsx
9
9
  var _react = require('react');
@@ -195,100 +195,99 @@ var TagInput = ({
195
195
  disabled && "eidos-tag-input-field--disabled"
196
196
  ].filter(Boolean).join(" ");
197
197
  const uid = generatedId;
198
- return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
199
- "div",
200
- {
201
- className: containerClasses,
202
- ref: containerRef,
203
- "aria-expanded": hasSuggestions ? isSuggestionsOpen : void 0,
204
- "aria-haspopup": hasSuggestions ? "listbox" : void 0,
205
- children: [
206
- label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { htmlFor: inputId, className: "eidos-tag-input-label", children: label }),
207
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: fieldClasses, onClick: handleFieldClick, ref: fieldRef, children: [
208
- tags.map((tag, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
209
- _chunkNEYLNRVGcjs.Chip,
210
- {
211
- variant: "filled",
212
- color: "primary",
213
- size,
214
- onRemove: disabled ? void 0 : () => removeTag(index),
215
- children: tag
216
- },
217
- `${tag}-${index}`
218
- )),
219
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
220
- "input",
221
- {
222
- ref: inputRef,
223
- id: inputId,
224
- className: "eidos-tag-input-input",
225
- type: "text",
226
- value: inputValue,
227
- placeholder: tags.length === 0 ? placeholder : void 0,
228
- disabled,
229
- onKeyDown: handleKeyDown,
230
- onChange: handleInputChange,
231
- onFocus: handleInputFocus,
232
- onBlur: () => setIsFocused(false),
233
- "aria-label": label ? void 0 : "Tag input",
234
- "aria-describedby": hasError ? errorId : hint ? hintId : void 0,
235
- "aria-autocomplete": hasSuggestions ? "list" : void 0,
236
- "aria-controls": hasSuggestions ? `${uid}-tag-suggestions` : void 0,
237
- "aria-activedescendant": hasSuggestions && focusedSuggestionIndex >= 0 ? `${uid}-tag-suggestion-${focusedSuggestionIndex}` : void 0
238
- }
239
- ),
240
- hasSuggestions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
241
- _chunk75VXB3H2cjs.Dropdown,
242
- {
243
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
244
- "span",
245
- {
246
- ref: dropdownSpanRef,
247
- className: "eidos-tag-input-dropdown-anchor",
248
- "aria-hidden": "true"
249
- }
250
- ),
251
- content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
252
- "div",
253
- {
254
- id: `${uid}-tag-suggestions`,
255
- className: "eidos-tag-input-suggestions",
256
- role: "listbox",
257
- "aria-label": _nullishCoalesce(label, () => ( "Suggestions")),
258
- onMouseDown: (e) => e.preventDefault(),
259
- children: filteredSuggestions.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-tag-input-suggestions-empty", children: suggestionsEmptyText }) : filteredSuggestions.map((suggestion, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
260
- "div",
261
- {
262
- id: `${uid}-tag-suggestion-${index}`,
263
- className: [
264
- "eidos-tag-input-suggestion",
265
- index === focusedSuggestionIndex && "eidos-tag-input-suggestion--focused"
266
- ].filter(Boolean).join(" "),
267
- role: "option",
268
- "aria-selected": index === focusedSuggestionIndex,
269
- onClick: () => selectSuggestion(suggestion),
270
- onMouseEnter: () => setFocusedSuggestionIndex(index),
271
- children: suggestion
272
- },
273
- suggestion
274
- ))
275
- }
276
- ),
277
- triggerRef: fieldRef,
278
- autoWidth: true,
279
- closeOnClickOutside: false,
280
- closeOnEscape: false
281
- },
282
- suggestionsMenuKey
283
- )
284
- ] }),
285
- hint && !hasError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "eidos-tag-input-hint", id: hintId, children: hint }),
286
- hasError && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "eidos-tag-input-error-message", id: errorId, role: "alert", children: [
287
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CircleAlert, {}),
288
- displayError
289
- ] })
290
- ]
291
- }
198
+ return (
199
+ // No ARIA on this wrapper - it has no role, so `aria-expanded` and
200
+ // `aria-haspopup` were invalid here. Same fix as `Combobox`: they belong
201
+ // on the input, which is the combobox.
202
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: containerClasses, ref: containerRef, children: [
203
+ label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { htmlFor: inputId, className: "eidos-tag-input-label", children: label }),
204
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: fieldClasses, onClick: handleFieldClick, ref: fieldRef, children: [
205
+ tags.map((tag, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
206
+ _chunkFXMRDNR6cjs.Chip,
207
+ {
208
+ variant: "filled",
209
+ color: "primary",
210
+ size,
211
+ onRemove: disabled ? void 0 : () => removeTag(index),
212
+ children: tag
213
+ },
214
+ `${tag}-${index}`
215
+ )),
216
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
217
+ "input",
218
+ {
219
+ ref: inputRef,
220
+ id: inputId,
221
+ className: "eidos-tag-input-input",
222
+ type: "text",
223
+ value: inputValue,
224
+ placeholder: tags.length === 0 ? placeholder : void 0,
225
+ disabled,
226
+ onKeyDown: handleKeyDown,
227
+ onChange: handleInputChange,
228
+ onFocus: handleInputFocus,
229
+ onBlur: () => setIsFocused(false),
230
+ "aria-label": label ? void 0 : "Tag input",
231
+ "aria-invalid": hasError ? true : void 0,
232
+ "aria-describedby": hasError ? errorId : hint ? hintId : void 0,
233
+ role: hasSuggestions ? "combobox" : void 0,
234
+ "aria-expanded": hasSuggestions ? isSuggestionsOpen : void 0,
235
+ "aria-autocomplete": hasSuggestions ? "list" : void 0,
236
+ "aria-controls": hasSuggestions && isSuggestionsOpen ? `${uid}-tag-suggestions` : void 0,
237
+ "aria-activedescendant": hasSuggestions && focusedSuggestionIndex >= 0 ? `${uid}-tag-suggestion-${focusedSuggestionIndex}` : void 0
238
+ }
239
+ ),
240
+ hasSuggestions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
241
+ _chunkP7J6WZTOcjs.Dropdown,
242
+ {
243
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
244
+ "span",
245
+ {
246
+ ref: dropdownSpanRef,
247
+ className: "eidos-tag-input-dropdown-anchor",
248
+ "aria-hidden": "true"
249
+ }
250
+ ),
251
+ content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
252
+ "div",
253
+ {
254
+ id: `${uid}-tag-suggestions`,
255
+ className: "eidos-tag-input-suggestions",
256
+ role: "listbox",
257
+ "aria-label": _nullishCoalesce(label, () => ( "Suggestions")),
258
+ onMouseDown: (e) => e.preventDefault(),
259
+ children: filteredSuggestions.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-tag-input-suggestions-empty", children: suggestionsEmptyText }) : filteredSuggestions.map((suggestion, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
260
+ "div",
261
+ {
262
+ id: `${uid}-tag-suggestion-${index}`,
263
+ className: [
264
+ "eidos-tag-input-suggestion",
265
+ index === focusedSuggestionIndex && "eidos-tag-input-suggestion--focused"
266
+ ].filter(Boolean).join(" "),
267
+ role: "option",
268
+ "aria-selected": index === focusedSuggestionIndex,
269
+ onClick: () => selectSuggestion(suggestion),
270
+ onMouseEnter: () => setFocusedSuggestionIndex(index),
271
+ children: suggestion
272
+ },
273
+ suggestion
274
+ ))
275
+ }
276
+ ),
277
+ triggerRef: fieldRef,
278
+ autoWidth: true,
279
+ closeOnClickOutside: false,
280
+ closeOnEscape: false
281
+ },
282
+ suggestionsMenuKey
283
+ )
284
+ ] }),
285
+ hint && !hasError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "eidos-tag-input-hint", id: hintId, children: hint }),
286
+ hasError && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "eidos-tag-input-error-message", id: errorId, role: "alert", children: [
287
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.CircleAlert, {}),
288
+ displayError
289
+ ] })
290
+ ] })
292
291
  );
293
292
  };
294
293
  TagInput.displayName = "TagInput";
@@ -296,4 +295,4 @@ TagInput.displayName = "TagInput";
296
295
 
297
296
 
298
297
  exports.TagInput = TagInput;
299
- //# sourceMappingURL=chunk-4MZ7HEQC.cjs.map
298
+ //# sourceMappingURL=chunk-MW4YZVP5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-MW4YZVP5.cjs","../src/components/TagInput/TagInput.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-MW4YZVP5.cjs","sourcesContent":[null,"import React, { useState, useId, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport { Chip } from '../Chip/Chip.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { TagInputProps } from './TagInput.types';\nimport './TagInput.scss';\n\nexport const TagInput: React.FC<TagInputProps> = ({\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add tag…',\n size = 'md',\n disabled = false,\n label,\n error,\n hint,\n allowDuplicates = false,\n maxTags,\n separators = ['Enter', ',', 'Tab'],\n validate,\n className = '',\n fullWidth = false,\n suggestions,\n onSearch,\n suggestionsEmptyText = 'No matches',\n}) => {\n const generatedId = useId();\n const inputId = `tag-input-${generatedId}`;\n const inputRef = useRef<HTMLInputElement>(null);\n\n /** Entire component wrapper - used for click-outside detection on the suggestions dropdown */\n const containerRef = useRef<HTMLDivElement>(null);\n\n /** The field wrapper - passed to Dropdown as externalTriggerRef for width/anchoring */\n const fieldRef = useRef<HTMLDivElement>(null);\n\n /** The 0-height span that IS the Dropdown trigger element - programmatically clicked to open */\n const dropdownSpanRef = useRef<HTMLSpanElement>(null);\n\n const hasSuggestions = suggestions !== undefined;\n const isSuggestionsOpenRef = useRef(false);\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n const [suggestionsMenuKey, setSuggestionsMenuKey] = useState(0);\n const [focusedSuggestionIndex, setFocusedSuggestionIndex] = useState(-1);\n\n const isControlled = value !== undefined;\n\n const [internalTags, setInternalTags] = useState<string[]>(defaultValue);\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const tags = isControlled ? (value as string[]) : internalTags;\n\n const updateTags = useCallback(\n (newTags: string[]) => {\n if (!isControlled) {\n setInternalTags(newTags);\n }\n onChange?.(newTags);\n },\n [isControlled, onChange],\n );\n\n const addTag = useCallback(\n (rawTag: string) => {\n const tag = rawTag.trim();\n\n if (!tag) return;\n\n if (!allowDuplicates && tags.includes(tag)) return;\n\n if (maxTags !== undefined && tags.length >= maxTags) return;\n\n if (validate) {\n const result = validate(tag);\n if (result === false) return;\n if (typeof result === 'string') {\n setValidationError(result);\n return;\n }\n // result === true → valid, fall through\n }\n\n setValidationError(null);\n updateTags([...tags, tag]);\n setInputValue('');\n },\n [tags, allowDuplicates, maxTags, validate, updateTags],\n );\n\n const removeTag = useCallback(\n (index: number) => {\n updateTags(tags.filter((_, i) => i !== index));\n },\n [tags, updateTags],\n );\n\n // ─── Suggestions dropdown (autocomplete) ───────────────────────────────────\n\n const filteredSuggestions = useMemo<string[]>(() => {\n if (!suggestions) return [];\n const query = inputValue.trim().toLowerCase();\n return suggestions.filter((suggestion) => {\n if (!allowDuplicates && tags.includes(suggestion)) return false;\n if (!query) return true;\n return suggestion.toLowerCase().includes(query);\n });\n }, [suggestions, inputValue, tags, allowDuplicates]);\n\n useEffect(() => {\n setFocusedSuggestionIndex(-1);\n }, [filteredSuggestions]);\n\n const openSuggestions = useCallback(() => {\n if (isSuggestionsOpenRef.current || disabled || !hasSuggestions) return;\n dropdownSpanRef.current?.click(); // opens the Dropdown (bubbles to trigger)\n isSuggestionsOpenRef.current = true;\n setIsSuggestionsOpen(true);\n }, [disabled, hasSuggestions]);\n\n const closeSuggestions = useCallback(() => {\n isSuggestionsOpenRef.current = false;\n setIsSuggestionsOpen(false);\n setFocusedSuggestionIndex(-1);\n setSuggestionsMenuKey((prev) => prev + 1);\n }, []);\n\n const selectSuggestion = useCallback(\n (suggestion: string) => {\n addTag(suggestion);\n closeSuggestions();\n inputRef.current?.focus();\n },\n [addTag, closeSuggestions],\n );\n\n // Click-outside detection for the suggestions dropdown.\n useEffect(() => {\n if (!hasSuggestions) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (!isSuggestionsOpenRef.current) return;\n if (e.defaultPrevented) return; // click inside the portal-rendered listbox\n if (containerRef.current?.contains(e.target as Node)) return;\n closeSuggestions();\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [hasSuggestions, closeSuggestions]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (hasSuggestions && isSuggestionsOpenRef.current && filteredSuggestions.length > 0) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev + 1 < filteredSuggestions.length ? prev + 1 : 0));\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev > 0 ? prev - 1 : filteredSuggestions.length - 1));\n return;\n }\n if (e.key === 'Enter' && focusedSuggestionIndex >= 0) {\n e.preventDefault();\n selectSuggestion(filteredSuggestions[focusedSuggestionIndex]);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closeSuggestions();\n return;\n }\n }\n\n if (separators.includes(e.key)) {\n e.preventDefault();\n addTag(inputValue);\n return;\n }\n\n if (e.key === 'Backspace' && inputValue === '' && tags.length > 0) {\n e.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n if (validationError) {\n setValidationError(null);\n }\n onSearch?.(query);\n if (hasSuggestions && !isSuggestionsOpenRef.current) openSuggestions();\n };\n\n const handleInputFocus = () => {\n setIsFocused(true);\n if (hasSuggestions) openSuggestions();\n };\n\n const handleFieldClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // Don't steal focus from interactive child elements\n if ((e.target as HTMLElement).closest('button, input')) return;\n if (!disabled) {\n inputRef.current?.focus();\n }\n };\n\n const displayError = validationError ?? error;\n const hasError = !!displayError;\n const errorId = `${inputId}-error`;\n const hintId = `${inputId}-hint`;\n\n const containerClasses = [\n 'eidos-tag-input',\n hasError && 'eidos-tag-input--error',\n disabled && 'eidos-tag-input--disabled',\n fullWidth && 'eidos-tag-input--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldClasses = [\n 'eidos-tag-input-field',\n `eidos-tag-input-field--${size}`,\n isFocused && 'eidos-tag-input-field--focused',\n hasError && 'eidos-tag-input-field--error',\n disabled && 'eidos-tag-input-field--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n const uid = generatedId;\n\n return (\n // No ARIA on this wrapper - it has no role, so `aria-expanded` and\n // `aria-haspopup` were invalid here. Same fix as `Combobox`: they belong\n // on the input, which is the combobox.\n <div className={containerClasses} ref={containerRef}>\n {label && (\n <label htmlFor={inputId} className=\"eidos-tag-input-label\">\n {label}\n </label>\n )}\n\n <div className={fieldClasses} onClick={handleFieldClick} ref={fieldRef}>\n {tags.map((tag, index) => (\n <Chip\n key={`${tag}-${index}`}\n variant=\"filled\"\n color=\"primary\"\n size={size}\n onRemove={disabled ? undefined : () => removeTag(index)}\n >\n {tag}\n </Chip>\n ))}\n\n <input\n ref={inputRef}\n id={inputId}\n className=\"eidos-tag-input-input\"\n type=\"text\"\n value={inputValue}\n placeholder={tags.length === 0 ? placeholder : undefined}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n onFocus={handleInputFocus}\n onBlur={() => setIsFocused(false)}\n aria-label={label ? undefined : 'Tag input'}\n aria-invalid={hasError ? true : undefined}\n // The ternary is deliberate, not a bug: the hint is unmounted when\n // an error shows (see the render below), so describing the field\n // with it would point at an element that is not there.\n aria-describedby={hasError ? errorId : hint ? hintId : undefined}\n role={hasSuggestions ? 'combobox' : undefined}\n aria-expanded={hasSuggestions ? isSuggestionsOpen : undefined}\n aria-autocomplete={hasSuggestions ? 'list' : undefined}\n // Only while the list is actually rendered - `aria-controls` must\n // name an element that exists.\n aria-controls={hasSuggestions && isSuggestionsOpen ? `${uid}-tag-suggestions` : undefined}\n aria-activedescendant={\n hasSuggestions && focusedSuggestionIndex >= 0\n ? `${uid}-tag-suggestion-${focusedSuggestionIndex}`\n : undefined\n }\n />\n\n {hasSuggestions && (\n <Dropdown\n key={suggestionsMenuKey}\n trigger={\n <span\n ref={dropdownSpanRef}\n className=\"eidos-tag-input-dropdown-anchor\"\n aria-hidden=\"true\"\n />\n }\n content={\n <div\n id={`${uid}-tag-suggestions`}\n className=\"eidos-tag-input-suggestions\"\n role=\"listbox\"\n aria-label={label ?? 'Suggestions'}\n onMouseDown={(e) => e.preventDefault()}\n >\n {filteredSuggestions.length === 0 ? (\n <div className=\"eidos-tag-input-suggestions-empty\">{suggestionsEmptyText}</div>\n ) : (\n filteredSuggestions.map((suggestion, index) => (\n <div\n key={suggestion}\n id={`${uid}-tag-suggestion-${index}`}\n className={[\n 'eidos-tag-input-suggestion',\n index === focusedSuggestionIndex && 'eidos-tag-input-suggestion--focused',\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"option\"\n aria-selected={index === focusedSuggestionIndex}\n onClick={() => selectSuggestion(suggestion)}\n onMouseEnter={() => setFocusedSuggestionIndex(index)}\n >\n {suggestion}\n </div>\n ))\n )}\n </div>\n }\n triggerRef={fieldRef as React.RefObject<HTMLElement | null>}\n autoWidth\n closeOnClickOutside={false}\n closeOnEscape={false}\n />\n )}\n </div>\n\n {hint && !hasError && (\n <p className=\"eidos-tag-input-hint\" id={hintId}>\n {hint}\n </p>\n )}\n\n {hasError && (\n <p className=\"eidos-tag-input-error-message\" id={errorId} role=\"alert\">\n <CircleAlert />\n {displayError}\n </p>\n )}\n </div>\n );\n};\n\nTagInput.displayName = 'TagInput';\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkHI6WCX4Tcjs = require('./chunk-HI6WCX4T.cjs');
3
+ var _chunk6LCYO2HGcjs = require('./chunk-6LCYO2HG.cjs');
4
4
 
5
5
 
6
- var _chunkWWYJNWJYcjs = require('./chunk-WWYJNWJY.cjs');
6
+ var _chunkOWWPHXAFcjs = require('./chunk-OWWPHXAF.cjs');
7
7
 
8
8
  // src/components/Pagination/Pagination.component.tsx
9
9
  var _react = require('react');
@@ -52,6 +52,7 @@ var Pagination = ({
52
52
  onPageSizeChange,
53
53
  pageSizeOptions = [10, 25, 50, 100]
54
54
  }) => {
55
+ const pageSizeId = _react.useId.call(void 0, );
55
56
  const items = usePaginationRange(page, totalPages, siblingCount);
56
57
  const [inputValue, setInputValue] = _react.useState.call(void 0, String(page));
57
58
  _react.useEffect.call(void 0, () => {
@@ -78,7 +79,7 @@ var Pagination = ({
78
79
  ].filter(Boolean).join(" ");
79
80
  const nav = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "nav", { "aria-label": "Pagination", className: "eidos-pagination-nav", children: [
80
81
  showFirstLast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
81
- _chunkWWYJNWJYcjs.Button,
82
+ _chunkOWWPHXAFcjs.Button,
82
83
  {
83
84
  variant: "text",
84
85
  size,
@@ -89,7 +90,7 @@ var Pagination = ({
89
90
  }
90
91
  ),
91
92
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
92
- _chunkWWYJNWJYcjs.Button,
93
+ _chunkOWWPHXAFcjs.Button,
93
94
  {
94
95
  variant: "text",
95
96
  size,
@@ -145,7 +146,7 @@ var Pagination = ({
145
146
  )
146
147
  ),
147
148
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
148
- _chunkWWYJNWJYcjs.Button,
149
+ _chunkOWWPHXAFcjs.Button,
149
150
  {
150
151
  variant: "text",
151
152
  size,
@@ -156,7 +157,7 @@ var Pagination = ({
156
157
  }
157
158
  ),
158
159
  showFirstLast && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
159
- _chunkWWYJNWJYcjs.Button,
160
+ _chunkOWWPHXAFcjs.Button,
160
161
  {
161
162
  variant: "text",
162
163
  size,
@@ -182,9 +183,9 @@ var Pagination = ({
182
183
  ] }),
183
184
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-pagination-controls", children: [
184
185
  hasPageSize && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-pagination-size", children: [
185
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { className: "eidos-pagination-size-label", children: "Show:" }),
186
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { className: "eidos-pagination-size-label", htmlFor: pageSizeId, children: "Show:" }),
186
187
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
187
- _chunkHI6WCX4Tcjs.Select,
188
+ _chunk6LCYO2HGcjs.Select,
188
189
  {
189
190
  value: String(pageSize),
190
191
  onChange: (val) => onPageSizeChange(Number(val)),
@@ -195,7 +196,7 @@ var Pagination = ({
195
196
  })),
196
197
  clearable: false,
197
198
  disabled,
198
- inputProps: { size: "sm", width: 72 }
199
+ inputProps: { size: "sm", width: 72, id: pageSizeId }
199
200
  }
200
201
  )
201
202
  ] }),
@@ -208,4 +209,4 @@ Pagination.displayName = "Pagination";
208
209
 
209
210
 
210
211
  exports.Pagination = Pagination;
211
- //# sourceMappingURL=chunk-WFEORBLC.cjs.map
212
+ //# sourceMappingURL=chunk-N5ZWQJTM.cjs.map
@@ -0,0 +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,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkD2SKXRKPcjs = require('./chunk-D2SKXRKP.cjs');
3
+ var _chunkG74DHVHVcjs = require('./chunk-G74DHVHV.cjs');
4
4
 
5
5
 
6
- var _chunk75VXB3H2cjs = require('./chunk-75VXB3H2.cjs');
6
+ var _chunkP7J6WZTOcjs = require('./chunk-P7J6WZTO.cjs');
7
7
 
8
8
 
9
- var _chunkCUJBNRJJcjs = require('./chunk-CUJBNRJJ.cjs');
9
+ var _chunkVHSTB7GBcjs = require('./chunk-VHSTB7GB.cjs');
10
10
 
11
11
  // src/components/SplitButton/SplitButton.component.tsx
12
12
  var _react = require('react');
@@ -71,16 +71,16 @@ var SplitButton = ({
71
71
  disabled: disabledOrLoading,
72
72
  onClick,
73
73
  children: [
74
- loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { className: "eidos-split-button__spinner", "aria-hidden": "true" }) : preIcon && _chunkCUJBNRJJcjs.renderIcon.call(void 0, preIcon, "eidos-split-button__pre-icon"),
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
75
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-split-button__label", children: label })
76
76
  ]
77
77
  }
78
78
  ),
79
79
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
80
- _chunk75VXB3H2cjs.Dropdown,
80
+ _chunkP7J6WZTOcjs.Dropdown,
81
81
  {
82
82
  trigger: chevronTrigger,
83
- content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkD2SKXRKPcjs.MenuPanel, { items: menuItems, onItemClick: handleItemClick }),
83
+ content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkG74DHVHVcjs.MenuPanel, { items: menuItems, onItemClick: handleItemClick }),
84
84
  placement: "bottom",
85
85
  align: "end",
86
86
  disabled: disabledOrLoading
@@ -94,4 +94,4 @@ var SplitButton = ({
94
94
 
95
95
 
96
96
  exports.SplitButton = SplitButton;
97
- //# sourceMappingURL=chunk-OMLXP2CK.cjs.map
97
+ //# sourceMappingURL=chunk-N77VOYCK.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-OMLXP2CK.cjs","../src/components/SplitButton/SplitButton.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,8BAAmC;AACnC,2CAA0C;AAmEpC,+CAAA;AAzCC,IAAM,YAAA,EAA0C,CAAC;AAAA,EACtD,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU,KAAA;AAAA,EACV,OAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AAEJ,EAAA,MAAM,UAAA,EAAwB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAA,GAAA,CAAS;AAAA,IAClD,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,GAAA,CAAI,EAAA;AAAA,IACR,KAAA,EAAO,GAAA,CAAI,KAAA;AAAA,IACX,IAAA,EAAM,GAAA,CAAI,IAAA;AAAA,IACV,QAAA,EAAU,GAAA,CAAI,QAAA;AAAA,IACd,OAAA,EAAS,GAAA,CAAI;AAAA,EACf,CAAA,CAAE,CAAA;AAEF,EAAA,MAAM,gBAAA,EAAkB,gCAAA,CAAY,EAAA,GAAM;AAExC,IAAA,UAAA,CAAW,CAAA,EAAA,GAAM;AACf,MAAA,QAAA,CAAS,aAAA;AAAA,QACP,IAAI,UAAA,CAAW,WAAA,EAAa,EAAE,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,OAAO,CAAC;AAAA,MAC/E,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAAA,EACP,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,UAAA,EAAY,CAAA,2BAAA,EAA8B,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA;AAC9D,EAAA;AAGpC,EAAA;AAAC,IAAA;AAAA,IAAA;AACM,MAAA;AACkB,MAAA;AACb,MAAA;AACC,MAAA;AAE+C,MAAA;AAAmB,IAAA;AAC/E,EAAA;AAIA,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AAC8B,QAAA;AACF,QAAA;AACD,QAAA;AACN,QAAA;AACrB,QAAA;AAGS,MAAA;AAGX,MAAA;AAAA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACkB,YAAA;AACb,YAAA;AACV,YAAA;AAEC,YAAA;AACuD,cAAA;AAIL,8BAAA;AAAA,YAAA;AAAA,UAAA;AACrD,QAAA;AAGA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACU,YAAA;AAC2D,YAAA;AAC1D,YAAA;AACJ,YAAA;AACI,YAAA;AAAA,UAAA;AACZ,QAAA;AAAA,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;ADlBuG;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-OMLXP2CK.cjs","sourcesContent":[null,"import React, { useCallback } from 'react';\nimport { ChevronDown, LoaderCircle } from 'lucide-react';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport { MenuPanel } from '../Menu';\nimport type { MenuItem } from '../Menu';\nimport { renderIcon } from '../../utils';\nimport type { SplitButtonProps } from './SplitButton.types';\n\n/**\n * SplitButton - a two-part control with a primary action button on the left\n * and a chevron that opens a dropdown of secondary actions on the right.\n *\n * The primary button fires `onClick` directly; clicking the chevron opens the\n * dropdown. Visually the two parts share a single bordered unit.\n *\n * @example\n * ```tsx\n * <SplitButton\n * label=\"Save\"\n * onClick={() => save()}\n * options={[\n * { id: 'draft', label: 'Save as draft', onClick: saveDraft },\n * { id: 'template', label: 'Save as template', onClick: saveTemplate },\n * ]}\n * />\n * ```\n */\nexport const SplitButton: React.FC<SplitButtonProps> = ({\n label,\n onClick,\n options,\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n preIcon,\n className = '',\n}) => {\n // Convert SplitButtonOption → MenuItemType so MenuPanel can render them.\n const menuItems: MenuItem[] = options.map((opt) => ({\n type: 'item' as const,\n id: opt.id,\n label: opt.label,\n icon: opt.icon,\n disabled: opt.disabled,\n onClick: opt.onClick,\n }));\n\n const handleItemClick = useCallback(() => {\n // Close the dropdown by dispatching a mousedown outside it.\n setTimeout(() => {\n document.dispatchEvent(\n new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window }),\n );\n }, 10);\n }, []);\n\n const baseClass = `eidos-button eidos-button--${variant} eidos-button--${color} eidos-button--${size}`;\n const disabledOrLoading = disabled || loading;\n\n const chevronTrigger = (\n <button\n type=\"button\"\n className={`${baseClass} eidos-split-button__chevron`}\n disabled={disabledOrLoading}\n aria-label=\"More options\"\n >\n <ChevronDown className=\"eidos-split-button__chevron-icon\" aria-hidden=\"true\" />\n </button>\n );\n\n return (\n <div\n className={[\n 'eidos-split-button',\n `eidos-split-button--${variant}`,\n `eidos-split-button--${color}`,\n `eidos-split-button--${size}`,\n disabledOrLoading && 'eidos-split-button--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Primary action */}\n <button\n type=\"button\"\n className={`${baseClass} eidos-split-button__primary`}\n disabled={disabledOrLoading}\n onClick={onClick}\n >\n {loading ? (\n <LoaderCircle className=\"eidos-split-button__spinner\" aria-hidden=\"true\" />\n ) : (\n preIcon && renderIcon(preIcon, 'eidos-split-button__pre-icon')\n )}\n <span className=\"eidos-split-button__label\">{label}</span>\n </button>\n\n {/* Secondary actions dropdown */}\n <Dropdown\n trigger={chevronTrigger}\n content={<MenuPanel items={menuItems} onItemClick={handleItemClick} />}\n placement=\"bottom\"\n align=\"end\"\n disabled={disabledOrLoading}\n />\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-N77VOYCK.cjs","../src/components/SplitButton/SplitButton.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,8BAAmC;AACnC,2CAA0C;AAmEpC,+CAAA;AAzCC,IAAM,YAAA,EAA0C,CAAC;AAAA,EACtD,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU,KAAA;AAAA,EACV,OAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AAEJ,EAAA,MAAM,UAAA,EAAwB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAA,GAAA,CAAS;AAAA,IAClD,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,GAAA,CAAI,EAAA;AAAA,IACR,KAAA,EAAO,GAAA,CAAI,KAAA;AAAA,IACX,IAAA,EAAM,GAAA,CAAI,IAAA;AAAA,IACV,QAAA,EAAU,GAAA,CAAI,QAAA;AAAA,IACd,OAAA,EAAS,GAAA,CAAI;AAAA,EACf,CAAA,CAAE,CAAA;AAEF,EAAA,MAAM,gBAAA,EAAkB,gCAAA,CAAY,EAAA,GAAM;AAExC,IAAA,UAAA,CAAW,CAAA,EAAA,GAAM;AACf,MAAA,QAAA,CAAS,aAAA;AAAA,QACP,IAAI,UAAA,CAAW,WAAA,EAAa,EAAE,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,OAAO,CAAC;AAAA,MAC/E,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAAA,EACP,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,UAAA,EAAY,CAAA,2BAAA,EAA8B,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA;AAC9D,EAAA;AAGpC,EAAA;AAAC,IAAA;AAAA,IAAA;AACM,MAAA;AACkB,MAAA;AACb,MAAA;AACC,MAAA;AAE+C,MAAA;AAAmB,IAAA;AAC/E,EAAA;AAIA,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AAC8B,QAAA;AACF,QAAA;AACD,QAAA;AACN,QAAA;AACrB,QAAA;AAGS,MAAA;AAGX,MAAA;AAAA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACkB,YAAA;AACb,YAAA;AACV,YAAA;AAEC,YAAA;AACuD,cAAA;AAIL,8BAAA;AAAA,YAAA;AAAA,UAAA;AACrD,QAAA;AAGA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACU,YAAA;AAC2D,YAAA;AAC1D,YAAA;AACJ,YAAA;AACI,YAAA;AAAA,UAAA;AACZ,QAAA;AAAA,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;ADlBuG;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-N77VOYCK.cjs","sourcesContent":[null,"import React, { useCallback } from 'react';\nimport { ChevronDown, LoaderCircle } from 'lucide-react';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport { MenuPanel } from '../Menu';\nimport type { MenuItem } from '../Menu';\nimport { renderIcon } from '../../utils';\nimport type { SplitButtonProps } from './SplitButton.types';\n\n/**\n * SplitButton - a two-part control with a primary action button on the left\n * and a chevron that opens a dropdown of secondary actions on the right.\n *\n * The primary button fires `onClick` directly; clicking the chevron opens the\n * dropdown. Visually the two parts share a single bordered unit.\n *\n * @example\n * ```tsx\n * <SplitButton\n * label=\"Save\"\n * onClick={() => save()}\n * options={[\n * { id: 'draft', label: 'Save as draft', onClick: saveDraft },\n * { id: 'template', label: 'Save as template', onClick: saveTemplate },\n * ]}\n * />\n * ```\n */\nexport const SplitButton: React.FC<SplitButtonProps> = ({\n label,\n onClick,\n options,\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n preIcon,\n className = '',\n}) => {\n // Convert SplitButtonOption → MenuItemType so MenuPanel can render them.\n const menuItems: MenuItem[] = options.map((opt) => ({\n type: 'item' as const,\n id: opt.id,\n label: opt.label,\n icon: opt.icon,\n disabled: opt.disabled,\n onClick: opt.onClick,\n }));\n\n const handleItemClick = useCallback(() => {\n // Close the dropdown by dispatching a mousedown outside it.\n setTimeout(() => {\n document.dispatchEvent(\n new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window }),\n );\n }, 10);\n }, []);\n\n const baseClass = `eidos-button eidos-button--${variant} eidos-button--${color} eidos-button--${size}`;\n const disabledOrLoading = disabled || loading;\n\n const chevronTrigger = (\n <button\n type=\"button\"\n className={`${baseClass} eidos-split-button__chevron`}\n disabled={disabledOrLoading}\n aria-label=\"More options\"\n >\n <ChevronDown className=\"eidos-split-button__chevron-icon\" aria-hidden=\"true\" />\n </button>\n );\n\n return (\n <div\n className={[\n 'eidos-split-button',\n `eidos-split-button--${variant}`,\n `eidos-split-button--${color}`,\n `eidos-split-button--${size}`,\n disabledOrLoading && 'eidos-split-button--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Primary action */}\n <button\n type=\"button\"\n className={`${baseClass} eidos-split-button__primary`}\n disabled={disabledOrLoading}\n onClick={onClick}\n >\n {loading ? (\n <LoaderCircle className=\"eidos-split-button__spinner\" aria-hidden=\"true\" />\n ) : (\n preIcon && renderIcon(preIcon, 'eidos-split-button__pre-icon')\n )}\n <span className=\"eidos-split-button__label\">{label}</span>\n </button>\n\n {/* Secondary actions dropdown */}\n <Dropdown\n trigger={chevronTrigger}\n content={<MenuPanel items={menuItems} onItemClick={handleItemClick} />}\n placement=\"bottom\"\n align=\"end\"\n disabled={disabledOrLoading}\n />\n </div>\n );\n};\n"]}
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  Tooltip
3
- } from "./chunk-YV57RSPD.js";
3
+ } from "./chunk-XO7WTE6O.js";
4
4
  import {
5
5
  renderIcon
6
- } from "./chunk-EAJHEYZM.js";
6
+ } from "./chunk-WT4WBHBR.js";
7
7
 
8
8
  // src/components/Chip/Chip.component.tsx
9
9
  import { X } from "lucide-react";
10
- import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
11
  var Chip = ({
12
12
  variant = "filled",
13
13
  color = "primary",
@@ -45,26 +45,31 @@ var Chip = ({
45
45
  if (disabled || !onRemove) return;
46
46
  onRemove();
47
47
  };
48
+ const hasBothControls = isClickable && isRemovable;
48
49
  const ChipElement = isClickable && !isRemovable ? "button" : "div";
50
+ const body = /* @__PURE__ */ jsxs(Fragment, { children: [
51
+ preIcon && renderIcon(preIcon, "eidos-chip--pre-icon"),
52
+ /* @__PURE__ */ jsx("span", { className: "eidos-chip--copy", children }),
53
+ posIcon && renderIcon(posIcon, "eidos-chip--pos-icon")
54
+ ] });
49
55
  const chipContent = /* @__PURE__ */ jsxs(
50
56
  ChipElement,
51
57
  {
52
58
  className: chipClasses,
53
59
  disabled: ChipElement === "button" ? disabled : void 0,
54
- onClick: isClickable ? handleClick : void 0,
55
- role: ChipElement === "div" && isClickable ? "button" : void 0,
56
- tabIndex: ChipElement === "div" && isClickable ? 0 : void 0,
57
- onKeyDown: ChipElement === "div" && isClickable ? (e) => {
58
- if ((e.key === "Enter" || e.key === " ") && !disabled) {
59
- e.preventDefault();
60
- handleClick();
61
- }
62
- } : void 0,
60
+ onClick: isClickable && !hasBothControls ? handleClick : void 0,
63
61
  ...chipProps,
64
62
  children: [
65
- preIcon && renderIcon(preIcon, "eidos-chip--pre-icon"),
66
- /* @__PURE__ */ jsx("span", { className: "eidos-chip--copy", children }),
67
- posIcon && renderIcon(posIcon, "eidos-chip--pos-icon"),
63
+ hasBothControls ? /* @__PURE__ */ jsx(
64
+ "button",
65
+ {
66
+ type: "button",
67
+ className: "eidos-chip--action",
68
+ onClick: handleClick,
69
+ disabled,
70
+ children: body
71
+ }
72
+ ) : body,
68
73
  isRemovable && /* @__PURE__ */ jsx(
69
74
  "button",
70
75
  {
@@ -85,4 +90,4 @@ var Chip = ({
85
90
  export {
86
91
  Chip
87
92
  };
88
- //# sourceMappingURL=chunk-OAK7HFOJ.js.map
93
+ //# sourceMappingURL=chunk-NACA72XI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Chip/Chip.component.tsx"],"sourcesContent":["import React from 'react';\nimport { X } from 'lucide-react';\nimport type { ChipProps } from './Chip.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { renderIcon } from '../../utils';\n\nexport const Chip: React.FC<ChipProps> = ({\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n fullWidth = false,\n tooltip,\n className = '',\n preIcon,\n posIcon,\n children,\n onClick,\n onRemove,\n ...chipProps\n}) => {\n const isClickable = !!onClick;\n const isRemovable = !!onRemove;\n\n // Build CSS classes\n const chipClasses = [\n 'eidos-chip',\n `eidos-chip--${variant}`,\n `eidos-chip--${color}`,\n `eidos-chip--${size}`,\n disabled && 'eidos-chip--disabled',\n isClickable && 'eidos-chip--clickable',\n isRemovable && 'eidos-chip--removable',\n fullWidth && 'eidos-chip--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const handleClick = () => {\n if (disabled || !onClick) return;\n onClick();\n };\n\n const handleRemove = (e: React.MouseEvent) => {\n e.stopPropagation(); // Prevent chip click when removing\n if (disabled || !onRemove) return;\n onRemove();\n };\n\n // A chip that is both clickable and removable holds *two* controls, so it\n // has to render them as siblings.\n //\n // The previous shape switched the outer element to a `<div>` when\n // removable - the comment said \"to avoid nested buttons\" - and then gave\n // that div `role=\"button\"` and `tabIndex={0}`. That is the same defect\n // wearing a different hat: a button containing a button, which is invalid\n // (`nested-interactive`) and leaves a screen reader announcing a control\n // inside a control. It is the same shape already fixed on `Dropdown` and\n // `DataGrid`'s rows.\n //\n // Now the outer element is a plain container whenever there is a remove\n // button, and the chip's own action moves to an inner `<button>` wrapping\n // just the content. Each control is separately reachable and separately\n // named.\n const hasBothControls = isClickable && isRemovable;\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\n\n const body = (\n <>\n {preIcon && renderIcon(preIcon, 'eidos-chip--pre-icon')}\n\n <span className=\"eidos-chip--copy\">{children}</span>\n\n {posIcon && renderIcon(posIcon, 'eidos-chip--pos-icon')}\n </>\n );\n\n const chipContent = (\n <ChipElement\n className={chipClasses}\n disabled={ChipElement === 'button' ? disabled : undefined}\n onClick={isClickable && !hasBothControls ? handleClick : undefined}\n {...chipProps}\n >\n {hasBothControls ? (\n <button\n type=\"button\"\n className=\"eidos-chip--action\"\n onClick={handleClick}\n disabled={disabled}\n >\n {body}\n </button>\n ) : (\n body\n )}\n\n {isRemovable && (\n <button\n className=\"eidos-chip--remove-button\"\n onClick={handleRemove}\n disabled={disabled}\n aria-label=\"Remove\"\n type=\"button\"\n >\n <X className=\"eidos-chip--remove-icon\" />\n </button>\n )}\n </ChipElement>\n );\n\n return tooltip ? <Tooltip message={tooltip}>{chipContent}</Tooltip> : chipContent;\n};\n"],"mappings":";;;;;;;;AACA,SAAS,SAAS;AAoEd,mBAGE,KAHF;AA/DG,IAAM,OAA4B,CAAC;AAAA,EACxC,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,cAAc,CAAC,CAAC;AACtB,QAAM,cAAc,CAAC,CAAC;AAGtB,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,eAAe,OAAO;AAAA,IACtB,eAAe,KAAK;AAAA,IACpB,eAAe,IAAI;AAAA,IACnB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,eAAe;AAAA,IACf,aAAa;AAAA,IACb;AAAA,EACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,cAAc,MAAM;AACxB,QAAI,YAAY,CAAC,QAAS;AAC1B,YAAQ;AAAA,EACV;AAEA,QAAM,eAAe,CAAC,MAAwB;AAC5C,MAAE,gBAAgB;AAClB,QAAI,YAAY,CAAC,SAAU;AAC3B,aAAS;AAAA,EACX;AAiBA,QAAM,kBAAkB,eAAe;AACvC,QAAM,cAAc,eAAe,CAAC,cAAc,WAAW;AAE7D,QAAM,OACJ,iCACG;AAAA,eAAW,WAAW,SAAS,sBAAsB;AAAA,IAEtD,oBAAC,UAAK,WAAU,oBAAoB,UAAS;AAAA,IAE5C,WAAW,WAAW,SAAS,sBAAsB;AAAA,KACxD;AAGF,QAAM,cACJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,MACX,UAAU,gBAAgB,WAAW,WAAW;AAAA,MAChD,SAAS,eAAe,CAAC,kBAAkB,cAAc;AAAA,MACxD,GAAG;AAAA,MAEH;AAAA,0BACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS;AAAA,YACT;AAAA,YAEC;AAAA;AAAA,QACH,IAEA;AAAA,QAGD,eACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS;AAAA,YACT;AAAA,YACA,cAAW;AAAA,YACX,MAAK;AAAA,YAEL,8BAAC,KAAE,WAAU,2BAA0B;AAAA;AAAA,QACzC;AAAA;AAAA;AAAA,EAEJ;AAGF,SAAO,UAAU,oBAAC,WAAQ,SAAS,SAAU,uBAAY,IAAa;AACxE;","names":[]}