eidos-ui 3.8.1 → 4.1.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 (267) hide show
  1. package/README.md +21 -11
  2. package/dist/{SegmentedControl.types-D_gHYL9X.d.cts → SegmentedControl.types-50fprBiO.d.cts} +9 -0
  3. package/dist/{SegmentedControl.types-CHtjABQM.d.ts → SegmentedControl.types-DKlamnBZ.d.ts} +9 -0
  4. package/dist/{ThemeProvider.types-DgXN0gEH.d.cts → ThemeProvider.types-CI9P1anY.d.cts} +53 -2
  5. package/dist/{ThemeProvider.types-DgXN0gEH.d.ts → ThemeProvider.types-CI9P1anY.d.ts} +53 -2
  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/chip/index.cjs +4 -4
  11. package/dist/chip/index.js +3 -3
  12. package/dist/{chunk-V5CM5TH3.js → chunk-2OBOD3GO.js} +3 -3
  13. package/dist/{chunk-CFVUUMQA.cjs → chunk-2URFSWJT.cjs} +6 -8
  14. package/dist/chunk-2URFSWJT.cjs.map +1 -0
  15. package/dist/{chunk-4S57PE43.js → chunk-2WDL2ZVP.js} +6 -7
  16. package/dist/chunk-2WDL2ZVP.js.map +1 -0
  17. package/dist/{chunk-LWCFT5SP.cjs → chunk-3QBMSZSE.cjs} +3 -3
  18. package/dist/{chunk-LWCFT5SP.cjs.map → chunk-3QBMSZSE.cjs.map} +1 -1
  19. package/dist/{chunk-IC2PIK3E.js → chunk-43DJ3GGR.js} +4 -4
  20. package/dist/{chunk-L6ERHCQ2.js → chunk-57BVERWD.js} +3 -3
  21. package/dist/{chunk-AUNDBUHM.cjs → chunk-5HRVHEHE.cjs} +3 -3
  22. package/dist/{chunk-AUNDBUHM.cjs.map → chunk-5HRVHEHE.cjs.map} +1 -1
  23. package/dist/{chunk-6IB27I5K.cjs → chunk-6JYXGRJ3.cjs} +8 -8
  24. package/dist/{chunk-6IB27I5K.cjs.map → chunk-6JYXGRJ3.cjs.map} +1 -1
  25. package/dist/{chunk-NERASTO2.cjs → chunk-6ZFXIYH7.cjs} +3 -3
  26. package/dist/{chunk-NERASTO2.cjs.map → chunk-6ZFXIYH7.cjs.map} +1 -1
  27. package/dist/{chunk-IKXXXVUO.js → chunk-7TQUJ6BJ.js} +3 -3
  28. package/dist/{chunk-544RAXWO.cjs → chunk-7VMF6LIC.cjs} +19 -19
  29. package/dist/{chunk-544RAXWO.cjs.map → chunk-7VMF6LIC.cjs.map} +1 -1
  30. package/dist/{chunk-WTFEMOV5.cjs → chunk-ADB7QRX5.cjs} +16 -16
  31. package/dist/{chunk-WTFEMOV5.cjs.map → chunk-ADB7QRX5.cjs.map} +1 -1
  32. package/dist/{chunk-6CW5QSYV.cjs → chunk-AFGC62AL.cjs} +7 -7
  33. package/dist/{chunk-6CW5QSYV.cjs.map → chunk-AFGC62AL.cjs.map} +1 -1
  34. package/dist/{chunk-U4SVBE2M.js → chunk-AWPJH3UB.js} +4 -4
  35. package/dist/{chunk-V64DICJK.js → chunk-BHZ76J2K.js} +45 -33
  36. package/dist/chunk-BHZ76J2K.js.map +1 -0
  37. package/dist/{chunk-B2OHBIAL.cjs → chunk-BKUZF7CW.cjs} +10 -11
  38. package/dist/chunk-BKUZF7CW.cjs.map +1 -0
  39. package/dist/{chunk-WR77IZUU.cjs → chunk-BPVOQLCA.cjs} +7 -7
  40. package/dist/{chunk-WR77IZUU.cjs.map → chunk-BPVOQLCA.cjs.map} +1 -1
  41. package/dist/{chunk-MCPGI6EI.js → chunk-BUSMGQJ4.js} +2 -2
  42. package/dist/{chunk-H3C6YECZ.js → chunk-D2PXPX56.js} +6 -6
  43. package/dist/{chunk-L6YJ6QTZ.js → chunk-DCUIT7SI.js} +2 -2
  44. package/dist/{chunk-FE7S4RSK.js → chunk-DHOBGYRD.js} +164 -34
  45. package/dist/chunk-DHOBGYRD.js.map +1 -0
  46. package/dist/{chunk-JFV56ISS.cjs → chunk-E7BFBU6K.cjs} +45 -33
  47. package/dist/chunk-E7BFBU6K.cjs.map +1 -0
  48. package/dist/{chunk-HYRLK462.js → chunk-EDPCI2JC.js} +2 -2
  49. package/dist/{chunk-Z3IJWYUD.js → chunk-EJWEG66P.js} +226 -42
  50. package/dist/chunk-EJWEG66P.js.map +1 -0
  51. package/dist/{chunk-DPTTDHZ5.js → chunk-FAGQGGT3.js} +3 -3
  52. package/dist/{chunk-CNTG7OOO.js → chunk-FFYPSLQV.js} +12 -12
  53. package/dist/{chunk-7NUVLVSL.cjs → chunk-FJSK2RT7.cjs} +5 -5
  54. package/dist/{chunk-7NUVLVSL.cjs.map → chunk-FJSK2RT7.cjs.map} +1 -1
  55. package/dist/{chunk-P6OJQ2RN.js → chunk-FSX7DDLO.js} +8 -9
  56. package/dist/chunk-FSX7DDLO.js.map +1 -0
  57. package/dist/{chunk-XIUZT4TO.js → chunk-GE3QCXT7.js} +6 -7
  58. package/dist/chunk-GE3QCXT7.js.map +1 -0
  59. package/dist/{chunk-JY77VJAZ.js → chunk-GHUEVNNU.js} +3 -3
  60. package/dist/{chunk-4V2XYUQL.js → chunk-GLEPKX2R.js} +2 -2
  61. package/dist/{chunk-GZDT2AHJ.cjs → chunk-GRKC4PIX.cjs} +7 -7
  62. package/dist/{chunk-GZDT2AHJ.cjs.map → chunk-GRKC4PIX.cjs.map} +1 -1
  63. package/dist/{chunk-SLHIVEFW.cjs → chunk-HKLLKNRQ.cjs} +6 -9
  64. package/dist/chunk-HKLLKNRQ.cjs.map +1 -0
  65. package/dist/{chunk-2TIMJD4K.js → chunk-IBT535UH.js} +3 -3
  66. package/dist/{chunk-HR5MWA3B.cjs → chunk-IJW6YCJB.cjs} +5 -5
  67. package/dist/{chunk-HR5MWA3B.cjs.map → chunk-IJW6YCJB.cjs.map} +1 -1
  68. package/dist/{chunk-OGGZIFTI.cjs → chunk-JO4NDJRA.cjs} +192 -62
  69. package/dist/chunk-JO4NDJRA.cjs.map +1 -0
  70. package/dist/{chunk-NNAEQR3Y.cjs → chunk-K6VEUJLY.cjs} +30 -30
  71. package/dist/{chunk-NNAEQR3Y.cjs.map → chunk-K6VEUJLY.cjs.map} +1 -1
  72. package/dist/{chunk-F5IRMMZ2.cjs → chunk-K73JO4FK.cjs} +7 -7
  73. package/dist/{chunk-F5IRMMZ2.cjs.map → chunk-K73JO4FK.cjs.map} +1 -1
  74. package/dist/{chunk-4HZIXRAJ.cjs → chunk-KF2OGUAD.cjs} +11 -12
  75. package/dist/chunk-KF2OGUAD.cjs.map +1 -0
  76. package/dist/{chunk-TJQNGJHP.js → chunk-KLHC5BHS.js} +4 -4
  77. package/dist/{chunk-XWMXEJVZ.js → chunk-KZKBZ2AV.js} +5 -7
  78. package/dist/chunk-KZKBZ2AV.js.map +1 -0
  79. package/dist/{chunk-DG3O5NV4.cjs → chunk-LLHR6QW3.cjs} +3 -3
  80. package/dist/{chunk-DG3O5NV4.cjs.map → chunk-LLHR6QW3.cjs.map} +1 -1
  81. package/dist/{chunk-GDRLVX2A.js → chunk-LXRNFQEI.js} +4 -4
  82. package/dist/{chunk-VXC7Z7XB.cjs → chunk-MKQVDEHI.cjs} +5 -6
  83. package/dist/chunk-MKQVDEHI.cjs.map +1 -0
  84. package/dist/{chunk-TNQ2ZZ7W.cjs → chunk-MUMTPMWD.cjs} +7 -7
  85. package/dist/{chunk-TNQ2ZZ7W.cjs.map → chunk-MUMTPMWD.cjs.map} +1 -1
  86. package/dist/{chunk-RHWZX7PB.js → chunk-NONYIHXD.js} +4 -4
  87. package/dist/{chunk-XPG56DLQ.cjs → chunk-NSA7ASZ7.cjs} +8 -8
  88. package/dist/{chunk-XPG56DLQ.cjs.map → chunk-NSA7ASZ7.cjs.map} +1 -1
  89. package/dist/{chunk-6NAOAKII.js → chunk-NWFGXLQP.js} +2 -2
  90. package/dist/{chunk-H46ZLPNJ.cjs → chunk-O45W57Y4.cjs} +233 -49
  91. package/dist/chunk-O45W57Y4.cjs.map +1 -0
  92. package/dist/{chunk-UUT2VEN5.cjs → chunk-OC2OBBGM.cjs} +7 -8
  93. package/dist/chunk-OC2OBBGM.cjs.map +1 -0
  94. package/dist/{chunk-3X6QVHTD.js → chunk-OERK3T7E.js} +3 -4
  95. package/dist/chunk-OERK3T7E.js.map +1 -0
  96. package/dist/{chunk-ZJWQPZ7E.js → chunk-OQWG7NLI.js} +3 -11
  97. package/dist/chunk-OQWG7NLI.js.map +1 -0
  98. package/dist/{chunk-U34INRFO.js → chunk-PP6HS4GR.js} +5 -16
  99. package/dist/chunk-PP6HS4GR.js.map +1 -0
  100. package/dist/{chunk-ENMDOQQO.cjs → chunk-R5WI5IGR.cjs} +6 -17
  101. package/dist/{chunk-ENMDOQQO.cjs.map → chunk-R5WI5IGR.cjs.map} +1 -1
  102. package/dist/{chunk-UTYY35QX.cjs → chunk-RZMQCVAS.cjs} +3 -3
  103. package/dist/{chunk-UTYY35QX.cjs.map → chunk-RZMQCVAS.cjs.map} +1 -1
  104. package/dist/{chunk-7FV2X62W.cjs → chunk-SJKD3WCV.cjs} +7 -7
  105. package/dist/{chunk-7FV2X62W.cjs.map → chunk-SJKD3WCV.cjs.map} +1 -1
  106. package/dist/{chunk-LUDK44NZ.cjs → chunk-SJPCBRKR.cjs} +3 -3
  107. package/dist/{chunk-LUDK44NZ.cjs.map → chunk-SJPCBRKR.cjs.map} +1 -1
  108. package/dist/{chunk-3TF2GZSG.js → chunk-SONL2RCW.js} +7 -7
  109. package/dist/{chunk-2IXCEKLI.js → chunk-SOS4K7VC.js} +2 -2
  110. package/dist/{chunk-WHQGJHMD.js → chunk-TOLNPD7S.js} +4 -4
  111. package/dist/{chunk-FHOD3FUN.js → chunk-UTOTOWPS.js} +4 -4
  112. package/dist/{chunk-YIOHKQ6Y.cjs → chunk-VCG647BY.cjs} +5 -13
  113. package/dist/chunk-VCG647BY.cjs.map +1 -0
  114. package/dist/{chunk-HLI4SOH3.cjs → chunk-VGMRIXW4.cjs} +45 -45
  115. package/dist/{chunk-HLI4SOH3.cjs.map → chunk-VGMRIXW4.cjs.map} +1 -1
  116. package/dist/{chunk-N5NXKVFJ.cjs → chunk-VPN7AR7T.cjs} +10 -10
  117. package/dist/{chunk-N5NXKVFJ.cjs.map → chunk-VPN7AR7T.cjs.map} +1 -1
  118. package/dist/{chunk-6FXFKMJ5.js → chunk-XBIMNWE6.js} +3 -3
  119. package/dist/{chunk-3VXUOAIJ.cjs → chunk-XR72A66Q.cjs} +3 -7
  120. package/dist/chunk-XR72A66Q.cjs.map +1 -0
  121. package/dist/{chunk-ULKWUKD2.cjs → chunk-YHSCUPP6.cjs} +22 -23
  122. package/dist/chunk-YHSCUPP6.cjs.map +1 -0
  123. package/dist/{chunk-S5CMZFX6.js → chunk-YPEJH57Z.js} +6 -7
  124. package/dist/chunk-YPEJH57Z.js.map +1 -0
  125. package/dist/{chunk-BO3KK3ZQ.js → chunk-YPPG7NLW.js} +2 -6
  126. package/dist/chunk-YPPG7NLW.js.map +1 -0
  127. package/dist/{chunk-PE2SLXUS.cjs → chunk-YWXS4IPH.cjs} +5 -5
  128. package/dist/{chunk-PE2SLXUS.cjs.map → chunk-YWXS4IPH.cjs.map} +1 -1
  129. package/dist/{chunk-UC4NYF6T.js → chunk-YYA5SWXD.js} +2 -2
  130. package/dist/{chunk-IHPSRTVW.js → chunk-Z3OEYDNI.js} +4 -7
  131. package/dist/chunk-Z3OEYDNI.js.map +1 -0
  132. package/dist/{chunk-MKC6V3SY.cjs → chunk-Z6FZ7GI5.cjs} +6 -6
  133. package/dist/{chunk-MKC6V3SY.cjs.map → chunk-Z6FZ7GI5.cjs.map} +1 -1
  134. package/dist/{chunk-NFD7MPX4.cjs → chunk-ZVA5KJAJ.cjs} +11 -11
  135. package/dist/{chunk-NFD7MPX4.cjs.map → chunk-ZVA5KJAJ.cjs.map} +1 -1
  136. package/dist/color-picker/index.cjs +4 -4
  137. package/dist/color-picker/index.js +3 -3
  138. package/dist/combobox/index.cjs +6 -6
  139. package/dist/combobox/index.js +5 -5
  140. package/dist/command-palette/index.cjs +3 -3
  141. package/dist/command-palette/index.js +2 -2
  142. package/dist/context-menu/index.cjs +6 -6
  143. package/dist/context-menu/index.js +5 -5
  144. package/dist/conversation/index.cjs +8 -8
  145. package/dist/conversation/index.js +7 -7
  146. package/dist/data-grid/index.cjs +15 -15
  147. package/dist/data-grid/index.d.cts +1 -1
  148. package/dist/data-grid/index.d.ts +1 -1
  149. package/dist/data-grid/index.js +14 -14
  150. package/dist/date-picker/index.cjs +8 -8
  151. package/dist/date-picker/index.js +7 -7
  152. package/dist/drawer/index.cjs +5 -5
  153. package/dist/drawer/index.js +4 -4
  154. package/dist/dropdown/index.cjs +3 -3
  155. package/dist/dropdown/index.js +2 -2
  156. package/dist/header/index.cjs +6 -6
  157. package/dist/header/index.js +5 -5
  158. package/dist/index.cjs +39 -39
  159. package/dist/index.cjs.map +1 -1
  160. package/dist/index.css +345 -205
  161. package/dist/index.d.cts +2 -2
  162. package/dist/index.d.ts +2 -2
  163. package/dist/index.js +40 -40
  164. package/dist/inline-edit/index.cjs +5 -5
  165. package/dist/inline-edit/index.js +4 -4
  166. package/dist/input/index.cjs +4 -4
  167. package/dist/input/index.js +3 -3
  168. package/dist/menu/index.cjs +5 -5
  169. package/dist/menu/index.js +4 -4
  170. package/dist/modal/index.cjs +5 -5
  171. package/dist/modal/index.js +4 -4
  172. package/dist/navigation/index.cjs +5 -5
  173. package/dist/navigation/index.js +4 -4
  174. package/dist/number-input/index.cjs +2 -4
  175. package/dist/number-input/index.cjs.map +1 -1
  176. package/dist/number-input/index.js +1 -3
  177. package/dist/page-layout/index.cjs +12 -12
  178. package/dist/page-layout/index.js +11 -11
  179. package/dist/pagination/index.cjs +8 -8
  180. package/dist/pagination/index.js +7 -7
  181. package/dist/popover/index.cjs +3 -3
  182. package/dist/popover/index.d.cts +1 -3
  183. package/dist/popover/index.d.ts +1 -3
  184. package/dist/popover/index.js +2 -2
  185. package/dist/segmented-control/index.cjs +4 -4
  186. package/dist/segmented-control/index.d.cts +2 -2
  187. package/dist/segmented-control/index.d.ts +2 -2
  188. package/dist/segmented-control/index.js +3 -3
  189. package/dist/select/index.cjs +6 -6
  190. package/dist/select/index.js +5 -5
  191. package/dist/snackbar/index.cjs +5 -5
  192. package/dist/snackbar/index.js +4 -4
  193. package/dist/split-button/index.cjs +6 -6
  194. package/dist/split-button/index.js +5 -5
  195. package/dist/split-chip/index.cjs +5 -5
  196. package/dist/split-chip/index.js +4 -4
  197. package/dist/table/index.cjs +13 -13
  198. package/dist/table/index.js +12 -12
  199. package/dist/tabs/index.cjs +3 -3
  200. package/dist/tabs/index.js +2 -2
  201. package/dist/tag-input/index.cjs +6 -6
  202. package/dist/tag-input/index.js +5 -5
  203. package/dist/textarea/index.cjs +4 -4
  204. package/dist/textarea/index.js +3 -3
  205. package/dist/theme-editor/index.cjs +13 -11
  206. package/dist/theme-editor/index.cjs.map +1 -1
  207. package/dist/theme-editor/index.d.cts +1 -1
  208. package/dist/theme-editor/index.d.ts +1 -1
  209. package/dist/theme-editor/index.js +12 -10
  210. package/dist/theme-provider/index.cjs +3 -3
  211. package/dist/theme-provider/index.d.cts +2 -2
  212. package/dist/theme-provider/index.d.ts +2 -2
  213. package/dist/theme-provider/index.js +2 -2
  214. package/dist/toolbar/index.cjs +8 -8
  215. package/dist/toolbar/index.js +7 -7
  216. package/dist/tooltip/index.cjs +3 -3
  217. package/dist/tooltip/index.js +2 -2
  218. package/package.json +4 -2
  219. package/dist/chunk-3VXUOAIJ.cjs.map +0 -1
  220. package/dist/chunk-3X6QVHTD.js.map +0 -1
  221. package/dist/chunk-4HZIXRAJ.cjs.map +0 -1
  222. package/dist/chunk-4S57PE43.js.map +0 -1
  223. package/dist/chunk-B2OHBIAL.cjs.map +0 -1
  224. package/dist/chunk-BO3KK3ZQ.js.map +0 -1
  225. package/dist/chunk-CFVUUMQA.cjs.map +0 -1
  226. package/dist/chunk-FE7S4RSK.js.map +0 -1
  227. package/dist/chunk-H46ZLPNJ.cjs.map +0 -1
  228. package/dist/chunk-IHPSRTVW.js.map +0 -1
  229. package/dist/chunk-JFV56ISS.cjs.map +0 -1
  230. package/dist/chunk-OGGZIFTI.cjs.map +0 -1
  231. package/dist/chunk-P6OJQ2RN.js.map +0 -1
  232. package/dist/chunk-S5CMZFX6.js.map +0 -1
  233. package/dist/chunk-SLHIVEFW.cjs.map +0 -1
  234. package/dist/chunk-U34INRFO.js.map +0 -1
  235. package/dist/chunk-ULKWUKD2.cjs.map +0 -1
  236. package/dist/chunk-UUT2VEN5.cjs.map +0 -1
  237. package/dist/chunk-V64DICJK.js.map +0 -1
  238. package/dist/chunk-VXC7Z7XB.cjs.map +0 -1
  239. package/dist/chunk-XIUZT4TO.js.map +0 -1
  240. package/dist/chunk-XWMXEJVZ.js.map +0 -1
  241. package/dist/chunk-YIOHKQ6Y.cjs.map +0 -1
  242. package/dist/chunk-Z3IJWYUD.js.map +0 -1
  243. package/dist/chunk-ZJWQPZ7E.js.map +0 -1
  244. /package/dist/{chunk-V5CM5TH3.js.map → chunk-2OBOD3GO.js.map} +0 -0
  245. /package/dist/{chunk-IC2PIK3E.js.map → chunk-43DJ3GGR.js.map} +0 -0
  246. /package/dist/{chunk-L6ERHCQ2.js.map → chunk-57BVERWD.js.map} +0 -0
  247. /package/dist/{chunk-IKXXXVUO.js.map → chunk-7TQUJ6BJ.js.map} +0 -0
  248. /package/dist/{chunk-U4SVBE2M.js.map → chunk-AWPJH3UB.js.map} +0 -0
  249. /package/dist/{chunk-MCPGI6EI.js.map → chunk-BUSMGQJ4.js.map} +0 -0
  250. /package/dist/{chunk-H3C6YECZ.js.map → chunk-D2PXPX56.js.map} +0 -0
  251. /package/dist/{chunk-L6YJ6QTZ.js.map → chunk-DCUIT7SI.js.map} +0 -0
  252. /package/dist/{chunk-HYRLK462.js.map → chunk-EDPCI2JC.js.map} +0 -0
  253. /package/dist/{chunk-DPTTDHZ5.js.map → chunk-FAGQGGT3.js.map} +0 -0
  254. /package/dist/{chunk-CNTG7OOO.js.map → chunk-FFYPSLQV.js.map} +0 -0
  255. /package/dist/{chunk-JY77VJAZ.js.map → chunk-GHUEVNNU.js.map} +0 -0
  256. /package/dist/{chunk-4V2XYUQL.js.map → chunk-GLEPKX2R.js.map} +0 -0
  257. /package/dist/{chunk-2TIMJD4K.js.map → chunk-IBT535UH.js.map} +0 -0
  258. /package/dist/{chunk-TJQNGJHP.js.map → chunk-KLHC5BHS.js.map} +0 -0
  259. /package/dist/{chunk-GDRLVX2A.js.map → chunk-LXRNFQEI.js.map} +0 -0
  260. /package/dist/{chunk-RHWZX7PB.js.map → chunk-NONYIHXD.js.map} +0 -0
  261. /package/dist/{chunk-6NAOAKII.js.map → chunk-NWFGXLQP.js.map} +0 -0
  262. /package/dist/{chunk-3TF2GZSG.js.map → chunk-SONL2RCW.js.map} +0 -0
  263. /package/dist/{chunk-2IXCEKLI.js.map → chunk-SOS4K7VC.js.map} +0 -0
  264. /package/dist/{chunk-WHQGJHMD.js.map → chunk-TOLNPD7S.js.map} +0 -0
  265. /package/dist/{chunk-FHOD3FUN.js.map → chunk-UTOTOWPS.js.map} +0 -0
  266. /package/dist/{chunk-6FXFKMJ5.js.map → chunk-XBIMNWE6.js.map} +0 -0
  267. /package/dist/{chunk-UC4NYF6T.js.map → chunk-YYA5SWXD.js.map} +0 -0
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Tooltip
3
- } from "./chunk-MCPGI6EI.js";
3
+ } from "./chunk-BUSMGQJ4.js";
4
4
  import {
5
5
  devWarn,
6
6
  renderIcon
7
- } from "./chunk-U34INRFO.js";
7
+ } from "./chunk-PP6HS4GR.js";
8
8
 
9
9
  // src/components/SegmentedControl/SegmentedControl.component.tsx
10
10
  import React, { useEffect, useLayoutEffect, useRef, useState } from "react";
@@ -20,6 +20,8 @@ var SegmentedControl = ({
20
20
  disabled = false,
21
21
  fullWidth = false,
22
22
  scrollButtons = "auto",
23
+ ariaLabel,
24
+ "aria-labelledby": ariaLabelledBy,
23
25
  className = ""
24
26
  }) => {
25
27
  const isControlled = value !== void 0;
@@ -128,37 +130,47 @@ var SegmentedControl = ({
128
130
  `eidos-segmented-scroll-button--${direction}`,
129
131
  `eidos-segmented-scroll-button--${size}`
130
132
  ].join(" ");
131
- const track = /* @__PURE__ */ jsx("div", { ref: trackRef, className: containerClasses, role: "radiogroup", children: options.map((opt) => {
132
- const isActive = activeValue === opt.value;
133
- const isDisabled = disabled || !!opt.disabled;
134
- if (!opt.label && !opt.tooltip) {
135
- devWarn(
136
- "segmented-icon-only-name",
137
- `SegmentedControl: option "${opt.value}" has an icon but no \`label\` or \`tooltip\`, so it has no accessible name.`
138
- );
133
+ const track = /* @__PURE__ */ jsx(
134
+ "div",
135
+ {
136
+ ref: trackRef,
137
+ className: containerClasses,
138
+ role: "radiogroup",
139
+ "aria-label": ariaLabel,
140
+ "aria-labelledby": ariaLabelledBy,
141
+ children: options.map((opt) => {
142
+ const isActive = activeValue === opt.value;
143
+ const isDisabled = disabled || !!opt.disabled;
144
+ if (!opt.label && !opt.tooltip) {
145
+ devWarn(
146
+ "segmented-icon-only-name",
147
+ `SegmentedControl: option "${opt.value}" has an icon but no \`label\` or \`tooltip\`, so it has no accessible name.`
148
+ );
149
+ }
150
+ const segment = /* @__PURE__ */ jsxs(
151
+ "button",
152
+ {
153
+ type: "button",
154
+ role: "radio",
155
+ "aria-checked": isActive,
156
+ disabled: isDisabled,
157
+ "data-value": opt.value,
158
+ tabIndex: isTabbable(opt.value) ? 0 : -1,
159
+ className: ["eidos-segmented-item", isActive && "eidos-segmented-item--active"].filter(Boolean).join(" "),
160
+ onClick: () => !isDisabled && handleSelect(opt.value),
161
+ onKeyDown: handleKeyDown,
162
+ "aria-label": !opt.label ? opt.tooltip : void 0,
163
+ children: [
164
+ opt.icon && renderIcon(opt.icon, "eidos-segmented-icon"),
165
+ opt.label && /* @__PURE__ */ jsx("span", { className: "eidos-segmented-label", children: opt.label })
166
+ ]
167
+ },
168
+ opt.value
169
+ );
170
+ return opt.tooltip ? /* @__PURE__ */ jsx(Tooltip, { message: opt.tooltip, children: segment }, opt.value) : React.cloneElement(segment, { key: opt.value });
171
+ })
139
172
  }
140
- const segment = /* @__PURE__ */ jsxs(
141
- "button",
142
- {
143
- type: "button",
144
- role: "radio",
145
- "aria-checked": isActive,
146
- disabled: isDisabled,
147
- "data-value": opt.value,
148
- tabIndex: isTabbable(opt.value) ? 0 : -1,
149
- className: ["eidos-segmented-item", isActive && "eidos-segmented-item--active"].filter(Boolean).join(" "),
150
- onClick: () => !isDisabled && handleSelect(opt.value),
151
- onKeyDown: handleKeyDown,
152
- "aria-label": !opt.label ? opt.tooltip : void 0,
153
- children: [
154
- opt.icon && renderIcon(opt.icon, "eidos-segmented-icon"),
155
- opt.label && /* @__PURE__ */ jsx("span", { className: "eidos-segmented-label", children: opt.label })
156
- ]
157
- },
158
- opt.value
159
- );
160
- return opt.tooltip ? /* @__PURE__ */ jsx(Tooltip, { message: opt.tooltip, children: segment }, opt.value) : React.cloneElement(segment, { key: opt.value });
161
- }) });
173
+ );
162
174
  return /* @__PURE__ */ jsxs("div", { className: barClasses, children: [
163
175
  showPrevButton && /* @__PURE__ */ jsx(
164
176
  "button",
@@ -191,4 +203,4 @@ var SegmentedControl = ({
191
203
  export {
192
204
  SegmentedControl
193
205
  };
194
- //# sourceMappingURL=chunk-V64DICJK.js.map
206
+ //# sourceMappingURL=chunk-BHZ76J2K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/SegmentedControl/SegmentedControl.component.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { Tooltip } from '../Tooltip';\nimport { renderIcon, devWarn } from '../../utils';\nimport type { SegmentedControlProps } from './SegmentedControl.types';\n\n/**\n * SegmentedControl - a compact, single-select toggle group rendered as a pill.\n *\n * Semantics: `role=\"radiogroup\"` on the container, `role=\"radio\"` on each\n * segment. Supports controlled and uncontrolled usage.\n *\n * @example\n * ```tsx\n * // Controlled\n * const [view, setView] = useState('list');\n * <SegmentedControl\n * options={[\n * { value: 'list', icon: List, tooltip: 'List view' },\n * { value: 'grid', icon: LayoutGrid, tooltip: 'Grid view' },\n * { value: 'table', icon: Table2, tooltip: 'Table view' },\n * ]}\n * value={view}\n * onChange={setView}\n * />\n *\n * // With labels\n * <SegmentedControl\n * options={[\n * { value: 'day', label: 'Day' },\n * { value: 'week', label: 'Week' },\n * { value: 'month', label: 'Month' },\n * ]}\n * defaultValue=\"week\"\n * onChange={console.log}\n * />\n * ```\n */\nexport const SegmentedControl: React.FC<SegmentedControlProps> = ({\n options,\n value,\n defaultValue,\n onChange,\n size = 'md',\n color = 'primary',\n disabled = false,\n fullWidth = false,\n scrollButtons = 'auto',\n ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n className = '',\n}) => {\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? options[0]?.value ?? '',\n );\n\n const activeValue = isControlled ? value : internalValue;\n\n const handleSelect = (optValue: string) => {\n if (disabled) return;\n if (optValue === activeValue) return; // already selected\n if (!isControlled) setInternalValue(optValue);\n onChange?.(optValue);\n };\n\n const trackRef = useRef<HTMLDivElement>(null);\n\n // Roving tabindex: the group is a single tab stop, and arrow keys move\n // within it - the WAI-ARIA radiogroup pattern, which this had none of.\n // Every segment used to be its own tab stop, so a six-option control cost\n // six presses to skip past.\n //\n // The tabbable segment is the selected one; if nothing is selected (a\n // controlled `value` matching no option), the first enabled segment takes\n // the stop so the group can still be reached at all.\n const selectableValues = options.filter((opt) => !opt.disabled).map((opt) => opt.value);\n const hasSelection = selectableValues.includes(activeValue);\n const fallbackTabbableValue = selectableValues[0];\n\n const isTabbable = (optValue: string) =>\n hasSelection ? optValue === activeValue : optValue === fallbackTabbableValue;\n\n // Selection follows focus, which is what the radio pattern specifies -\n // unlike `Tabs`, where arrow keys only move focus. Disabled segments are\n // skipped rather than selected-and-ignored, and both ends wrap.\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (disabled || selectableValues.length === 0) return;\n\n const currentIndex = selectableValues.indexOf(activeValue);\n const from = currentIndex === -1 ? 0 : currentIndex;\n let targetIndex = -1;\n\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') {\n targetIndex = (from + 1) % selectableValues.length;\n } else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') {\n targetIndex = (from - 1 + selectableValues.length) % selectableValues.length;\n } else if (event.key === 'Home') {\n targetIndex = 0;\n } else if (event.key === 'End') {\n targetIndex = selectableValues.length - 1;\n }\n\n if (targetIndex === -1) return;\n\n event.preventDefault();\n const targetValue = selectableValues[targetIndex];\n handleSelect(targetValue);\n\n // Focus has to follow the selection explicitly: the segment that was\n // focused is about to lose its `tabIndex={0}` to the newly selected one,\n // and focus does not move on its own.\n const target = trackRef.current?.querySelector<HTMLElement>(\n `[data-value=\"${CSS.escape(targetValue)}\"]`,\n );\n target?.focus();\n };\n\n // The selected segment can sit outside the scrollport - after a controlled\n // `value` change, or once focus moves to a segment off screen. `scrollLeft`\n // is set directly rather than through `scrollIntoView`, which walks the\n // whole ancestor chain and would scroll the page vertically when the\n // control is below the fold.\n useLayoutEffect(() => {\n const track = trackRef.current;\n if (!track) return;\n\n const activeItem = track.querySelector('[aria-checked=\"true\"]') as HTMLElement | null;\n if (!activeItem) return;\n\n const left = activeItem.offsetLeft;\n const right = left + activeItem.offsetWidth;\n\n if (left < track.scrollLeft) {\n track.scrollLeft = left;\n } else if (right > track.scrollLeft + track.clientWidth) {\n track.scrollLeft = right - track.clientWidth;\n }\n }, [activeValue]);\n\n // Whether either end has segments hidden past it. Drives the presence of\n // each button: none at all when the track fits, and none at the end already\n // reached, since a button there would point at nothing.\n const [scrollState, setScrollState] = useState({ canScrollPrev: false, canScrollNext: false });\n const hasScrollButtons = scrollButtons !== 'none';\n\n useEffect(() => {\n if (!hasScrollButtons) return;\n const track = trackRef.current;\n if (!track) return;\n\n const update = () => {\n const maxScroll = track.scrollWidth - track.clientWidth;\n // 1px of tolerance: fractional layout widths leave a sub-pixel\n // remainder at either end that would otherwise keep a button enabled\n // for a scroll that can no longer move anything.\n const canScrollPrev = track.scrollLeft > 1;\n const canScrollNext = track.scrollLeft < maxScroll - 1;\n setScrollState((previous) =>\n previous.canScrollPrev === canScrollPrev && previous.canScrollNext === canScrollNext\n ? previous\n : { canScrollPrev, canScrollNext },\n );\n };\n\n update();\n track.addEventListener('scroll', update, { passive: true });\n\n // The track's own box stays the same width when a label reflows or a font\n // finishes loading, so the segments have to be observed as well as the\n // container - only their sizes tell us the track started overflowing.\n const observer = new ResizeObserver(update);\n observer.observe(track);\n Array.from(track.children).forEach((child) => observer.observe(child));\n\n return () => {\n track.removeEventListener('scroll', update);\n observer.disconnect();\n };\n }, [hasScrollButtons, options.length, size, fullWidth]);\n\n const scrollByStep = (direction: -1 | 1) => {\n const track = trackRef.current;\n if (!track) return;\n\n // A step just short of a full page keeps a segment of context on screen,\n // the same way a paged scrollbar click does.\n const step = track.clientWidth * 0.8;\n const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n track.scrollBy({ left: direction * step, behavior: reducedMotion ? 'auto' : 'smooth' });\n };\n\n const barClasses = [\n 'eidos-segmented-bar',\n fullWidth && 'eidos-segmented-bar--full-width',\n disabled && 'eidos-segmented-bar--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const containerClasses = [\n 'eidos-segmented',\n `eidos-segmented--${size}`,\n `eidos-segmented--${color}`,\n disabled && 'eidos-segmented--disabled',\n fullWidth && 'eidos-segmented--full-width',\n // With buttons, they are the affordance - a native scrollbar under a\n // compact pill control is redundant and would break its shape.\n hasScrollButtons && 'eidos-segmented--hide-scrollbar',\n ]\n .filter(Boolean)\n .join(' ');\n\n const showPrevButton = hasScrollButtons && scrollState.canScrollPrev;\n const showNextButton = hasScrollButtons && scrollState.canScrollNext;\n\n const scrollButtonClasses = (direction: 'prev' | 'next') =>\n [\n 'eidos-segmented-scroll-button',\n `eidos-segmented-scroll-button--${direction}`,\n `eidos-segmented-scroll-button--${size}`,\n ].join(' ');\n\n const track = (\n <div\n ref={trackRef}\n className={containerClasses}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n {options.map((opt) => {\n const isActive = activeValue === opt.value;\n const isDisabled = disabled || !!opt.disabled;\n\n // An icon-only segment has no text to be named by. `tooltip` wraps\n // it in a `Tooltip`, which contributes nothing to the accessible\n // name, so such a segment was announced as just \"radio\" - identical\n // to every other segment, making the group unusable by voice or\n // screen reader. Same fallback as `Button`.\n if (!opt.label && !opt.tooltip) {\n devWarn(\n 'segmented-icon-only-name',\n `SegmentedControl: option \"${opt.value}\" has an icon but no \\`label\\` or \\`tooltip\\`, so it has no accessible name.`,\n );\n }\n\n const segment = (\n <button\n key={opt.value}\n type=\"button\"\n role=\"radio\"\n aria-checked={isActive}\n disabled={isDisabled}\n // Read back by the keyboard handler to move focus onto the newly\n // selected segment, which `value` alone can't identify in the DOM.\n data-value={opt.value}\n tabIndex={isTabbable(opt.value) ? 0 : -1}\n className={['eidos-segmented-item', isActive && 'eidos-segmented-item--active']\n .filter(Boolean)\n .join(' ')}\n onClick={() => !isDisabled && handleSelect(opt.value)}\n onKeyDown={handleKeyDown}\n aria-label={!opt.label ? opt.tooltip : undefined}\n >\n {opt.icon && renderIcon(opt.icon, 'eidos-segmented-icon')}\n {opt.label && <span className=\"eidos-segmented-label\">{opt.label}</span>}\n </button>\n );\n\n return opt.tooltip ? (\n <Tooltip key={opt.value} message={opt.tooltip}>\n {segment}\n </Tooltip>\n ) : (\n React.cloneElement(segment, { key: opt.value })\n );\n })}\n </div>\n );\n\n // The buttons are siblings of the track, never children of it:\n // `role=\"radiogroup\"` only accepts radios. They are also hidden from\n // assistive tech and skipped by Tab, because they are a pointer affordance\n // for something the keyboard already does - tabbing to a segment scrolls it\n // into view. Same arrangement as `Tabs`.\n return (\n <div className={barClasses}>\n {showPrevButton && (\n <button\n type=\"button\"\n className={scrollButtonClasses('prev')}\n onClick={() => scrollByStep(-1)}\n // `tabIndex={-1}` keeps these out of the tab order, but it does not\n // stop a *click* from focusing them - and focus landing inside an\n // `aria-hidden` subtree is an error the browser reports (\"Blocked\n // aria-hidden on an element because its descendant retained\n // focus\"). Suppressing the default mousedown behaviour keeps the\n // button unfocusable by pointer as well, while the click still\n // fires. `inert` would also prevent the click, so it is not an\n // option here.\n onMouseDown={(event) => event.preventDefault()}\n tabIndex={-1}\n aria-hidden=\"true\"\n >\n <ChevronLeft className=\"eidos-segmented-scroll-button-icon\" />\n </button>\n )}\n\n {track}\n\n {showNextButton && (\n <button\n type=\"button\"\n className={scrollButtonClasses('next')}\n onClick={() => scrollByStep(1)}\n onMouseDown={(event) => event.preventDefault()} // see the prev button\n tabIndex={-1}\n aria-hidden=\"true\"\n >\n <ChevronRight className=\"eidos-segmented-scroll-button-icon\" />\n </button>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,OAAO,SAAS,WAAW,iBAAiB,QAAQ,gBAAgB;AACpE,SAAS,aAAa,oBAAoB;AAwPhC,SAkBgB,KAlBhB;AAnNH,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AAAA,EACA,mBAAmB;AAAA,EACnB,YAAY;AACd,MAAM;AACJ,QAAM,eAAe,UAAU;AAC/B,QAAM,CAAC,eAAe,gBAAgB,IAAI;AAAA,IACxC,gBAAgB,QAAQ,CAAC,GAAG,SAAS;AAAA,EACvC;AAEA,QAAM,cAAc,eAAe,QAAQ;AAE3C,QAAM,eAAe,CAAC,aAAqB;AACzC,QAAI,SAAU;AACd,QAAI,aAAa,YAAa;AAC9B,QAAI,CAAC,aAAc,kBAAiB,QAAQ;AAC5C,eAAW,QAAQ;AAAA,EACrB;AAEA,QAAM,WAAW,OAAuB,IAAI;AAU5C,QAAM,mBAAmB,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;AACtF,QAAM,eAAe,iBAAiB,SAAS,WAAW;AAC1D,QAAM,wBAAwB,iBAAiB,CAAC;AAEhD,QAAM,aAAa,CAAC,aAClB,eAAe,aAAa,cAAc,aAAa;AAKzD,QAAM,gBAAgB,CAAC,UAAkD;AACvE,QAAI,YAAY,iBAAiB,WAAW,EAAG;AAE/C,UAAM,eAAe,iBAAiB,QAAQ,WAAW;AACzD,UAAM,OAAO,iBAAiB,KAAK,IAAI;AACvC,QAAI,cAAc;AAElB,QAAI,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,aAAa;AAC3D,qBAAe,OAAO,KAAK,iBAAiB;AAAA,IAC9C,WAAW,MAAM,QAAQ,eAAe,MAAM,QAAQ,WAAW;AAC/D,qBAAe,OAAO,IAAI,iBAAiB,UAAU,iBAAiB;AAAA,IACxE,WAAW,MAAM,QAAQ,QAAQ;AAC/B,oBAAc;AAAA,IAChB,WAAW,MAAM,QAAQ,OAAO;AAC9B,oBAAc,iBAAiB,SAAS;AAAA,IAC1C;AAEA,QAAI,gBAAgB,GAAI;AAExB,UAAM,eAAe;AACrB,UAAM,cAAc,iBAAiB,WAAW;AAChD,iBAAa,WAAW;AAKxB,UAAM,SAAS,SAAS,SAAS;AAAA,MAC/B,gBAAgB,IAAI,OAAO,WAAW,CAAC;AAAA,IACzC;AACA,YAAQ,MAAM;AAAA,EAChB;AAOA,kBAAgB,MAAM;AACpB,UAAMA,SAAQ,SAAS;AACvB,QAAI,CAACA,OAAO;AAEZ,UAAM,aAAaA,OAAM,cAAc,uBAAuB;AAC9D,QAAI,CAAC,WAAY;AAEjB,UAAM,OAAO,WAAW;AACxB,UAAM,QAAQ,OAAO,WAAW;AAEhC,QAAI,OAAOA,OAAM,YAAY;AAC3B,MAAAA,OAAM,aAAa;AAAA,IACrB,WAAW,QAAQA,OAAM,aAAaA,OAAM,aAAa;AACvD,MAAAA,OAAM,aAAa,QAAQA,OAAM;AAAA,IACnC;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAKhB,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,EAAE,eAAe,OAAO,eAAe,MAAM,CAAC;AAC7F,QAAM,mBAAmB,kBAAkB;AAE3C,YAAU,MAAM;AACd,QAAI,CAAC,iBAAkB;AACvB,UAAMA,SAAQ,SAAS;AACvB,QAAI,CAACA,OAAO;AAEZ,UAAM,SAAS,MAAM;AACnB,YAAM,YAAYA,OAAM,cAAcA,OAAM;AAI5C,YAAM,gBAAgBA,OAAM,aAAa;AACzC,YAAM,gBAAgBA,OAAM,aAAa,YAAY;AACrD;AAAA,QAAe,CAAC,aACd,SAAS,kBAAkB,iBAAiB,SAAS,kBAAkB,gBACnE,WACA,EAAE,eAAe,cAAc;AAAA,MACrC;AAAA,IACF;AAEA,WAAO;AACP,IAAAA,OAAM,iBAAiB,UAAU,QAAQ,EAAE,SAAS,KAAK,CAAC;AAK1D,UAAM,WAAW,IAAI,eAAe,MAAM;AAC1C,aAAS,QAAQA,MAAK;AACtB,UAAM,KAAKA,OAAM,QAAQ,EAAE,QAAQ,CAAC,UAAU,SAAS,QAAQ,KAAK,CAAC;AAErE,WAAO,MAAM;AACX,MAAAA,OAAM,oBAAoB,UAAU,MAAM;AAC1C,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,kBAAkB,QAAQ,QAAQ,MAAM,SAAS,CAAC;AAEtD,QAAM,eAAe,CAAC,cAAsB;AAC1C,UAAMA,SAAQ,SAAS;AACvB,QAAI,CAACA,OAAO;AAIZ,UAAM,OAAOA,OAAM,cAAc;AACjC,UAAM,gBAAgB,OAAO,WAAW,kCAAkC,EAAE;AAC5E,IAAAA,OAAM,SAAS,EAAE,MAAM,YAAY,MAAM,UAAU,gBAAgB,SAAS,SAAS,CAAC;AAAA,EACxF;AAEA,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,aAAa;AAAA,IACb,YAAY;AAAA,IACZ;AAAA,EACF,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,oBAAoB,IAAI;AAAA,IACxB,oBAAoB,KAAK;AAAA,IACzB,YAAY;AAAA,IACZ,aAAa;AAAA;AAAA;AAAA,IAGb,oBAAoB;AAAA,EACtB,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,QAAM,iBAAiB,oBAAoB,YAAY;AACvD,QAAM,iBAAiB,oBAAoB,YAAY;AAEvD,QAAM,sBAAsB,CAAC,cAC3B;AAAA,IACE;AAAA,IACA,kCAAkC,SAAS;AAAA,IAC3C,kCAAkC,IAAI;AAAA,EACxC,EAAE,KAAK,GAAG;AAEZ,QAAM,QACJ;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW;AAAA,MACX,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,mBAAiB;AAAA,MAEhB,kBAAQ,IAAI,CAAC,QAAQ;AACpB,cAAM,WAAW,gBAAgB,IAAI;AACrC,cAAM,aAAa,YAAY,CAAC,CAAC,IAAI;AAOrC,YAAI,CAAC,IAAI,SAAS,CAAC,IAAI,SAAS;AAC9B;AAAA,YACE;AAAA,YACA,6BAA6B,IAAI,KAAK;AAAA,UACxC;AAAA,QACF;AAEA,cAAM,UACJ;AAAA,UAAC;AAAA;AAAA,YAEC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,gBAAc;AAAA,YACd,UAAU;AAAA,YAGV,cAAY,IAAI;AAAA,YAChB,UAAU,WAAW,IAAI,KAAK,IAAI,IAAI;AAAA,YACtC,WAAW,CAAC,wBAAwB,YAAY,8BAA8B,EAC3E,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,YACX,SAAS,MAAM,CAAC,cAAc,aAAa,IAAI,KAAK;AAAA,YACpD,WAAW;AAAA,YACX,cAAY,CAAC,IAAI,QAAQ,IAAI,UAAU;AAAA,YAEtC;AAAA,kBAAI,QAAQ,WAAW,IAAI,MAAM,sBAAsB;AAAA,cACvD,IAAI,SAAS,oBAAC,UAAK,WAAU,yBAAyB,cAAI,OAAM;AAAA;AAAA;AAAA,UAjB5D,IAAI;AAAA,QAkBX;AAGF,eAAO,IAAI,UACT,oBAAC,WAAwB,SAAS,IAAI,SACnC,qBADW,IAAI,KAElB,IAEA,MAAM,aAAa,SAAS,EAAE,KAAK,IAAI,MAAM,CAAC;AAAA,MAElD,CAAC;AAAA;AAAA,EACH;AAQF,SACE,qBAAC,SAAI,WAAW,YACb;AAAA,sBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAW,oBAAoB,MAAM;AAAA,QACrC,SAAS,MAAM,aAAa,EAAE;AAAA,QAS9B,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,QAC7C,UAAU;AAAA,QACV,eAAY;AAAA,QAEZ,8BAAC,eAAY,WAAU,sCAAqC;AAAA;AAAA,IAC9D;AAAA,IAGD;AAAA,IAEA,kBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,WAAW,oBAAoB,MAAM;AAAA,QACrC,SAAS,MAAM,aAAa,CAAC;AAAA,QAC7B,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,QAC7C,UAAU;AAAA,QACV,eAAY;AAAA,QAEZ,8BAAC,gBAAa,WAAU,sCAAqC;AAAA;AAAA,IAC/D;AAAA,KAEJ;AAEJ;","names":["track"]}
@@ -1,14 +1,13 @@
1
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 _chunk4HZIXRAJcjs = require('./chunk-4HZIXRAJ.cjs');
3
+ var _chunkKF2OGUADcjs = require('./chunk-KF2OGUAD.cjs');
4
4
 
5
5
 
6
- var _chunkVXC7Z7XBcjs = require('./chunk-VXC7Z7XB.cjs');
6
+ var _chunkMKQVDEHIcjs = require('./chunk-MKQVDEHI.cjs');
7
7
 
8
8
 
9
9
 
10
-
11
- var _chunkENMDOQQOcjs = require('./chunk-ENMDOQQO.cjs');
10
+ var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
12
11
 
13
12
  // src/components/Select/Select.component.tsx
14
13
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -122,7 +121,7 @@ var Select = _react2.default.forwardRef(
122
121
  if (!element) return;
123
122
  const named = (_nullishCoalesce(_optionalChain([element, 'access', _7 => _7.labels, 'optionalAccess', _8 => _8.length]), () => ( 0))) > 0 || element.hasAttribute("aria-label") || element.hasAttribute("aria-labelledby");
124
123
  if (!named) {
125
- _chunkENMDOQQOcjs.devWarn.call(void 0,
124
+ _chunkR5WI5IGRcjs.devWarn.call(void 0,
126
125
  "select-missing-label",
127
126
  '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
127
  );
@@ -278,7 +277,7 @@ var Select = _react2.default.forwardRef(
278
277
  "aria-selected": isSelected,
279
278
  "aria-disabled": option.disabled,
280
279
  children: [
281
- option.icon && _chunkENMDOQQOcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
280
+ option.icon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
282
281
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-select-option-label", children: option.label }),
283
282
  isSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "eidos-select-option-check-icon" })
284
283
  ]
@@ -292,7 +291,7 @@ var Select = _react2.default.forwardRef(
292
291
  "div",
293
292
  {
294
293
  ref: triggerRef,
295
- className: `eidos-select-trigger ${fullWidth ? _chunkENMDOQQOcjs.fullWidthModifier.call(void 0, "eidos-select-trigger") : ""}`,
294
+ className: `eidos-select-trigger ${fullWidth ? "eidos-select-trigger--full-width" : ""}`,
296
295
  onKeyDown: handleKeyDown,
297
296
  tabIndex: disabled ? -1 : void 0,
298
297
  role: "combobox",
@@ -301,7 +300,7 @@ var Select = _react2.default.forwardRef(
301
300
  "aria-controls": isOpen ? `${id || "select"}-options` : void 0,
302
301
  "aria-activedescendant": focusedIndex >= 0 ? `${id || "select"}-option-${focusedIndex}` : void 0,
303
302
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
304
- _chunk4HZIXRAJcjs.Input,
303
+ _chunkKF2OGUADcjs.Input,
305
304
  {
306
305
  ref: inputRef,
307
306
  value: selectedValues.size > 0 ? displayValue : "",
@@ -327,9 +326,9 @@ var Select = _react2.default.forwardRef(
327
326
  "div",
328
327
  {
329
328
  ref,
330
- className: `${"eidos-select-container"} ${fullWidth ? _chunkENMDOQQOcjs.fullWidthModifier.call(void 0, "eidos-select-container") : ""} ${className}`,
329
+ className: `${"eidos-select-container"} ${fullWidth ? "eidos-select-container--full-width" : ""} ${className}`,
331
330
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
332
- _chunkVXC7Z7XBcjs.Dropdown,
331
+ _chunkMKQVDEHIcjs.Dropdown,
333
332
  {
334
333
  open: isOpen,
335
334
  onOpenChange: setIsOpen,
@@ -354,4 +353,4 @@ Select.displayName = "Select";
354
353
 
355
354
 
356
355
  exports.Select = Select;
357
- //# sourceMappingURL=chunk-B2OHBIAL.cjs.map
356
+ //# sourceMappingURL=chunk-BKUZF7CW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BKUZF7CW.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BKUZF7CW.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, 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 ? 'eidos-select-trigger--full-width' : ''}`}\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 ? 'eidos-select-container--full-width' : ''\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,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkUTYY35QXcjs = require('./chunk-UTYY35QX.cjs');
3
+ var _chunkRZMQCVAScjs = require('./chunk-RZMQCVAS.cjs');
4
4
 
5
5
 
6
- var _chunkENMDOQQOcjs = require('./chunk-ENMDOQQO.cjs');
6
+ var _chunkR5WI5IGRcjs = require('./chunk-R5WI5IGR.cjs');
7
7
 
8
8
 
9
9
  var _chunkKXDGW6LJcjs = require('./chunk-KXDGW6LJ.cjs');
@@ -53,9 +53,9 @@ var Chip = ({
53
53
  };
54
54
  const hasBothControls = isClickable && isRemovable;
55
55
  const body = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
56
- preIcon && _chunkENMDOQQOcjs.renderIcon.call(void 0, preIcon, "eidos-chip--pre-icon"),
56
+ preIcon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, preIcon, "eidos-chip--pre-icon"),
57
57
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-chip--copy", children }),
58
- posIcon && _chunkENMDOQQOcjs.renderIcon.call(void 0, posIcon, "eidos-chip--pos-icon")
58
+ posIcon && _chunkR5WI5IGRcjs.renderIcon.call(void 0, posIcon, "eidos-chip--pos-icon")
59
59
  ] });
60
60
  const renderLink = (linkHref, className2, attributes) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
61
61
  _chunkKXDGW6LJcjs.EidosLink,
@@ -72,7 +72,7 @@ var Chip = ({
72
72
  );
73
73
  if (href !== void 0 && !isRemovable) {
74
74
  const link = renderLink(href, chipClasses, chipProps);
75
- return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTYY35QXcjs.Tooltip, { message: tooltip, children: link }) : link;
75
+ return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRZMQCVAScjs.Tooltip, { message: tooltip, children: link }) : link;
76
76
  }
77
77
  const ChipElement = isClickable && !isRemovable ? "button" : "div";
78
78
  const chipContent = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -107,10 +107,10 @@ var Chip = ({
107
107
  ]
108
108
  }
109
109
  );
110
- return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUTYY35QXcjs.Tooltip, { message: tooltip, children: chipContent }) : chipContent;
110
+ return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRZMQCVAScjs.Tooltip, { message: tooltip, children: chipContent }) : chipContent;
111
111
  };
112
112
 
113
113
 
114
114
 
115
115
  exports.Chip = Chip;
116
- //# sourceMappingURL=chunk-WR77IZUU.cjs.map
116
+ //# sourceMappingURL=chunk-BPVOQLCA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-WR77IZUU.cjs","../src/components/Chip/Chip.component.tsx"],"names":["className"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACTA,2CAAkB;AAuEd,+CAAA;AAjEG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA,GAAW,KAAA,IAAS,KAAA,CAAA;AAC1C,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA;AAGtB,EAAA,MAAM,YAAA,EAAc;AAAA,IAClB,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACF,IAAA;AACD,IAAA;AACP,IAAA;AACG,IAAA;AACA,IAAA;AACF,IAAA;AACb,IAAA;AAGM,EAAA;AAEY,EAAA;AACD,IAAA;AACT,IAAA;AACV,EAAA;AAEsB,EAAA;AACF,IAAA;AACD,IAAA;AACR,IAAA;AACX,EAAA;AAiBwB,EAAA;AAGtB,EAAA;AACyB,IAAA;AAEtB,oBAAA;AAEsB,IAAA;AACzB,EAAA;AAOA,EAAA;AAIC,IAAA;AAAA,IAAA;AACK,MAAA;AACE,MAAA;AACN,MAAA;AACA,MAAA;AACWA,MAAAA;AACX,MAAA;AACmB,MAAA;AAElB,MAAA;AAAA,IAAA;AACH,EAAA;AAGyB,EAAA;AACZ,IAAA;AACI,IAAA;AACnB,EAAA;AAEoB,EAAA;AAGlB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACD,MAAA;AACD,MAAA;AACL,MAAA;AAEH,MAAA;AACC,QAAA;AAGG,UAAA;AAAA,UAAA;AACM,YAAA;AACK,YAAA;AACD,YAAA;AACT,YAAA;AAEC,YAAA;AAAA,UAAA;AAIL,QAAA;AAIA,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACD,YAAA;AACT,YAAA;AACW,YAAA;AACN,YAAA;AAEL,YAAA;AAAuC,UAAA;AACzC,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAGe,EAAA;AACnB;ADrC2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-WR77IZUU.cjs","sourcesContent":[null,"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';\nimport { EidosLink } from '../LinkProvider/Link.component';\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 href,\n target,\n rel,\n ...chipProps\n}) => {\n const isClickable = !!onClick || href !== undefined;\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\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 // A link chip follows the same two-control rule: alone, the chip *is* the\n // link; with a remove button, the link moves to the inner action slot so\n // the two stay siblings.\n const renderLink = (\n linkHref: string,\n className: string,\n attributes?: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => (\n <EidosLink\n {...attributes}\n href={linkHref}\n target={target}\n rel={rel}\n className={className}\n disabled={disabled}\n onClick={onClick ? handleClick : undefined}\n >\n {body}\n </EidosLink>\n );\n\n if (href !== undefined && !isRemovable) {\n const link = renderLink(href, chipClasses, chipProps);\n return tooltip ? <Tooltip message={tooltip}>{link}</Tooltip> : link;\n }\n\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\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 href !== undefined ? (\n renderLink(href, 'eidos-chip--action')\n ) : (\n <button\n type=\"button\"\n className=\"eidos-chip--action\"\n onClick={handleClick}\n disabled={disabled}\n >\n {body}\n </button>\n )\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"]}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BPVOQLCA.cjs","../src/components/Chip/Chip.component.tsx"],"names":["className"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACTA,2CAAkB;AAuEd,+CAAA;AAjEG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,UAAA,EAAY,KAAA;AAAA,EACZ,OAAA;AAAA,EACA,UAAA,EAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA,GAAW,KAAA,IAAS,KAAA,CAAA;AAC1C,EAAA,MAAM,YAAA,EAAc,CAAC,CAAC,QAAA;AAGtB,EAAA,MAAM,YAAA,EAAc;AAAA,IAClB,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACF,IAAA;AACD,IAAA;AACP,IAAA;AACG,IAAA;AACA,IAAA;AACF,IAAA;AACb,IAAA;AAGM,EAAA;AAEY,EAAA;AACD,IAAA;AACT,IAAA;AACV,EAAA;AAEsB,EAAA;AACF,IAAA;AACD,IAAA;AACR,IAAA;AACX,EAAA;AAiBwB,EAAA;AAGtB,EAAA;AACyB,IAAA;AAEtB,oBAAA;AAEsB,IAAA;AACzB,EAAA;AAOA,EAAA;AAIC,IAAA;AAAA,IAAA;AACK,MAAA;AACE,MAAA;AACN,MAAA;AACA,MAAA;AACWA,MAAAA;AACX,MAAA;AACmB,MAAA;AAElB,MAAA;AAAA,IAAA;AACH,EAAA;AAGyB,EAAA;AACZ,IAAA;AACI,IAAA;AACnB,EAAA;AAEoB,EAAA;AAGlB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACD,MAAA;AACD,MAAA;AACL,MAAA;AAEH,MAAA;AACC,QAAA;AAGG,UAAA;AAAA,UAAA;AACM,YAAA;AACK,YAAA;AACD,YAAA;AACT,YAAA;AAEC,YAAA;AAAA,UAAA;AAIL,QAAA;AAIA,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACD,YAAA;AACT,YAAA;AACW,YAAA;AACN,YAAA;AAEL,YAAA;AAAuC,UAAA;AACzC,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAGe,EAAA;AACnB;ADrC2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-BPVOQLCA.cjs","sourcesContent":[null,"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';\nimport { EidosLink } from '../LinkProvider/Link.component';\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 href,\n target,\n rel,\n ...chipProps\n}) => {\n const isClickable = !!onClick || href !== undefined;\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\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 // A link chip follows the same two-control rule: alone, the chip *is* the\n // link; with a remove button, the link moves to the inner action slot so\n // the two stay siblings.\n const renderLink = (\n linkHref: string,\n className: string,\n attributes?: React.AnchorHTMLAttributes<HTMLAnchorElement>,\n ) => (\n <EidosLink\n {...attributes}\n href={linkHref}\n target={target}\n rel={rel}\n className={className}\n disabled={disabled}\n onClick={onClick ? handleClick : undefined}\n >\n {body}\n </EidosLink>\n );\n\n if (href !== undefined && !isRemovable) {\n const link = renderLink(href, chipClasses, chipProps);\n return tooltip ? <Tooltip message={tooltip}>{link}</Tooltip> : link;\n }\n\n const ChipElement = isClickable && !isRemovable ? 'button' : 'div';\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 href !== undefined ? (\n renderLink(href, 'eidos-chip--action')\n ) : (\n <button\n type=\"button\"\n className=\"eidos-chip--action\"\n onClick={handleClick}\n disabled={disabled}\n >\n {body}\n </button>\n )\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"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  FOCUSABLE_SELECTOR
3
- } from "./chunk-U34INRFO.js";
3
+ } from "./chunk-PP6HS4GR.js";
4
4
 
5
5
  // src/components/Tooltip/Tooltip.component.tsx
6
6
  import { useState, useRef, useCallback, useEffect } from "react";
@@ -327,4 +327,4 @@ Tooltip.displayName = "Tooltip";
327
327
  export {
328
328
  Tooltip
329
329
  };
330
- //# sourceMappingURL=chunk-MCPGI6EI.js.map
330
+ //# sourceMappingURL=chunk-BUSMGQJ4.js.map
@@ -1,21 +1,21 @@
1
1
  import {
2
2
  DatePicker
3
- } from "./chunk-P6OJQ2RN.js";
3
+ } from "./chunk-FSX7DDLO.js";
4
4
  import {
5
5
  Select
6
- } from "./chunk-4S57PE43.js";
6
+ } from "./chunk-2WDL2ZVP.js";
7
7
  import {
8
8
  Input
9
- } from "./chunk-XIUZT4TO.js";
9
+ } from "./chunk-GE3QCXT7.js";
10
10
  import {
11
11
  Dropdown
12
- } from "./chunk-3X6QVHTD.js";
12
+ } from "./chunk-OERK3T7E.js";
13
13
  import {
14
14
  Badge
15
15
  } from "./chunk-3SKI6FXB.js";
16
16
  import {
17
17
  Button
18
- } from "./chunk-JY77VJAZ.js";
18
+ } from "./chunk-GHUEVNNU.js";
19
19
 
20
20
  // src/components/Table/TableFiltersDropdown.component.tsx
21
21
  import { useMemo, useState, useEffect, useRef } from "react";
@@ -4443,4 +4443,4 @@ export {
4443
4443
  sortableKeyboardCoordinates,
4444
4444
  TableFiltersDropdown
4445
4445
  };
4446
- //# sourceMappingURL=chunk-H3C6YECZ.js.map
4446
+ //# sourceMappingURL=chunk-D2PXPX56.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Dropdown
3
- } from "./chunk-3X6QVHTD.js";
3
+ } from "./chunk-OERK3T7E.js";
4
4
 
5
5
  // src/components/ColorPicker/ColorPicker.component.tsx
6
6
  import { useState, useRef, useEffect, useCallback } from "react";
@@ -532,4 +532,4 @@ ColorPicker.displayName = "ColorPicker";
532
532
  export {
533
533
  ColorPicker
534
534
  };
535
- //# sourceMappingURL=chunk-L6YJ6QTZ.js.map
535
+ //# sourceMappingURL=chunk-DCUIT7SI.js.map