eidos-ui 3.4.0 → 3.5.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 (278) 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/alert/index.cjs +5 -5
  10. package/dist/alert/index.js +4 -4
  11. package/dist/button/index.cjs +4 -4
  12. package/dist/button/index.js +3 -3
  13. package/dist/chip/index.cjs +4 -4
  14. package/dist/chip/index.js +3 -3
  15. package/dist/{chunk-WGCGSM5P.js → chunk-24HKKSKX.js} +11 -18
  16. package/dist/chunk-24HKKSKX.js.map +1 -0
  17. package/dist/{chunk-BBU7QG7L.js → chunk-26SO4LZ5.js} +4 -4
  18. package/dist/{chunk-Y7VSWZWM.js → chunk-2JW3WSBF.js} +4 -4
  19. package/dist/{chunk-IXVM2XNS.js → chunk-2PCCGQOH.js} +89 -19
  20. package/dist/chunk-2PCCGQOH.js.map +1 -0
  21. package/dist/{chunk-4LET2PEX.cjs → chunk-2T7ZMMH5.cjs} +64 -11
  22. package/dist/chunk-2T7ZMMH5.cjs.map +1 -0
  23. package/dist/{chunk-VHSTB7GB.cjs → chunk-35LGEPLP.cjs} +13 -2
  24. package/dist/chunk-35LGEPLP.cjs.map +1 -0
  25. package/dist/{chunk-5E4DYTZ3.cjs → chunk-36JFXFM2.cjs} +36 -36
  26. package/dist/{chunk-5E4DYTZ3.cjs.map → chunk-36JFXFM2.cjs.map} +1 -1
  27. package/dist/{chunk-XMXL6NVJ.cjs → chunk-3KBBJZHK.cjs} +11 -11
  28. package/dist/{chunk-XMXL6NVJ.cjs.map → chunk-3KBBJZHK.cjs.map} +1 -1
  29. package/dist/{chunk-BIANFFJL.cjs → chunk-3RWZC6OW.cjs} +5 -5
  30. package/dist/{chunk-BIANFFJL.cjs.map → chunk-3RWZC6OW.cjs.map} +1 -1
  31. package/dist/{chunk-CBT3TTQR.cjs → chunk-3ZRFOKDM.cjs} +30 -30
  32. package/dist/{chunk-CBT3TTQR.cjs.map → chunk-3ZRFOKDM.cjs.map} +1 -1
  33. package/dist/{chunk-5V7DXZWT.cjs → chunk-4AO5RKV5.cjs} +25 -37
  34. package/dist/chunk-4AO5RKV5.cjs.map +1 -0
  35. package/dist/{chunk-UDRAM6JU.js → chunk-4J25XZDI.js} +13 -11
  36. package/dist/chunk-4J25XZDI.js.map +1 -0
  37. package/dist/{chunk-TWXZKUCG.cjs → chunk-4JSTBA4F.cjs} +9 -7
  38. package/dist/chunk-4JSTBA4F.cjs.map +1 -0
  39. package/dist/{chunk-TYGVKSL6.js → chunk-4LNTZPSQ.js} +2 -2
  40. package/dist/{chunk-UGTKZ7HP.js → chunk-5XH2PHT2.js} +13 -13
  41. package/dist/{chunk-UGTKZ7HP.js.map → chunk-5XH2PHT2.js.map} +1 -1
  42. package/dist/{chunk-H5D3ZFBM.cjs → chunk-66UQTF57.cjs} +46 -46
  43. package/dist/{chunk-H5D3ZFBM.cjs.map → chunk-66UQTF57.cjs.map} +1 -1
  44. package/dist/{chunk-JKBBHAIC.cjs → chunk-6JHVXWDV.cjs} +124 -54
  45. package/dist/chunk-6JHVXWDV.cjs.map +1 -0
  46. package/dist/{chunk-44T4HMFU.js → chunk-75GFIQRU.js} +3 -3
  47. package/dist/{chunk-AHVDTWVM.cjs → chunk-7BFODYNL.cjs} +7 -7
  48. package/dist/{chunk-AHVDTWVM.cjs.map → chunk-7BFODYNL.cjs.map} +1 -1
  49. package/dist/{chunk-NCZUQFKL.cjs → chunk-7VJCGKVP.cjs} +11 -11
  50. package/dist/{chunk-NCZUQFKL.cjs.map → chunk-7VJCGKVP.cjs.map} +1 -1
  51. package/dist/{chunk-PG2EII6U.js → chunk-A3LMUPG3.js} +2 -2
  52. package/dist/{chunk-BO4LTIJI.js → chunk-AR2ZOO6L.js} +3 -3
  53. package/dist/{chunk-MLUHM3VG.cjs → chunk-BEOECPVJ.cjs} +5 -7
  54. package/dist/chunk-BEOECPVJ.cjs.map +1 -0
  55. package/dist/{chunk-FPLX5FIK.js → chunk-BFKPJ627.js} +5 -4
  56. package/dist/chunk-BFKPJ627.js.map +1 -0
  57. package/dist/{chunk-MP7LN5CW.js → chunk-D7SQ7LHJ.js} +2 -2
  58. package/dist/{chunk-OWWPHXAF.cjs → chunk-DA375AI6.cjs} +8 -8
  59. package/dist/{chunk-OWWPHXAF.cjs.map → chunk-DA375AI6.cjs.map} +1 -1
  60. package/dist/{chunk-7KVXXHFX.cjs → chunk-DU5JKTHK.cjs} +8 -6
  61. package/dist/chunk-DU5JKTHK.cjs.map +1 -0
  62. package/dist/{chunk-LH5A2SIX.js → chunk-FIVMMCGM.js} +8 -20
  63. package/dist/chunk-FIVMMCGM.js.map +1 -0
  64. package/dist/{chunk-22EKNTWJ.js → chunk-GIEDIAPD.js} +8 -6
  65. package/dist/chunk-GIEDIAPD.js.map +1 -0
  66. package/dist/{chunk-X6UKU3C3.js → chunk-GPVGGBIR.js} +2 -2
  67. package/dist/{chunk-NACA72XI.js → chunk-GWHZFX2H.js} +3 -3
  68. package/dist/{chunk-YIBPOLNN.js → chunk-HEX4IMLO.js} +4 -4
  69. package/dist/{chunk-KWDOOMHR.cjs → chunk-HMEREPDB.cjs} +7 -7
  70. package/dist/{chunk-KWDOOMHR.cjs.map → chunk-HMEREPDB.cjs.map} +1 -1
  71. package/dist/{chunk-TYSNOPMQ.cjs → chunk-HNGFRRVZ.cjs} +3 -3
  72. package/dist/{chunk-TYSNOPMQ.cjs.map → chunk-HNGFRRVZ.cjs.map} +1 -1
  73. package/dist/{chunk-3QQKWXMV.cjs → chunk-I6M6CVI2.cjs} +3 -3
  74. package/dist/{chunk-3QQKWXMV.cjs.map → chunk-I6M6CVI2.cjs.map} +1 -1
  75. package/dist/chunk-J76JHN7J.cjs +225 -0
  76. package/dist/chunk-J76JHN7J.cjs.map +1 -0
  77. package/dist/{chunk-SKLMBE3Z.cjs → chunk-JCKGAAPZ.cjs} +7 -7
  78. package/dist/{chunk-SKLMBE3Z.cjs.map → chunk-JCKGAAPZ.cjs.map} +1 -1
  79. package/dist/{chunk-67EXHO4T.js → chunk-JHX6JK3M.js} +79 -75
  80. package/dist/chunk-JHX6JK3M.js.map +1 -0
  81. package/dist/{chunk-XO7WTE6O.js → chunk-JNY7TUDS.js} +4 -6
  82. package/dist/chunk-JNY7TUDS.js.map +1 -0
  83. package/dist/{chunk-GMDVW76A.cjs → chunk-JPYJQ4TF.cjs} +6 -6
  84. package/dist/{chunk-GMDVW76A.cjs.map → chunk-JPYJQ4TF.cjs.map} +1 -1
  85. package/dist/{chunk-SVCWSW2F.js → chunk-JT4KVXJK.js} +65 -12
  86. package/dist/chunk-JT4KVXJK.js.map +1 -0
  87. package/dist/{chunk-FODRHCRP.cjs → chunk-KBQD4JLK.cjs} +3 -3
  88. package/dist/{chunk-FODRHCRP.cjs.map → chunk-KBQD4JLK.cjs.map} +1 -1
  89. package/dist/{chunk-P7J6WZTO.cjs → chunk-KIZVY57H.cjs} +82 -78
  90. package/dist/chunk-KIZVY57H.cjs.map +1 -0
  91. package/dist/{chunk-N5ZWQJTM.cjs → chunk-KREHT4AQ.cjs} +8 -8
  92. package/dist/{chunk-N5ZWQJTM.cjs.map → chunk-KREHT4AQ.cjs.map} +1 -1
  93. package/dist/{chunk-SCLFJHN2.js → chunk-L65MHFMD.js} +3 -3
  94. package/dist/{chunk-N77VOYCK.cjs → chunk-LQXFXXMJ.cjs} +8 -7
  95. package/dist/chunk-LQXFXXMJ.cjs.map +1 -0
  96. package/dist/{chunk-OIXPYXR6.js → chunk-MPIVBAMY.js} +2 -2
  97. package/dist/{chunk-TLECMA3B.js → chunk-MQAOXZD4.js} +27 -14
  98. package/dist/chunk-MQAOXZD4.js.map +1 -0
  99. package/dist/{chunk-YUH56CJI.cjs → chunk-NOQF7UQ5.cjs} +6 -6
  100. package/dist/{chunk-YUH56CJI.cjs.map → chunk-NOQF7UQ5.cjs.map} +1 -1
  101. package/dist/{chunk-DMOZURHV.js → chunk-O3QM3BFE.js} +2 -2
  102. package/dist/{chunk-SFRILDXY.js → chunk-OOCCSMWM.js} +4 -4
  103. package/dist/chunk-P4XZH3OR.js +225 -0
  104. package/dist/chunk-P4XZH3OR.js.map +1 -0
  105. package/dist/{chunk-O46UJUZM.cjs → chunk-PMSENLOA.cjs} +35 -27
  106. package/dist/chunk-PMSENLOA.cjs.map +1 -0
  107. package/dist/{chunk-EWTMX4DK.js → chunk-RHFD2Z5V.js} +7 -7
  108. package/dist/{chunk-WT4WBHBR.js → chunk-RHHZRTWM.js} +13 -2
  109. package/dist/chunk-RHHZRTWM.js.map +1 -0
  110. package/dist/{chunk-NF55JG2V.cjs → chunk-RJVHR45I.cjs} +7 -7
  111. package/dist/{chunk-NF55JG2V.cjs.map → chunk-RJVHR45I.cjs.map} +1 -1
  112. package/dist/{chunk-FDMYDIGI.js → chunk-SDUGYJGW.js} +22 -14
  113. package/dist/chunk-SDUGYJGW.js.map +1 -0
  114. package/dist/{chunk-VRNCXYEP.js → chunk-SFFKQQ5Z.js} +4 -4
  115. package/dist/{chunk-AXPEJ5IG.cjs → chunk-TC5IC6OP.cjs} +3 -3
  116. package/dist/{chunk-AXPEJ5IG.cjs.map → chunk-TC5IC6OP.cjs.map} +1 -1
  117. package/dist/{chunk-BGBAZMFE.js → chunk-THCTUBX6.js} +8 -6
  118. package/dist/chunk-THCTUBX6.js.map +1 -0
  119. package/dist/{chunk-FXMRDNR6.cjs → chunk-TTLFY76J.cjs} +6 -6
  120. package/dist/{chunk-FXMRDNR6.cjs.map → chunk-TTLFY76J.cjs.map} +1 -1
  121. package/dist/{chunk-OZQKWDFH.cjs → chunk-V4BZWBZT.cjs} +7 -7
  122. package/dist/{chunk-OZQKWDFH.cjs.map → chunk-V4BZWBZT.cjs.map} +1 -1
  123. package/dist/{chunk-27UANGPW.cjs → chunk-VQGLVBPL.cjs} +13 -11
  124. package/dist/chunk-VQGLVBPL.cjs.map +1 -0
  125. package/dist/{chunk-LIKSLFX6.js → chunk-WE2SBWZ6.js} +7 -7
  126. package/dist/{chunk-GPK2THIG.js → chunk-WNDDS367.js} +3 -3
  127. package/dist/{chunk-3S33BIN2.cjs → chunk-X3BVQBXD.cjs} +16 -16
  128. package/dist/{chunk-3S33BIN2.cjs.map → chunk-X3BVQBXD.cjs.map} +1 -1
  129. package/dist/{chunk-SKBKTNEQ.cjs → chunk-XERBOFYZ.cjs} +3 -3
  130. package/dist/{chunk-SKBKTNEQ.cjs.map → chunk-XERBOFYZ.cjs.map} +1 -1
  131. package/dist/{chunk-6LCYO2HG.cjs → chunk-XZLSHEHE.cjs} +40 -27
  132. package/dist/chunk-XZLSHEHE.cjs.map +1 -0
  133. package/dist/{chunk-CEC3GO4R.js → chunk-YAKTVIVK.js} +3 -3
  134. package/dist/{chunk-3WV6RTXX.js → chunk-YP4HUBKN.js} +2 -2
  135. package/dist/{chunk-XK5USBHB.js → chunk-YXRKBKFB.js} +3 -3
  136. package/dist/{chunk-MW4YZVP5.cjs → chunk-ZMRINZIO.cjs} +17 -24
  137. package/dist/chunk-ZMRINZIO.cjs.map +1 -0
  138. package/dist/color-picker/index.cjs +4 -4
  139. package/dist/color-picker/index.js +3 -3
  140. package/dist/combobox/index.cjs +6 -6
  141. package/dist/combobox/index.js +5 -5
  142. package/dist/command-palette/index.cjs +3 -3
  143. package/dist/command-palette/index.js +2 -2
  144. package/dist/context-menu/index.cjs +6 -6
  145. package/dist/context-menu/index.d.cts +1 -1
  146. package/dist/context-menu/index.d.ts +1 -1
  147. package/dist/context-menu/index.js +5 -5
  148. package/dist/conversation/index.cjs +8 -8
  149. package/dist/conversation/index.d.cts +1 -1
  150. package/dist/conversation/index.d.ts +1 -1
  151. package/dist/conversation/index.js +7 -7
  152. package/dist/data-grid/index.cjs +15 -15
  153. package/dist/data-grid/index.d.cts +13 -14
  154. package/dist/data-grid/index.d.ts +13 -14
  155. package/dist/data-grid/index.js +14 -14
  156. package/dist/date-picker/index.cjs +8 -8
  157. package/dist/date-picker/index.d.cts +11 -1
  158. package/dist/date-picker/index.d.ts +11 -1
  159. package/dist/date-picker/index.js +7 -7
  160. package/dist/drawer/index.cjs +5 -5
  161. package/dist/drawer/index.js +4 -4
  162. package/dist/dropdown/index.cjs +3 -3
  163. package/dist/dropdown/index.d.cts +34 -0
  164. package/dist/dropdown/index.d.ts +34 -0
  165. package/dist/dropdown/index.js +2 -2
  166. package/dist/header/index.cjs +6 -6
  167. package/dist/header/index.js +5 -5
  168. package/dist/index.cjs +37 -37
  169. package/dist/index.css +19 -2
  170. package/dist/index.d.cts +4 -4
  171. package/dist/index.d.ts +4 -4
  172. package/dist/index.js +36 -36
  173. package/dist/inline-edit/index.cjs +5 -5
  174. package/dist/inline-edit/index.js +4 -4
  175. package/dist/input/index.cjs +4 -4
  176. package/dist/input/index.js +3 -3
  177. package/dist/menu/index.cjs +5 -5
  178. package/dist/menu/index.d.cts +23 -2
  179. package/dist/menu/index.d.ts +23 -2
  180. package/dist/menu/index.js +4 -4
  181. package/dist/modal/index.cjs +5 -5
  182. package/dist/modal/index.js +4 -4
  183. package/dist/navigation/index.cjs +5 -5
  184. package/dist/navigation/index.js +4 -4
  185. package/dist/number-input/index.cjs +3 -3
  186. package/dist/number-input/index.js +2 -2
  187. package/dist/page-layout/index.cjs +12 -12
  188. package/dist/page-layout/index.d.cts +2 -2
  189. package/dist/page-layout/index.d.ts +2 -2
  190. package/dist/page-layout/index.js +11 -11
  191. package/dist/pagination/index.cjs +8 -8
  192. package/dist/pagination/index.js +7 -7
  193. package/dist/popover/index.cjs +3 -3
  194. package/dist/popover/index.d.cts +3 -1
  195. package/dist/popover/index.d.ts +3 -1
  196. package/dist/popover/index.js +2 -2
  197. package/dist/segmented-control/index.cjs +4 -4
  198. package/dist/segmented-control/index.js +3 -3
  199. package/dist/select/index.cjs +6 -6
  200. package/dist/select/index.d.cts +2 -2
  201. package/dist/select/index.d.ts +2 -2
  202. package/dist/select/index.js +5 -5
  203. package/dist/snackbar/index.cjs +5 -5
  204. package/dist/snackbar/index.js +4 -4
  205. package/dist/split-button/index.cjs +6 -6
  206. package/dist/split-button/index.js +5 -5
  207. package/dist/table/index.cjs +13 -13
  208. package/dist/table/index.d.cts +2 -2
  209. package/dist/table/index.d.ts +2 -2
  210. package/dist/table/index.js +12 -12
  211. package/dist/tabs/index.cjs +3 -3
  212. package/dist/tabs/index.js +2 -2
  213. package/dist/tag-input/index.cjs +6 -6
  214. package/dist/tag-input/index.js +5 -5
  215. package/dist/textarea/index.cjs +4 -4
  216. package/dist/textarea/index.js +3 -3
  217. package/dist/theme-editor/index.cjs +11 -11
  218. package/dist/theme-editor/index.js +10 -10
  219. package/dist/theme-provider/index.cjs +3 -3
  220. package/dist/theme-provider/index.js +2 -2
  221. package/dist/toolbar/index.cjs +8 -8
  222. package/dist/toolbar/index.d.cts +3 -3
  223. package/dist/toolbar/index.d.ts +3 -3
  224. package/dist/toolbar/index.js +7 -7
  225. package/dist/tooltip/index.cjs +3 -3
  226. package/dist/tooltip/index.js +2 -2
  227. package/package.json +1 -1
  228. package/dist/chunk-22EKNTWJ.js.map +0 -1
  229. package/dist/chunk-27UANGPW.cjs.map +0 -1
  230. package/dist/chunk-4LET2PEX.cjs.map +0 -1
  231. package/dist/chunk-5V7DXZWT.cjs.map +0 -1
  232. package/dist/chunk-67EXHO4T.js.map +0 -1
  233. package/dist/chunk-6LCYO2HG.cjs.map +0 -1
  234. package/dist/chunk-7KVXXHFX.cjs.map +0 -1
  235. package/dist/chunk-BGBAZMFE.js.map +0 -1
  236. package/dist/chunk-CP335H4Q.js +0 -125
  237. package/dist/chunk-CP335H4Q.js.map +0 -1
  238. package/dist/chunk-FDMYDIGI.js.map +0 -1
  239. package/dist/chunk-FPLX5FIK.js.map +0 -1
  240. package/dist/chunk-G74DHVHV.cjs +0 -125
  241. package/dist/chunk-G74DHVHV.cjs.map +0 -1
  242. package/dist/chunk-IXVM2XNS.js.map +0 -1
  243. package/dist/chunk-JKBBHAIC.cjs.map +0 -1
  244. package/dist/chunk-LH5A2SIX.js.map +0 -1
  245. package/dist/chunk-MLUHM3VG.cjs.map +0 -1
  246. package/dist/chunk-MW4YZVP5.cjs.map +0 -1
  247. package/dist/chunk-N77VOYCK.cjs.map +0 -1
  248. package/dist/chunk-O46UJUZM.cjs.map +0 -1
  249. package/dist/chunk-P7J6WZTO.cjs.map +0 -1
  250. package/dist/chunk-SVCWSW2F.js.map +0 -1
  251. package/dist/chunk-TLECMA3B.js.map +0 -1
  252. package/dist/chunk-TWXZKUCG.cjs.map +0 -1
  253. package/dist/chunk-UDRAM6JU.js.map +0 -1
  254. package/dist/chunk-VHSTB7GB.cjs.map +0 -1
  255. package/dist/chunk-WGCGSM5P.js.map +0 -1
  256. package/dist/chunk-WT4WBHBR.js.map +0 -1
  257. package/dist/chunk-XO7WTE6O.js.map +0 -1
  258. /package/dist/{chunk-BBU7QG7L.js.map → chunk-26SO4LZ5.js.map} +0 -0
  259. /package/dist/{chunk-Y7VSWZWM.js.map → chunk-2JW3WSBF.js.map} +0 -0
  260. /package/dist/{chunk-TYGVKSL6.js.map → chunk-4LNTZPSQ.js.map} +0 -0
  261. /package/dist/{chunk-44T4HMFU.js.map → chunk-75GFIQRU.js.map} +0 -0
  262. /package/dist/{chunk-PG2EII6U.js.map → chunk-A3LMUPG3.js.map} +0 -0
  263. /package/dist/{chunk-BO4LTIJI.js.map → chunk-AR2ZOO6L.js.map} +0 -0
  264. /package/dist/{chunk-MP7LN5CW.js.map → chunk-D7SQ7LHJ.js.map} +0 -0
  265. /package/dist/{chunk-X6UKU3C3.js.map → chunk-GPVGGBIR.js.map} +0 -0
  266. /package/dist/{chunk-NACA72XI.js.map → chunk-GWHZFX2H.js.map} +0 -0
  267. /package/dist/{chunk-YIBPOLNN.js.map → chunk-HEX4IMLO.js.map} +0 -0
  268. /package/dist/{chunk-SCLFJHN2.js.map → chunk-L65MHFMD.js.map} +0 -0
  269. /package/dist/{chunk-OIXPYXR6.js.map → chunk-MPIVBAMY.js.map} +0 -0
  270. /package/dist/{chunk-DMOZURHV.js.map → chunk-O3QM3BFE.js.map} +0 -0
  271. /package/dist/{chunk-SFRILDXY.js.map → chunk-OOCCSMWM.js.map} +0 -0
  272. /package/dist/{chunk-EWTMX4DK.js.map → chunk-RHFD2Z5V.js.map} +0 -0
  273. /package/dist/{chunk-VRNCXYEP.js.map → chunk-SFFKQQ5Z.js.map} +0 -0
  274. /package/dist/{chunk-LIKSLFX6.js.map → chunk-WE2SBWZ6.js.map} +0 -0
  275. /package/dist/{chunk-GPK2THIG.js.map → chunk-WNDDS367.js.map} +0 -0
  276. /package/dist/{chunk-CEC3GO4R.js.map → chunk-YAKTVIVK.js.map} +0 -0
  277. /package/dist/{chunk-3WV6RTXX.js.map → chunk-YP4HUBKN.js.map} +0 -0
  278. /package/dist/{chunk-XK5USBHB.js.map → chunk-YXRKBKFB.js.map} +0 -0
@@ -1,13 +1,14 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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; }
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 _chunkNCZUQFKLcjs = require('./chunk-NCZUQFKL.cjs');
3
+ var _chunk7VJCGKVPcjs = require('./chunk-7VJCGKVP.cjs');
4
4
 
5
5
 
6
- var _chunkP7J6WZTOcjs = require('./chunk-P7J6WZTO.cjs');
6
+ var _chunkKIZVY57Hcjs = require('./chunk-KIZVY57H.cjs');
7
7
 
8
8
 
9
9
 
10
- var _chunkVHSTB7GBcjs = require('./chunk-VHSTB7GB.cjs');
10
+
11
+ var _chunk35LGEPLPcjs = require('./chunk-35LGEPLP.cjs');
11
12
 
12
13
  // src/components/Select/Select.component.tsx
13
14
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -21,6 +22,7 @@ var Select = _react2.default.forwardRef(
21
22
  onChange,
22
23
  className = "",
23
24
  multiple = false,
25
+ label,
24
26
  placeholder = "Select an option...",
25
27
  disabled = false,
26
28
  inputProps = {},
@@ -45,9 +47,8 @@ var Select = _react2.default.forwardRef(
45
47
  }
46
48
  return /* @__PURE__ */ new Set();
47
49
  });
48
- const [menuKey, setMenuKey] = _react.useState.call(void 0, 0);
49
50
  const [focusedIndex, setFocusedIndex] = _react.useState.call(void 0, -1);
50
- const [isOpen, setIsOpen] = _react.useState.call(void 0, false);
51
+ const [isOpen, setIsOpen] = _react.useState.call(void 0, autoOpen);
51
52
  const inputRef = _react.useRef.call(void 0, null);
52
53
  const triggerRef = _react.useRef.call(void 0, null);
53
54
  const optionRefs = _react.useRef.call(void 0, []);
@@ -95,7 +96,7 @@ var Select = _react2.default.forwardRef(
95
96
  }
96
97
  if (!multiple) {
97
98
  setIsOpen(false);
98
- setMenuKey((prev) => prev + 1);
99
+ _optionalChain([inputRef, 'access', _ => _.current, 'optionalAccess', _2 => _2.focus, 'call', _3 => _3()]);
99
100
  }
100
101
  },
101
102
  [multiple, onChange, selectedValues, isControlled]
@@ -109,13 +110,24 @@ var Select = _react2.default.forwardRef(
109
110
  setSelectedValues(/* @__PURE__ */ new Set());
110
111
  }
111
112
  setIsOpen(false);
112
- setMenuKey((prev) => prev + 1);
113
+ _optionalChain([inputRef, 'access', _4 => _4.current, 'optionalAccess', _5 => _5.focus, 'call', _6 => _6()]);
113
114
  if (onChange) {
114
115
  onChange(multiple ? [] : "");
115
116
  }
116
117
  },
117
118
  [multiple, onChange, isControlled]
118
119
  );
120
+ _react.useEffect.call(void 0, () => {
121
+ const element = inputRef.current;
122
+ if (!element) return;
123
+ const named = (_nullishCoalesce(_optionalChain([element, 'access', _7 => _7.labels, 'optionalAccess', _8 => _8.length]), () => ( 0))) > 0 || element.hasAttribute("aria-label") || element.hasAttribute("aria-labelledby");
124
+ if (!named) {
125
+ _chunk35LGEPLPcjs.devWarn.call(void 0,
126
+ "select-missing-label",
127
+ 'Select: no accessible name. Pass `label` for a visible one, or `inputProps={{ "aria-label": "..." }}` where it must stay visually unlabelled - otherwise the field is announced as just "combobox". A placeholder is not a label, and disappears as soon as something is chosen.'
128
+ );
129
+ }
130
+ }, []);
119
131
  const handleKeyDown = _react.useCallback.call(void 0,
120
132
  (e) => {
121
133
  if (disabled) return;
@@ -129,7 +141,7 @@ var Select = _react2.default.forwardRef(
129
141
  setFocusedIndex((prev) => {
130
142
  const nextIndex = prev < options.length - 1 ? prev + 1 : 0;
131
143
  setTimeout(() => {
132
- _optionalChain([optionRefs, 'access', _ => _.current, 'access', _2 => _2[nextIndex], 'optionalAccess', _3 => _3.scrollIntoView, 'call', _4 => _4({
144
+ _optionalChain([optionRefs, 'access', _9 => _9.current, 'access', _10 => _10[nextIndex], 'optionalAccess', _11 => _11.scrollIntoView, 'call', _12 => _12({
133
145
  block: "nearest",
134
146
  behavior: "smooth"
135
147
  })]);
@@ -147,7 +159,7 @@ var Select = _react2.default.forwardRef(
147
159
  setFocusedIndex((prev) => {
148
160
  const nextIndex = prev > 0 ? prev - 1 : options.length - 1;
149
161
  setTimeout(() => {
150
- _optionalChain([optionRefs, 'access', _5 => _5.current, 'access', _6 => _6[nextIndex], 'optionalAccess', _7 => _7.scrollIntoView, 'call', _8 => _8({
162
+ _optionalChain([optionRefs, 'access', _13 => _13.current, 'access', _14 => _14[nextIndex], 'optionalAccess', _15 => _15.scrollIntoView, 'call', _16 => _16({
151
163
  block: "nearest",
152
164
  behavior: "smooth"
153
165
  })]);
@@ -172,14 +184,13 @@ var Select = _react2.default.forwardRef(
172
184
  if (isOpen) {
173
185
  setIsOpen(false);
174
186
  setFocusedIndex(-1);
175
- setMenuKey((prev) => prev + 1);
176
187
  }
177
188
  break;
178
189
  case "Home":
179
190
  e.preventDefault();
180
191
  if (isOpen) {
181
192
  setFocusedIndex(0);
182
- _optionalChain([optionRefs, 'access', _9 => _9.current, 'access', _10 => _10[0], 'optionalAccess', _11 => _11.scrollIntoView, 'call', _12 => _12({
193
+ _optionalChain([optionRefs, 'access', _17 => _17.current, 'access', _18 => _18[0], 'optionalAccess', _19 => _19.scrollIntoView, 'call', _20 => _20({
183
194
  block: "nearest",
184
195
  behavior: "smooth"
185
196
  })]);
@@ -190,7 +201,7 @@ var Select = _react2.default.forwardRef(
190
201
  if (isOpen) {
191
202
  const lastIndex = options.length - 1;
192
203
  setFocusedIndex(lastIndex);
193
- _optionalChain([optionRefs, 'access', _13 => _13.current, 'access', _14 => _14[lastIndex], 'optionalAccess', _15 => _15.scrollIntoView, 'call', _16 => _16({
204
+ _optionalChain([optionRefs, 'access', _21 => _21.current, 'access', _22 => _22[lastIndex], 'optionalAccess', _23 => _23.scrollIntoView, 'call', _24 => _24({
194
205
  block: "nearest",
195
206
  behavior: "smooth"
196
207
  })]);
@@ -204,7 +215,7 @@ var Select = _react2.default.forwardRef(
204
215
  );
205
216
  if (foundIndex !== -1) {
206
217
  setFocusedIndex(foundIndex);
207
- _optionalChain([optionRefs, 'access', _17 => _17.current, 'access', _18 => _18[foundIndex], 'optionalAccess', _19 => _19.scrollIntoView, 'call', _20 => _20({
218
+ _optionalChain([optionRefs, 'access', _25 => _25.current, 'access', _26 => _26[foundIndex], 'optionalAccess', _27 => _27.scrollIntoView, 'call', _28 => _28({
208
219
  block: "nearest",
209
220
  behavior: "smooth"
210
221
  })]);
@@ -214,7 +225,7 @@ var Select = _react2.default.forwardRef(
214
225
  );
215
226
  if (foundFromStart !== -1) {
216
227
  setFocusedIndex(foundFromStart);
217
- _optionalChain([optionRefs, 'access', _21 => _21.current, 'access', _22 => _22[foundFromStart], 'optionalAccess', _23 => _23.scrollIntoView, 'call', _24 => _24({
228
+ _optionalChain([optionRefs, 'access', _29 => _29.current, 'access', _30 => _30[foundFromStart], 'optionalAccess', _31 => _31.scrollIntoView, 'call', _32 => _32({
218
229
  block: "nearest",
219
230
  behavior: "smooth"
220
231
  })]);
@@ -232,7 +243,7 @@ var Select = _react2.default.forwardRef(
232
243
  (option) => selectedValuesRef.current.has(option.value)
233
244
  );
234
245
  if (idx === -1) return;
235
- _optionalChain([optionRefs, 'access', _25 => _25.current, 'access', _26 => _26[idx], 'optionalAccess', _27 => _27.scrollIntoView, 'call', _28 => _28({ block: "nearest" })]);
246
+ _optionalChain([optionRefs, 'access', _33 => _33.current, 'access', _34 => _34[idx], 'optionalAccess', _35 => _35.scrollIntoView, 'call', _36 => _36({ block: "nearest" })]);
236
247
  }, []);
237
248
  const COMPACT_LABEL_THRESHOLD = 2;
238
249
  const displayValue = _react.useMemo.call(void 0, () => {
@@ -251,6 +262,7 @@ var Select = _react2.default.forwardRef(
251
262
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
252
263
  "div",
253
264
  {
265
+ id: `${id || "select"}-option-${index}`,
254
266
  ref: (el) => {
255
267
  optionRefs.current[index] = el;
256
268
  },
@@ -266,7 +278,7 @@ var Select = _react2.default.forwardRef(
266
278
  "aria-selected": isSelected,
267
279
  "aria-disabled": option.disabled,
268
280
  children: [
269
- option.icon && _chunkVHSTB7GBcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
281
+ option.icon && _chunk35LGEPLPcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
270
282
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-select-option-label", children: option.label }),
271
283
  isSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "eidos-select-option-check-icon" })
272
284
  ]
@@ -274,22 +286,22 @@ var Select = _react2.default.forwardRef(
274
286
  option.id
275
287
  );
276
288
  }) }),
277
- [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount]
289
+ [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount, id]
278
290
  );
279
291
  const triggerElement = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
280
292
  "div",
281
293
  {
282
294
  ref: triggerRef,
283
- className: `eidos-select-trigger ${fullWidth ? _chunkVHSTB7GBcjs.fullWidthModifier.call(void 0, "eidos-select-trigger") : ""}`,
295
+ className: `eidos-select-trigger ${fullWidth ? _chunk35LGEPLPcjs.fullWidthModifier.call(void 0, "eidos-select-trigger") : ""}`,
284
296
  onKeyDown: handleKeyDown,
285
297
  tabIndex: disabled ? -1 : void 0,
286
298
  role: "combobox",
287
299
  "aria-expanded": isOpen,
288
300
  "aria-haspopup": "listbox",
289
- "aria-controls": `${id || "select"}-options`,
301
+ "aria-controls": isOpen ? `${id || "select"}-options` : void 0,
290
302
  "aria-activedescendant": focusedIndex >= 0 ? `${id || "select"}-option-${focusedIndex}` : void 0,
291
303
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
292
- _chunkNCZUQFKLcjs.Input,
304
+ _chunk7VJCGKVPcjs.Input,
293
305
  {
294
306
  ref: inputRef,
295
307
  value: selectedValues.size > 0 ? displayValue : "",
@@ -301,6 +313,7 @@ var Select = _react2.default.forwardRef(
301
313
  disabled,
302
314
  readOnly: true,
303
315
  isSelect: true,
316
+ label,
304
317
  name,
305
318
  id,
306
319
  required,
@@ -314,11 +327,12 @@ var Select = _react2.default.forwardRef(
314
327
  "div",
315
328
  {
316
329
  ref,
317
- className: `${"eidos-select-container"} ${fullWidth ? _chunkVHSTB7GBcjs.fullWidthModifier.call(void 0, "eidos-select-container") : ""} ${className}`,
330
+ className: `${"eidos-select-container"} ${fullWidth ? _chunk35LGEPLPcjs.fullWidthModifier.call(void 0, "eidos-select-container") : ""} ${className}`,
318
331
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
319
- _chunkP7J6WZTOcjs.Dropdown,
332
+ _chunkKIZVY57Hcjs.Dropdown,
320
333
  {
321
- defaultOpen: autoOpen,
334
+ open: isOpen,
335
+ onOpenChange: setIsOpen,
322
336
  trigger: triggerElement,
323
337
  content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { id: `${id || "select"}-options`, role: "listbox", "aria-multiselectable": multiple, children: selectContent }),
324
338
  minWidth,
@@ -329,8 +343,7 @@ var Select = _react2.default.forwardRef(
329
343
  fullWidth,
330
344
  triggerRef,
331
345
  ...dropdownProps
332
- },
333
- menuKey
346
+ }
334
347
  )
335
348
  }
336
349
  );
@@ -341,4 +354,4 @@ Select.displayName = "Select";
341
354
 
342
355
 
343
356
  exports.Select = Select;
344
- //# sourceMappingURL=chunk-6LCYO2HG.cjs.map
357
+ //# sourceMappingURL=chunk-XZLSHEHE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-XZLSHEHE.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-XZLSHEHE.cjs","sourcesContent":[null,"import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { SelectProps, SelectOption } from './Select.types';\nimport { renderIcon, fullWidthModifier, devWarn } from '../../utils';\n\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n value,\n defaultValue,\n onChange,\n className = '',\n multiple = false,\n label,\n placeholder = 'Select an option...',\n disabled = false,\n inputProps = {},\n name,\n id,\n required = false,\n fullWidth = false,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight = '300px',\n autoWidth = true,\n clearable = true,\n autoOpen = false,\n dropdownProps = {},\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n\n // Lazy initializer: seed from defaultValue in uncontrolled mode.\n const [selectedValues, setSelectedValues] = useState<Set<string>>(() => {\n if (defaultValue !== undefined) {\n const vals = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n return new Set(vals.filter((v) => v !== ''));\n }\n return new Set();\n });\n\n const [focusedIndex, setFocusedIndex] = useState(-1);\n // `Select` owns the open state and hands it to `Dropdown` as a controlled\n // value. It used to keep this flag *and* force the dropdown closed by\n // remounting it through a changing `key`, because `Dropdown`'s own state was\n // private - which meant this flag drove the ARIA attributes while reaching\n // nothing that renders, so the keyboard could not open the listbox at all.\n const [isOpen, setIsOpen] = useState(autoOpen);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Kept in sync every render so the mount-only callback ref below can\n // read the latest values without needing them in its dependency array\n // (see `handleOptionsMount`).\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n useEffect(() => {\n if (value !== undefined) {\n const values = Array.isArray(value) ? value : [value];\n\n const validValues = values.filter((v) => v !== '');\n setSelectedValues(new Set(validValues));\n }\n }, [value]);\n\n useEffect(() => {\n setFocusedIndex(-1);\n }, [options]);\n\n useEffect(() => {\n optionRefs.current = optionRefs.current.slice(0, options.length);\n }, [options.length]);\n\n const handleOptionSelect = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n\n const newSelectedValues = new Set(selectedValues);\n\n if (multiple) {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.delete(option.value);\n } else {\n newSelectedValues.add(option.value);\n }\n } else {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.clear();\n } else {\n newSelectedValues.clear();\n newSelectedValues.add(option.value);\n }\n }\n\n // In uncontrolled mode, own the state directly.\n // In controlled mode, let the parent drive via value prop + useEffect sync.\n if (!isControlled) {\n setSelectedValues(newSelectedValues);\n }\n\n if (onChange) {\n const newValue = multiple\n ? Array.from(newSelectedValues)\n : Array.from(newSelectedValues)[0] || '';\n onChange(newValue);\n }\n\n if (!multiple) {\n setIsOpen(false);\n // Focus is returned explicitly because a click lands on an option\n // `div`, which is not focusable - without this, choosing with the\n // mouse would leave focus on `<body>` and the field would be\n // unreachable by keyboard until tabbed to again.\n inputRef.current?.focus();\n }\n },\n [multiple, onChange, selectedValues, isControlled],\n );\n\n const handleClear = useCallback(\n (e?: React.MouseEvent) => {\n if (e) {\n e.stopPropagation();\n }\n if (!isControlled) {\n setSelectedValues(new Set());\n }\n\n setIsOpen(false);\n inputRef.current?.focus();\n if (onChange) {\n onChange(multiple ? [] : '');\n }\n },\n [multiple, onChange, isControlled],\n );\n\n // A form control with no accessible name is announced as just \"combobox\".\n // `Select` was the only field in the library that could not be labelled\n // without knowing about `inputProps`, and three call sites duly shipped\n // without one - so the gap is closed from both ends: a first-class `label`\n // prop, and this warning.\n //\n // Measured from the DOM rather than from props, because a caller may name\n // the field with an external `<label for>` - `Pagination`'s page-size\n // picker does exactly that, and a props-only check would cry wolf at it.\n // `HTMLInputElement.labels` covers both wrapping and `for` labels.\n useEffect(() => {\n const element = inputRef.current;\n if (!element) return;\n const named =\n (element.labels?.length ?? 0) > 0 ||\n element.hasAttribute('aria-label') ||\n element.hasAttribute('aria-labelledby');\n if (!named) {\n devWarn(\n 'select-missing-label',\n 'Select: no accessible name. Pass `label` for a visible one, or `inputProps={{ \"aria-label\": \"...\" }}` where it must stay visually unlabelled - otherwise the field is announced as just \"combobox\". A placeholder is not a label, and disappears as soon as something is chosen.',\n );\n }\n }, []);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev < options.length - 1 ? prev + 1 : 0;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(options.length - 1);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev > 0 ? prev - 1 : options.length - 1;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else if (focusedIndex >= 0 && focusedIndex < options.length) {\n const focusedOption = options[focusedIndex];\n handleOptionSelect(focusedOption);\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n setFocusedIndex(-1);\n }\n break;\n\n case 'Home':\n e.preventDefault();\n if (isOpen) {\n setFocusedIndex(0);\n optionRefs.current[0]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n case 'End':\n e.preventDefault();\n if (isOpen) {\n const lastIndex = options.length - 1;\n setFocusedIndex(lastIndex);\n optionRefs.current[lastIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n default:\n if (isOpen && e.key.length === 1 && /[a-zA-Z0-9]/.test(e.key)) {\n const searchChar = e.key.toLowerCase();\n const foundIndex = options.findIndex(\n (option, index) =>\n index > focusedIndex && option.label.toLowerCase().startsWith(searchChar),\n );\n\n if (foundIndex !== -1) {\n setFocusedIndex(foundIndex);\n optionRefs.current[foundIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n } else {\n const foundFromStart = options.findIndex((option) =>\n option.label.toLowerCase().startsWith(searchChar),\n );\n if (foundFromStart !== -1) {\n setFocusedIndex(foundFromStart);\n optionRefs.current[foundFromStart]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }\n }\n break;\n }\n },\n [disabled, isOpen, options, focusedIndex, handleOptionSelect],\n );\n\n // Scrolls the first selected option into view. Attached as the options\n // list's own ref below with an empty dependency array, so its identity\n // never changes and React only invokes it on genuine DOM mount/unmount -\n // i.e. exactly when the dropdown opens/closes (Dropdown unmounts its\n // `content` entirely while closed), not on every re-render while open.\n const handleOptionsMount = useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n const idx = optionsRef.current.findIndex((option) =>\n selectedValuesRef.current.has(option.value),\n );\n if (idx === -1) return;\n optionRefs.current[idx]?.scrollIntoView({ block: 'nearest' });\n }, []);\n\n // Past this many selections the full comma-joined label list becomes\n // unreadable in the trigger, so we switch to a compact \"N selected\" label.\n const COMPACT_LABEL_THRESHOLD = 2;\n\n const displayValue = useMemo(() => {\n if (selectedValues.size === 0) return '';\n\n if (multiple && selectedValues.size > COMPACT_LABEL_THRESHOLD) {\n return `${selectedValues.size} selected`;\n }\n\n const selectedOptions = options.filter((option) => selectedValues.has(option.value));\n const text = selectedOptions.map((option) => option.label).join(', ');\n return text;\n }, [options, selectedValues, multiple]);\n\n const selectContent = useMemo(\n () => (\n <div className={'eidos-select-options'} ref={handleOptionsMount}>\n {options.map((option, index) => {\n const isSelected = selectedValues.has(option.value);\n const isFocused = index === focusedIndex;\n return (\n <div\n key={option.id}\n // The trigger points `aria-activedescendant` at\n // `${id}-option-${focusedIndex}`, and nothing carried that id -\n // so the moment an option was hovered or arrowed to, the\n // attribute referenced an element that did not exist\n // (`aria-valid-attr-value`, critical). Invisible to axe until a\n // story left the listbox open, because the attribute is only\n // set once something is focused.\n id={`${id || 'select'}-option-${index}`}\n ref={(el) => {\n optionRefs.current[index] = el;\n }}\n className={`\n\t\t\t\t\t\t\t\t\t\t${'eidos-select-option'}\n\t\t\t\t\t\t\t\t\t\t${isSelected ? 'eidos-select-option--selected' : ''}\n\t\t\t\t\t\t\t\t\t\t${option.disabled ? 'eidos-select-option--disabled' : ''}\n\t\t\t\t\t\t\t\t\t\t${isFocused ? 'eidos-select-option--focused' : ''}\n\t\t\t\t\t\t\t\t\t`.trim()}\n onClick={() => handleOptionSelect(option)}\n onMouseEnter={() => setFocusedIndex(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.icon && renderIcon(option.icon, 'eidos-select-option-icon')}\n <span className={'eidos-select-option-label'}>{option.label}</span>\n {isSelected && <Check className={'eidos-select-option-check-icon'} />}\n </div>\n );\n })}\n </div>\n ),\n [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount, id],\n );\n\n const triggerElement = (\n <div\n ref={triggerRef}\n className={`eidos-select-trigger ${fullWidth ? fullWidthModifier('eidos-select-trigger') : ''}`}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : undefined}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n // Only while the listbox exists. An `aria-controls` pointing at an id\n // that is not in the document is invalid, and the listbox only renders\n // while open - `Combobox`, `TagInput` and `CommandPalette` already gate\n // theirs this way. It could not be gated here before, because `isOpen`\n // did not track whether the panel had actually rendered.\n aria-controls={isOpen ? `${id || 'select'}-options` : undefined}\n aria-activedescendant={\n focusedIndex >= 0 ? `${id || 'select'}-option-${focusedIndex}` : undefined\n }\n >\n <Input\n ref={inputRef}\n value={selectedValues.size > 0 ? displayValue : ''}\n placeholder={selectedValues.size === 0 ? placeholder : ''}\n posIcon={selectedValues.size > 0 && clearable ? X : undefined}\n posIconButton={selectedValues.size > 0 && clearable}\n onPosIconClick={selectedValues.size > 0 && clearable ? handleClear : undefined}\n posIconLabel=\"Clear selection\"\n disabled={disabled}\n readOnly={true}\n isSelect={true}\n label={label}\n name={name}\n id={id}\n required={required}\n fullWidth={fullWidth}\n {...inputProps}\n />\n </div>\n );\n\n return (\n <div\n ref={ref}\n className={`${'eidos-select-container'} ${\n fullWidth ? fullWidthModifier('eidos-select-container') : ''\n } ${className}`}\n >\n <Dropdown\n open={isOpen}\n onOpenChange={setIsOpen}\n trigger={triggerElement}\n content={\n <div id={`${id || 'select'}-options`} role=\"listbox\" aria-multiselectable={multiple}>\n {selectContent}\n </div>\n }\n minWidth={minWidth}\n maxWidth={maxWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n autoWidth={autoWidth}\n fullWidth={fullWidth}\n triggerRef={triggerRef as React.RefObject<HTMLElement | null>}\n {...dropdownProps}\n />\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  Tooltip
3
- } from "./chunk-XO7WTE6O.js";
3
+ } from "./chunk-JNY7TUDS.js";
4
4
  import {
5
5
  devWarn,
6
6
  fullWidthModifier,
7
7
  renderIcon
8
- } from "./chunk-WT4WBHBR.js";
8
+ } from "./chunk-RHHZRTWM.js";
9
9
 
10
10
  // src/components/Input/Input.component.tsx
11
11
  import { forwardRef, useState, useId } from "react";
@@ -242,4 +242,4 @@ Input.displayName = "Input";
242
242
  export {
243
243
  Input
244
244
  };
245
- //# sourceMappingURL=chunk-CEC3GO4R.js.map
245
+ //# sourceMappingURL=chunk-YAKTVIVK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Input
3
- } from "./chunk-CEC3GO4R.js";
3
+ } from "./chunk-YAKTVIVK.js";
4
4
 
5
5
  // src/components/InlineEdit/InlineEdit.component.tsx
6
6
  import { useState, useRef, useCallback } from "react";
@@ -122,4 +122,4 @@ var InlineEdit = ({
122
122
  export {
123
123
  InlineEdit
124
124
  };
125
- //# sourceMappingURL=chunk-3WV6RTXX.js.map
125
+ //# sourceMappingURL=chunk-YP4HUBKN.js.map
@@ -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
  fullWidthModifier,
6
6
  renderIcon
7
- } from "./chunk-WT4WBHBR.js";
7
+ } from "./chunk-RHHZRTWM.js";
8
8
 
9
9
  // src/components/Textarea/Textarea.component.tsx
10
10
  import { forwardRef, useState, useId } from "react";
@@ -127,4 +127,4 @@ Textarea.displayName = "Textarea";
127
127
  export {
128
128
  Textarea
129
129
  };
130
- //# sourceMappingURL=chunk-XK5USBHB.js.map
130
+ //# sourceMappingURL=chunk-YXRKBKFB.js.map
@@ -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 _chunkFXMRDNR6cjs = require('./chunk-FXMRDNR6.cjs');
3
+ var _chunkTTLFY76Jcjs = require('./chunk-TTLFY76J.cjs');
4
4
 
5
5
 
6
- var _chunkP7J6WZTOcjs = require('./chunk-P7J6WZTO.cjs');
6
+ var _chunkKIZVY57Hcjs = require('./chunk-KIZVY57H.cjs');
7
7
 
8
8
  // src/components/TagInput/TagInput.component.tsx
9
9
  var _react = require('react');
@@ -34,11 +34,12 @@ var TagInput = ({
34
34
  const inputRef = _react.useRef.call(void 0, null);
35
35
  const containerRef = _react.useRef.call(void 0, null);
36
36
  const fieldRef = _react.useRef.call(void 0, null);
37
- const dropdownSpanRef = _react.useRef.call(void 0, null);
38
37
  const hasSuggestions = suggestions !== void 0;
39
- const isSuggestionsOpenRef = _react.useRef.call(void 0, false);
40
38
  const [isSuggestionsOpen, setIsSuggestionsOpen] = _react.useState.call(void 0, false);
41
- const [suggestionsMenuKey, setSuggestionsMenuKey] = _react.useState.call(void 0, 0);
39
+ const isSuggestionsOpenRef = _react.useRef.call(void 0, isSuggestionsOpen);
40
+ _react.useEffect.call(void 0, () => {
41
+ isSuggestionsOpenRef.current = isSuggestionsOpen;
42
+ }, [isSuggestionsOpen]);
42
43
  const [focusedSuggestionIndex, setFocusedSuggestionIndex] = _react.useState.call(void 0, -1);
43
44
  const isControlled = value !== void 0;
44
45
  const [internalTags, setInternalTags] = _react.useState.call(void 0, defaultValue);
@@ -95,7 +96,6 @@ var TagInput = ({
95
96
  }, [filteredSuggestions]);
96
97
  const openSuggestions = _react.useCallback.call(void 0, () => {
97
98
  if (isSuggestionsOpenRef.current || disabled || !hasSuggestions) return;
98
- _optionalChain([dropdownSpanRef, 'access', _3 => _3.current, 'optionalAccess', _4 => _4.click, 'call', _5 => _5()]);
99
99
  isSuggestionsOpenRef.current = true;
100
100
  setIsSuggestionsOpen(true);
101
101
  }, [disabled, hasSuggestions]);
@@ -103,13 +103,12 @@ var TagInput = ({
103
103
  isSuggestionsOpenRef.current = false;
104
104
  setIsSuggestionsOpen(false);
105
105
  setFocusedSuggestionIndex(-1);
106
- setSuggestionsMenuKey((prev) => prev + 1);
107
106
  }, []);
108
107
  const selectSuggestion = _react.useCallback.call(void 0,
109
108
  (suggestion) => {
110
109
  addTag(suggestion);
111
110
  closeSuggestions();
112
- _optionalChain([inputRef, 'access', _6 => _6.current, 'optionalAccess', _7 => _7.focus, 'call', _8 => _8()]);
111
+ _optionalChain([inputRef, 'access', _3 => _3.current, 'optionalAccess', _4 => _4.focus, 'call', _5 => _5()]);
113
112
  },
114
113
  [addTag, closeSuggestions]
115
114
  );
@@ -118,7 +117,7 @@ var TagInput = ({
118
117
  const handleMouseDown = (e) => {
119
118
  if (!isSuggestionsOpenRef.current) return;
120
119
  if (e.defaultPrevented) return;
121
- if (_optionalChain([containerRef, 'access', _9 => _9.current, 'optionalAccess', _10 => _10.contains, 'call', _11 => _11(e.target)])) return;
120
+ if (_optionalChain([containerRef, 'access', _6 => _6.current, 'optionalAccess', _7 => _7.contains, 'call', _8 => _8(e.target)])) return;
122
121
  closeSuggestions();
123
122
  };
124
123
  document.addEventListener("mousedown", handleMouseDown);
@@ -163,7 +162,7 @@ var TagInput = ({
163
162
  if (validationError) {
164
163
  setValidationError(null);
165
164
  }
166
- _optionalChain([onSearch, 'optionalCall', _12 => _12(query)]);
165
+ _optionalChain([onSearch, 'optionalCall', _9 => _9(query)]);
167
166
  if (hasSuggestions && !isSuggestionsOpenRef.current) openSuggestions();
168
167
  };
169
168
  const handleInputFocus = () => {
@@ -173,7 +172,7 @@ var TagInput = ({
173
172
  const handleFieldClick = (e) => {
174
173
  if (e.target.closest("button, input")) return;
175
174
  if (!disabled) {
176
- _optionalChain([inputRef, 'access', _13 => _13.current, 'optionalAccess', _14 => _14.focus, 'call', _15 => _15()]);
175
+ _optionalChain([inputRef, 'access', _10 => _10.current, 'optionalAccess', _11 => _11.focus, 'call', _12 => _12()]);
177
176
  }
178
177
  };
179
178
  const displayError = _nullishCoalesce(validationError, () => ( error));
@@ -203,7 +202,7 @@ var TagInput = ({
203
202
  label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { htmlFor: inputId, className: "eidos-tag-input-label", children: label }),
204
203
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: fieldClasses, onClick: handleFieldClick, ref: fieldRef, children: [
205
204
  tags.map((tag, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
206
- _chunkFXMRDNR6cjs.Chip,
205
+ _chunkTTLFY76Jcjs.Chip,
207
206
  {
208
207
  variant: "filled",
209
208
  color: "primary",
@@ -238,16 +237,11 @@ var TagInput = ({
238
237
  }
239
238
  ),
240
239
  hasSuggestions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
241
- _chunkP7J6WZTOcjs.Dropdown,
240
+ _chunkKIZVY57Hcjs.Dropdown,
242
241
  {
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
- ),
242
+ open: isSuggestionsOpen,
243
+ onOpenChange: setIsSuggestionsOpen,
244
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tag-input-dropdown-anchor", "aria-hidden": "true" }),
251
245
  content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
252
246
  "div",
253
247
  {
@@ -278,8 +272,7 @@ var TagInput = ({
278
272
  autoWidth: true,
279
273
  closeOnClickOutside: false,
280
274
  closeOnEscape: false
281
- },
282
- suggestionsMenuKey
275
+ }
283
276
  )
284
277
  ] }),
285
278
  hint && !hasError && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "eidos-tag-input-hint", id: hintId, children: hint }),
@@ -295,4 +288,4 @@ TagInput.displayName = "TagInput";
295
288
 
296
289
 
297
290
  exports.TagInput = TagInput;
298
- //# sourceMappingURL=chunk-MW4YZVP5.cjs.map
291
+ //# sourceMappingURL=chunk-ZMRINZIO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-ZMRINZIO.cjs","../src/components/TagInput/TagInput.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-ZMRINZIO.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\n const hasSuggestions = suggestions !== undefined;\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n // Read synchronously by the document `mousedown` listener and the key\n // handlers, where a value captured at render would be stale. Kept in step by\n // an effect rather than assigned at every call site, which is how the two\n // used to drift apart.\n const isSuggestionsOpenRef = useRef(isSuggestionsOpen);\n useEffect(() => {\n isSuggestionsOpenRef.current = isSuggestionsOpen;\n }, [isSuggestionsOpen]);\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 // This used to synthesise a click on a hidden zero-height `span` so that it\n // would bubble to the dropdown's trigger wrapper - the only way in, while\n // the overlay owned its open state privately.\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 }, []);\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 open={isSuggestionsOpen}\n onOpenChange={setIsSuggestionsOpen}\n // Positioning is anchored to the field via `triggerRef` below; this\n // span is only here because a trigger is required. It used to carry\n // a ref purely so `openSuggestions` could click it.\n trigger={<span className=\"eidos-tag-input-dropdown-anchor\" aria-hidden=\"true\" />}\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,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkFODRHCRPcjs = require('../chunk-FODRHCRP.cjs');
4
- require('../chunk-P7J6WZTO.cjs');
5
- require('../chunk-VHSTB7GB.cjs');
3
+ var _chunkKBQD4JLKcjs = require('../chunk-KBQD4JLK.cjs');
4
+ require('../chunk-KIZVY57H.cjs');
5
+ require('../chunk-35LGEPLP.cjs');
6
6
  require('../chunk-DZUJEN5N.cjs');
7
7
 
8
8
 
9
- exports.ColorPicker = _chunkFODRHCRPcjs.ColorPicker;
9
+ exports.ColorPicker = _chunkKBQD4JLKcjs.ColorPicker;
10
10
  //# sourceMappingURL=index.cjs.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ColorPicker
3
- } from "../chunk-TYGVKSL6.js";
4
- import "../chunk-67EXHO4T.js";
5
- import "../chunk-WT4WBHBR.js";
3
+ } from "../chunk-4LNTZPSQ.js";
4
+ import "../chunk-JHX6JK3M.js";
5
+ import "../chunk-RHHZRTWM.js";
6
6
  import "../chunk-5WRI5ZAA.js";
7
7
  export {
8
8
  ColorPicker
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk5V7DXZWTcjs = require('../chunk-5V7DXZWT.cjs');
4
- require('../chunk-NCZUQFKL.cjs');
5
- require('../chunk-P7J6WZTO.cjs');
6
- require('../chunk-MLUHM3VG.cjs');
7
- require('../chunk-VHSTB7GB.cjs');
3
+ var _chunk4AO5RKV5cjs = require('../chunk-4AO5RKV5.cjs');
4
+ require('../chunk-7VJCGKVP.cjs');
5
+ require('../chunk-KIZVY57H.cjs');
6
+ require('../chunk-BEOECPVJ.cjs');
7
+ require('../chunk-35LGEPLP.cjs');
8
8
  require('../chunk-DZUJEN5N.cjs');
9
9
 
10
10
 
11
- exports.Combobox = _chunk5V7DXZWTcjs.Combobox;
11
+ exports.Combobox = _chunk4AO5RKV5cjs.Combobox;
12
12
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Combobox
3
- } from "../chunk-LH5A2SIX.js";
4
- import "../chunk-CEC3GO4R.js";
5
- import "../chunk-67EXHO4T.js";
6
- import "../chunk-XO7WTE6O.js";
7
- import "../chunk-WT4WBHBR.js";
3
+ } from "../chunk-FIVMMCGM.js";
4
+ import "../chunk-YAKTVIVK.js";
5
+ import "../chunk-JHX6JK3M.js";
6
+ import "../chunk-JNY7TUDS.js";
7
+ import "../chunk-RHHZRTWM.js";
8
8
  import "../chunk-5WRI5ZAA.js";
9
9
  export {
10
10
  Combobox
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk4LET2PEXcjs = require('../chunk-4LET2PEX.cjs');
3
+ var _chunk2T7ZMMH5cjs = require('../chunk-2T7ZMMH5.cjs');
4
4
  require('../chunk-VW32UTUE.cjs');
5
5
  require('../chunk-KVIL4EP4.cjs');
6
- require('../chunk-VHSTB7GB.cjs');
6
+ require('../chunk-35LGEPLP.cjs');
7
7
  require('../chunk-DZUJEN5N.cjs');
8
8
 
9
9
 
10
- exports.CommandPalette = _chunk4LET2PEXcjs.CommandPalette;
10
+ exports.CommandPalette = _chunk2T7ZMMH5cjs.CommandPalette;
11
11
  //# sourceMappingURL=index.cjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  CommandPalette
3
- } from "../chunk-SVCWSW2F.js";
3
+ } from "../chunk-JT4KVXJK.js";
4
4
  import "../chunk-XUZOU2EB.js";
5
5
  import "../chunk-LYH3EKKQ.js";
6
- import "../chunk-WT4WBHBR.js";
6
+ import "../chunk-RHHZRTWM.js";
7
7
  import "../chunk-5WRI5ZAA.js";
8
8
  export {
9
9
  CommandPalette
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkTYSNOPMQcjs = require('../chunk-TYSNOPMQ.cjs');
4
- require('../chunk-G74DHVHV.cjs');
5
- require('../chunk-P7J6WZTO.cjs');
3
+ var _chunkHNGFRRVZcjs = require('../chunk-HNGFRRVZ.cjs');
4
+ require('../chunk-J76JHN7J.cjs');
5
+ require('../chunk-KIZVY57H.cjs');
6
6
  require('../chunk-KVIL4EP4.cjs');
7
- require('../chunk-MLUHM3VG.cjs');
8
- require('../chunk-VHSTB7GB.cjs');
7
+ require('../chunk-BEOECPVJ.cjs');
8
+ require('../chunk-35LGEPLP.cjs');
9
9
  require('../chunk-DZUJEN5N.cjs');
10
10
 
11
11
 
12
- exports.ContextMenu = _chunkTYSNOPMQcjs.ContextMenu;
12
+ exports.ContextMenu = _chunkHNGFRRVZcjs.ContextMenu;
13
13
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
1
  import React__default from 'react';
2
- import { b as MenuItemType } from '../Menu.types-DwcuCZM7.cjs';
2
+ import { b as MenuItemType } from '../Menu.types-CTnUijv5.cjs';
3
3
  import '../renderIcon-C2lEMMzb.cjs';
4
4
 
5
5
  interface ContextMenuProps {