eidos-ui 1.0.1 → 1.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 (526) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +227 -225
  3. package/dist/Combobox.types-B7ozlnA9.d.cts +35 -0
  4. package/dist/Combobox.types-DkigkEh2.d.ts +35 -0
  5. package/dist/SegmentedControl.types-CK8EiShd.d.ts +35 -0
  6. package/dist/SegmentedControl.types-Dm4SnwCK.d.cts +35 -0
  7. package/dist/Select.types-B4kDpkGB.d.ts +42 -0
  8. package/dist/Select.types-CAkT2ACt.d.cts +42 -0
  9. package/dist/accordion/index.cjs +2 -2
  10. package/dist/accordion/index.cjs.map +1 -1
  11. package/dist/accordion/index.js +1 -1
  12. package/dist/alert/index.cjs +5 -5
  13. package/dist/alert/index.cjs.map +1 -1
  14. package/dist/alert/index.js +4 -4
  15. package/dist/avatar/index.cjs +2 -2
  16. package/dist/avatar/index.cjs.map +1 -1
  17. package/dist/avatar/index.js +1 -1
  18. package/dist/badge/index.cjs.map +1 -1
  19. package/dist/breadcrumb/index.cjs +2 -2
  20. package/dist/breadcrumb/index.cjs.map +1 -1
  21. package/dist/breadcrumb/index.js +1 -1
  22. package/dist/button/index.cjs +4 -4
  23. package/dist/button/index.cjs.map +1 -1
  24. package/dist/button/index.js +3 -3
  25. package/dist/button-group/index.cjs +2 -2
  26. package/dist/button-group/index.cjs.map +1 -1
  27. package/dist/button-group/index.js +1 -1
  28. package/dist/card/index.cjs +2 -2
  29. package/dist/card/index.cjs.map +1 -1
  30. package/dist/card/index.js +1 -1
  31. package/dist/checkbox/index.cjs +2 -2
  32. package/dist/checkbox/index.cjs.map +1 -1
  33. package/dist/checkbox/index.js +1 -1
  34. package/dist/chip/index.cjs +4 -4
  35. package/dist/chip/index.cjs.map +1 -1
  36. package/dist/chip/index.js +3 -3
  37. package/dist/{chunk-OHUVWPFJ.js → chunk-2BC4M4QZ.js} +1 -1
  38. package/dist/chunk-2BC4M4QZ.js.map +1 -0
  39. package/dist/{chunk-OT3VZLN4.js → chunk-2BXCIWL7.js} +3 -3
  40. package/dist/chunk-2BXCIWL7.js.map +1 -0
  41. package/dist/{chunk-6QFT3BUD.cjs → chunk-2ROKOO22.cjs} +1 -1
  42. package/dist/chunk-2ROKOO22.cjs.map +1 -0
  43. package/dist/{chunk-AOV32YBE.js → chunk-2RXQMQYW.js} +1 -1
  44. package/dist/chunk-2RXQMQYW.js.map +1 -0
  45. package/dist/{chunk-VYV45YOK.cjs → chunk-2U7UJOOB.cjs} +17 -17
  46. package/dist/chunk-2U7UJOOB.cjs.map +1 -0
  47. package/dist/{chunk-UTENJWSE.cjs → chunk-366R4GKR.cjs} +1 -1
  48. package/dist/chunk-366R4GKR.cjs.map +1 -0
  49. package/dist/{chunk-TQCNQKWF.cjs → chunk-3CXULV4G.cjs} +1 -1
  50. package/dist/chunk-3CXULV4G.cjs.map +1 -0
  51. package/dist/{chunk-PEPYVWGY.cjs → chunk-3EPND5M2.cjs} +3 -3
  52. package/dist/chunk-3EPND5M2.cjs.map +1 -0
  53. package/dist/chunk-3ETWFS2N.cjs.map +1 -1
  54. package/dist/{chunk-GL4DHGQE.js → chunk-3HMKE2GJ.js} +5 -5
  55. package/dist/chunk-3HMKE2GJ.js.map +1 -0
  56. package/dist/{chunk-QYHTMEI5.js → chunk-3LBWAUCR.js} +1 -1
  57. package/dist/chunk-3LBWAUCR.js.map +1 -0
  58. package/dist/{chunk-E2B33QB7.js → chunk-3LHQUOGP.js} +4 -4
  59. package/dist/chunk-3LHQUOGP.js.map +1 -0
  60. package/dist/chunk-3RUIKBH4.cjs.map +1 -1
  61. package/dist/{chunk-DK4S3EHG.js → chunk-3TUCQAYL.js} +1 -1
  62. package/dist/chunk-3TUCQAYL.js.map +1 -0
  63. package/dist/{chunk-BBOUUHLO.js → chunk-3VRMTWUS.js} +5 -5
  64. package/dist/chunk-3VRMTWUS.js.map +1 -0
  65. package/dist/{chunk-SXF3TCYA.js → chunk-4BKTBV2I.js} +1 -1
  66. package/dist/chunk-4BKTBV2I.js.map +1 -0
  67. package/dist/{chunk-P74HNSNJ.cjs → chunk-4BQM5F76.cjs} +3 -3
  68. package/dist/chunk-4BQM5F76.cjs.map +1 -0
  69. package/dist/{chunk-Z7S4UQKY.js → chunk-4LM33LDV.js} +2 -2
  70. package/dist/chunk-4LM33LDV.js.map +1 -0
  71. package/dist/{chunk-GRH57M3E.js → chunk-4M3LZLOH.js} +3 -3
  72. package/dist/chunk-4M3LZLOH.js.map +1 -0
  73. package/dist/{chunk-M56IGNH7.cjs → chunk-4UJ7LG4W.cjs} +3 -3
  74. package/dist/chunk-4UJ7LG4W.cjs.map +1 -0
  75. package/dist/{chunk-P6ZBENAG.js → chunk-56B6RLOE.js} +3 -3
  76. package/dist/chunk-56B6RLOE.js.map +1 -0
  77. package/dist/{chunk-XSGUFMT4.js → chunk-5CLC3FJO.js} +1 -1
  78. package/dist/chunk-5CLC3FJO.js.map +1 -0
  79. package/dist/{chunk-VLC2OZV3.cjs → chunk-5O73AALP.cjs} +1 -1
  80. package/dist/chunk-5O73AALP.cjs.map +1 -0
  81. package/dist/{chunk-F54MVGKO.js → chunk-5WROPW7Z.js} +4 -4
  82. package/dist/chunk-5WROPW7Z.js.map +1 -0
  83. package/dist/{chunk-H56YUMFB.cjs → chunk-6A2ZKVST.cjs} +5 -5
  84. package/dist/chunk-6A2ZKVST.cjs.map +1 -0
  85. package/dist/{chunk-CJUZDUXW.cjs → chunk-6RGJAQCU.cjs} +5 -5
  86. package/dist/chunk-6RGJAQCU.cjs.map +1 -0
  87. package/dist/{chunk-P2BTQ33C.cjs → chunk-6U2H26A4.cjs} +4 -4
  88. package/dist/chunk-6U2H26A4.cjs.map +1 -0
  89. package/dist/{chunk-6USUVU6J.js → chunk-6ZAT5CGB.js} +1 -1
  90. package/dist/chunk-6ZAT5CGB.js.map +1 -0
  91. package/dist/{chunk-YKECQKOV.cjs → chunk-7AHZTHXR.cjs} +9 -9
  92. package/dist/chunk-7AHZTHXR.cjs.map +1 -0
  93. package/dist/{chunk-QYK4ECSZ.js → chunk-7HEUWGYW.js} +1 -1
  94. package/dist/chunk-7HEUWGYW.js.map +1 -0
  95. package/dist/{chunk-KF64C4QI.js → chunk-A3NE2C7C.js} +2 -2
  96. package/dist/chunk-A3NE2C7C.js.map +1 -0
  97. package/dist/{chunk-6GAIQ2IY.cjs → chunk-A5JVDHML.cjs} +239 -116
  98. package/dist/chunk-A5JVDHML.cjs.map +1 -0
  99. package/dist/{chunk-6HGDQ4BM.js → chunk-A5LHCAQY.js} +209 -86
  100. package/dist/chunk-A5LHCAQY.js.map +1 -0
  101. package/dist/{chunk-LTOHGCU4.cjs → chunk-A7Z2QAFZ.cjs} +7 -7
  102. package/dist/chunk-A7Z2QAFZ.cjs.map +1 -0
  103. package/dist/{chunk-ICHPPNFV.js → chunk-ALGX5X4N.js} +5 -5
  104. package/dist/chunk-ALGX5X4N.js.map +1 -0
  105. package/dist/{chunk-FNUOTM44.cjs → chunk-AYMD4D4M.cjs} +3 -3
  106. package/dist/chunk-AYMD4D4M.cjs.map +1 -0
  107. package/dist/{chunk-HQ4KZRFH.js → chunk-BOB5JJ7F.js} +3 -3
  108. package/dist/chunk-BOB5JJ7F.js.map +1 -0
  109. package/dist/{chunk-BTPCSBGP.js → chunk-CJVC3A4O.js} +2 -2
  110. package/dist/chunk-CJVC3A4O.js.map +1 -0
  111. package/dist/{chunk-ZBGTVTQJ.js → chunk-CMOBXLNA.js} +1 -1
  112. package/dist/chunk-CMOBXLNA.js.map +1 -0
  113. package/dist/{chunk-POX6JZLO.cjs → chunk-DKZTDYH5.cjs} +5 -5
  114. package/dist/chunk-DKZTDYH5.cjs.map +1 -0
  115. package/dist/{chunk-S25WB7KJ.js → chunk-DRXPTACG.js} +1 -1
  116. package/dist/chunk-DRXPTACG.js.map +1 -0
  117. package/dist/{chunk-XMRMCWSQ.js → chunk-DW2YDWGN.js} +5 -5
  118. package/dist/chunk-DW2YDWGN.js.map +1 -0
  119. package/dist/chunk-DZUJEN5N.cjs.map +1 -1
  120. package/dist/chunk-EACNRR3C.cjs.map +1 -1
  121. package/dist/{chunk-7IOOFKG3.js → chunk-EF4Y6Q35.js} +1 -1
  122. package/dist/chunk-EF4Y6Q35.js.map +1 -0
  123. package/dist/chunk-EQ6BNPTL.cjs.map +1 -1
  124. package/dist/{chunk-VZ43OLU6.cjs → chunk-EQEV7GPT.cjs} +7 -7
  125. package/dist/chunk-EQEV7GPT.cjs.map +1 -0
  126. package/dist/{chunk-ICJ3SV5I.cjs → chunk-FKXKBJUI.cjs} +1 -1
  127. package/dist/chunk-FKXKBJUI.cjs.map +1 -0
  128. package/dist/{chunk-BFYSYUA6.cjs → chunk-FMPXSF3H.cjs} +11 -11
  129. package/dist/chunk-FMPXSF3H.cjs.map +1 -0
  130. package/dist/chunk-FQZ6F7FQ.cjs.map +1 -1
  131. package/dist/{chunk-KV2FG7AN.cjs → chunk-FRUOA2QU.cjs} +1 -1
  132. package/dist/chunk-FRUOA2QU.cjs.map +1 -0
  133. package/dist/{chunk-CDV2OAS3.cjs → chunk-G5IGADJI.cjs} +7 -7
  134. package/dist/chunk-G5IGADJI.cjs.map +1 -0
  135. package/dist/{chunk-TBMVUI7S.cjs → chunk-GOR642KK.cjs} +1 -1
  136. package/dist/chunk-GOR642KK.cjs.map +1 -0
  137. package/dist/{chunk-XJBMEDQ5.js → chunk-H6CWTMAH.js} +1 -1
  138. package/dist/chunk-H6CWTMAH.js.map +1 -0
  139. package/dist/{chunk-2ZWBN3LK.cjs → chunk-HFZ5FKRG.cjs} +1 -1
  140. package/dist/chunk-HFZ5FKRG.cjs.map +1 -0
  141. package/dist/{chunk-QGZF5MOS.cjs → chunk-HLNKIAE5.cjs} +7 -7
  142. package/dist/chunk-HLNKIAE5.cjs.map +1 -0
  143. package/dist/{chunk-GI7WPGP2.cjs → chunk-HNUTV3HR.cjs} +7 -7
  144. package/dist/chunk-HNUTV3HR.cjs.map +1 -0
  145. package/dist/chunk-I44YNYI6.cjs.map +1 -1
  146. package/dist/chunk-I6UOIS4J.cjs.map +1 -1
  147. package/dist/{chunk-LEZ4HSBD.cjs → chunk-IC2M4N7R.cjs} +34 -34
  148. package/dist/chunk-IC2M4N7R.cjs.map +1 -0
  149. package/dist/{chunk-G2FANEA2.cjs → chunk-IJ4DXG7D.cjs} +1 -1
  150. package/dist/chunk-IJ4DXG7D.cjs.map +1 -0
  151. package/dist/{chunk-SOGUWOSQ.cjs → chunk-IJYYHBZC.cjs} +3 -3
  152. package/dist/chunk-IJYYHBZC.cjs.map +1 -0
  153. package/dist/{chunk-SAFSEXMU.cjs → chunk-ISABZ2VX.cjs} +8 -8
  154. package/dist/chunk-ISABZ2VX.cjs.map +1 -0
  155. package/dist/{chunk-VTAABT55.js → chunk-IV4LM3MB.js} +6 -6
  156. package/dist/chunk-IV4LM3MB.js.map +1 -0
  157. package/dist/{chunk-KO2MKZDW.cjs → chunk-IXZMKIV5.cjs} +1 -1
  158. package/dist/chunk-IXZMKIV5.cjs.map +1 -0
  159. package/dist/{chunk-7KGV6YCG.cjs → chunk-IYWAZEFI.cjs} +1 -1
  160. package/dist/chunk-IYWAZEFI.cjs.map +1 -0
  161. package/dist/{chunk-E3XATJ63.js → chunk-IZBJW37N.js} +6 -6
  162. package/dist/chunk-IZBJW37N.js.map +1 -0
  163. package/dist/{chunk-HO7P6IJO.js → chunk-JC4WLVBG.js} +2 -2
  164. package/dist/chunk-JC4WLVBG.js.map +1 -0
  165. package/dist/{chunk-O6B4KB4D.js → chunk-JMD3P4CY.js} +5 -5
  166. package/dist/chunk-JMD3P4CY.js.map +1 -0
  167. package/dist/{chunk-T56K5IKQ.js → chunk-JV7Z3D3U.js} +2 -2
  168. package/dist/chunk-JV7Z3D3U.js.map +1 -0
  169. package/dist/{chunk-DFADZZ3K.js → chunk-K7IFNKMN.js} +3 -3
  170. package/dist/chunk-K7IFNKMN.js.map +1 -0
  171. package/dist/{chunk-C7F2VFAI.cjs → chunk-KIXFSXIN.cjs} +1 -1
  172. package/dist/chunk-KIXFSXIN.cjs.map +1 -0
  173. package/dist/{chunk-V5JNYS77.cjs → chunk-KV3V2CPH.cjs} +1 -1
  174. package/dist/chunk-KV3V2CPH.cjs.map +1 -0
  175. package/dist/{chunk-5TGBNYZK.cjs → chunk-KVIL4EP4.cjs} +1 -1
  176. package/dist/chunk-KVIL4EP4.cjs.map +1 -0
  177. package/dist/{chunk-PWIA4XQD.js → chunk-LUSLBNSG.js} +1 -1
  178. package/dist/chunk-LUSLBNSG.js.map +1 -0
  179. package/dist/{chunk-73EKJU4G.js → chunk-LYH3EKKQ.js} +1 -1
  180. package/dist/chunk-LYH3EKKQ.js.map +1 -0
  181. package/dist/{chunk-D7PGZ3M3.cjs → chunk-MW2S7PZ7.cjs} +5 -5
  182. package/dist/chunk-MW2S7PZ7.cjs.map +1 -0
  183. package/dist/{chunk-LQ3C3OR2.js → chunk-MZZ4SAFY.js} +1 -1
  184. package/dist/chunk-MZZ4SAFY.js.map +1 -0
  185. package/dist/{chunk-KKOZX64Z.js → chunk-NEQXEVHM.js} +1 -1
  186. package/dist/chunk-NEQXEVHM.js.map +1 -0
  187. package/dist/{chunk-NDLMU6HJ.js → chunk-NFIK3KMT.js} +9 -9
  188. package/dist/chunk-NFIK3KMT.js.map +1 -0
  189. package/dist/{chunk-3YPTYI7R.js → chunk-NQ4L6PYW.js} +1 -1
  190. package/dist/chunk-NQ4L6PYW.js.map +1 -0
  191. package/dist/{chunk-JFA5ABVE.js → chunk-NSITXZBU.js} +1 -1
  192. package/dist/chunk-NSITXZBU.js.map +1 -0
  193. package/dist/{chunk-2YQE26EK.js → chunk-O3I3RBZJ.js} +1 -1
  194. package/dist/chunk-O3I3RBZJ.js.map +1 -0
  195. package/dist/{chunk-O5ZPSZNY.cjs → chunk-OGKD5PLS.cjs} +6 -6
  196. package/dist/chunk-OGKD5PLS.cjs.map +1 -0
  197. package/dist/{chunk-7R7IFWGB.cjs → chunk-OZZHOEN5.cjs} +1 -1
  198. package/dist/chunk-OZZHOEN5.cjs.map +1 -0
  199. package/dist/{chunk-6P4WYB3B.js → chunk-P2GCAVUZ.js} +2 -2
  200. package/dist/chunk-P2GCAVUZ.js.map +1 -0
  201. package/dist/{chunk-L3UPSLJ5.cjs → chunk-PA4IT2XQ.cjs} +19 -19
  202. package/dist/chunk-PA4IT2XQ.cjs.map +1 -0
  203. package/dist/{chunk-N7HX5635.cjs → chunk-PJC7NZUV.cjs} +3 -3
  204. package/dist/chunk-PJC7NZUV.cjs.map +1 -0
  205. package/dist/{chunk-QP2A5ZMK.cjs → chunk-PTBBY4ZX.cjs} +1 -1
  206. package/dist/chunk-PTBBY4ZX.cjs.map +1 -0
  207. package/dist/{chunk-VFYG7GAH.js → chunk-PY2376XI.js} +2 -2
  208. package/dist/chunk-PY2376XI.js.map +1 -0
  209. package/dist/{chunk-R5UNLPQZ.cjs → chunk-Q3GNKF74.cjs} +1 -1
  210. package/dist/chunk-Q3GNKF74.cjs.map +1 -0
  211. package/dist/{chunk-YLKESEHQ.cjs → chunk-QF2RAUPB.cjs} +1 -1
  212. package/dist/chunk-QF2RAUPB.cjs.map +1 -0
  213. package/dist/{chunk-2HTBZGBP.cjs → chunk-QQIALSTX.cjs} +1 -1
  214. package/dist/chunk-QQIALSTX.cjs.map +1 -0
  215. package/dist/{chunk-5QG2I3FK.cjs → chunk-S77GR5YQ.cjs} +3 -3
  216. package/dist/chunk-S77GR5YQ.cjs.map +1 -0
  217. package/dist/{chunk-YCUT6NQ4.js → chunk-S7TWEVC3.js} +2 -2
  218. package/dist/chunk-S7TWEVC3.js.map +1 -0
  219. package/dist/{chunk-2JWY36LD.cjs → chunk-SDEKANNL.cjs} +1 -1
  220. package/dist/chunk-SDEKANNL.cjs.map +1 -0
  221. package/dist/{chunk-RSBQNIJZ.js → chunk-SENVA467.js} +1 -1
  222. package/dist/chunk-SENVA467.js.map +1 -0
  223. package/dist/chunk-SJDTFR3I.cjs.map +1 -1
  224. package/dist/chunk-SWPZ3HFY.cjs.map +1 -1
  225. package/dist/{chunk-R36SGSJX.cjs → chunk-TROYIUDH.cjs} +1 -1
  226. package/dist/chunk-TROYIUDH.cjs.map +1 -0
  227. package/dist/{chunk-3KAR5KCS.cjs → chunk-UGMONQGH.cjs} +11 -11
  228. package/dist/chunk-UGMONQGH.cjs.map +1 -0
  229. package/dist/{chunk-CKH36D7H.js → chunk-UTUPJOBY.js} +1 -1
  230. package/dist/chunk-UTUPJOBY.js.map +1 -0
  231. package/dist/{chunk-63N2KZZX.cjs → chunk-V2S6XWIQ.cjs} +1 -1
  232. package/dist/chunk-V2S6XWIQ.cjs.map +1 -0
  233. package/dist/{chunk-G36S5CWN.cjs → chunk-V5RS3JZN.cjs} +1 -1
  234. package/dist/chunk-V5RS3JZN.cjs.map +1 -0
  235. package/dist/chunk-VW32UTUE.cjs.map +1 -1
  236. package/dist/{chunk-4NUZP66U.js → chunk-VZYLJSV5.js} +3 -3
  237. package/dist/chunk-VZYLJSV5.js.map +1 -0
  238. package/dist/{chunk-GOVOQZYN.js → chunk-W2F6WDUX.js} +1 -1
  239. package/dist/chunk-W2F6WDUX.js.map +1 -0
  240. package/dist/{chunk-AUFCW7QU.cjs → chunk-W6IKHJ76.cjs} +3 -3
  241. package/dist/chunk-W6IKHJ76.cjs.map +1 -0
  242. package/dist/{chunk-A35Y5MRJ.js → chunk-WE5FTQGD.js} +3 -3
  243. package/dist/chunk-WE5FTQGD.js.map +1 -0
  244. package/dist/{chunk-FO5FNTJX.js → chunk-WIE7HDIM.js} +3 -3
  245. package/dist/chunk-WIE7HDIM.js.map +1 -0
  246. package/dist/{chunk-YZOVF7JV.cjs → chunk-WPTMMOA6.cjs} +9 -9
  247. package/dist/chunk-WPTMMOA6.cjs.map +1 -0
  248. package/dist/{chunk-HUNMRKGE.js → chunk-WTXASLBB.js} +2 -2
  249. package/dist/chunk-WTXASLBB.js.map +1 -0
  250. package/dist/chunk-XJAXKENE.cjs.map +1 -1
  251. package/dist/{chunk-TCX3QKF3.js → chunk-XJBWFDDE.js} +1 -1
  252. package/dist/chunk-XJBWFDDE.js.map +1 -0
  253. package/dist/{chunk-IYQX7PBO.cjs → chunk-XKQMEVOD.cjs} +1 -1
  254. package/dist/chunk-XKQMEVOD.cjs.map +1 -0
  255. package/dist/{chunk-KQKJVFYF.js → chunk-YQLCPKGV.js} +1 -1
  256. package/dist/chunk-YQLCPKGV.js.map +1 -0
  257. package/dist/{chunk-H523JFY2.js → chunk-YV57RSPD.js} +1 -1
  258. package/dist/chunk-YV57RSPD.js.map +1 -0
  259. package/dist/{chunk-JORQYNJD.js → chunk-Z4ZY7L7W.js} +3 -3
  260. package/dist/chunk-Z4ZY7L7W.js.map +1 -0
  261. package/dist/{chunk-R5QPUQSI.cjs → chunk-Z5U4NJTW.cjs} +1 -1
  262. package/dist/chunk-Z5U4NJTW.cjs.map +1 -0
  263. package/dist/{chunk-5D3LIJYW.cjs → chunk-ZBKJ3EMK.cjs} +5 -5
  264. package/dist/chunk-ZBKJ3EMK.cjs.map +1 -0
  265. package/dist/{chunk-K5TKNT6I.cjs → chunk-ZMDZGL5A.cjs} +1 -1
  266. package/dist/chunk-ZMDZGL5A.cjs.map +1 -0
  267. package/dist/{chunk-OVYIBDGE.js → chunk-ZZSPQFMX.js} +1 -1
  268. package/dist/chunk-ZZSPQFMX.js.map +1 -0
  269. package/dist/color-picker/index.cjs +3 -3
  270. package/dist/color-picker/index.cjs.map +1 -1
  271. package/dist/color-picker/index.js +2 -2
  272. package/dist/combobox/index.cjs +6 -6
  273. package/dist/combobox/index.cjs.map +1 -1
  274. package/dist/combobox/index.d.cts +4 -33
  275. package/dist/combobox/index.d.ts +4 -33
  276. package/dist/combobox/index.js +5 -5
  277. package/dist/command-palette/index.cjs +3 -3
  278. package/dist/command-palette/index.cjs.map +1 -1
  279. package/dist/command-palette/index.js +2 -2
  280. package/dist/context-menu/index.cjs +7 -7
  281. package/dist/context-menu/index.cjs.map +1 -1
  282. package/dist/context-menu/index.js +6 -6
  283. package/dist/data-grid/index.cjs +19 -17
  284. package/dist/data-grid/index.cjs.map +1 -1
  285. package/dist/data-grid/index.d.cts +91 -3
  286. package/dist/data-grid/index.d.ts +91 -3
  287. package/dist/data-grid/index.js +18 -16
  288. package/dist/date-picker/index.cjs +8 -8
  289. package/dist/date-picker/index.cjs.map +1 -1
  290. package/dist/date-picker/index.js +7 -7
  291. package/dist/divider/index.cjs +2 -2
  292. package/dist/divider/index.cjs.map +1 -1
  293. package/dist/divider/index.js +1 -1
  294. package/dist/drawer/index.cjs +5 -5
  295. package/dist/drawer/index.cjs.map +1 -1
  296. package/dist/drawer/index.js +4 -4
  297. package/dist/dropdown/index.cjs +2 -2
  298. package/dist/dropdown/index.cjs.map +1 -1
  299. package/dist/dropdown/index.js +1 -1
  300. package/dist/empty-state/index.cjs +2 -2
  301. package/dist/empty-state/index.cjs.map +1 -1
  302. package/dist/empty-state/index.js +1 -1
  303. package/dist/file-upload/index.cjs +2 -2
  304. package/dist/file-upload/index.cjs.map +1 -1
  305. package/dist/file-upload/index.js +1 -1
  306. package/dist/footer/index.cjs +2 -2
  307. package/dist/footer/index.cjs.map +1 -1
  308. package/dist/footer/index.js +1 -1
  309. package/dist/header/index.cjs +5 -5
  310. package/dist/header/index.cjs.map +1 -1
  311. package/dist/header/index.js +4 -4
  312. package/dist/index.cjs +59 -59
  313. package/dist/index.cjs.map +1 -1
  314. package/dist/index.css +20 -4
  315. package/dist/index.d.cts +7 -4
  316. package/dist/index.d.ts +7 -4
  317. package/dist/index.js +59 -59
  318. package/dist/inline-edit/index.cjs +5 -5
  319. package/dist/inline-edit/index.cjs.map +1 -1
  320. package/dist/inline-edit/index.js +4 -4
  321. package/dist/input/index.cjs +4 -4
  322. package/dist/input/index.cjs.map +1 -1
  323. package/dist/input/index.js +3 -3
  324. package/dist/kbd/index.cjs +2 -2
  325. package/dist/kbd/index.cjs.map +1 -1
  326. package/dist/kbd/index.js +1 -1
  327. package/dist/menu/index.cjs +6 -6
  328. package/dist/menu/index.cjs.map +1 -1
  329. package/dist/menu/index.js +5 -5
  330. package/dist/modal/index.cjs +5 -5
  331. package/dist/modal/index.cjs.map +1 -1
  332. package/dist/modal/index.js +4 -4
  333. package/dist/navigation/index.cjs +6 -6
  334. package/dist/navigation/index.cjs.map +1 -1
  335. package/dist/navigation/index.js +5 -5
  336. package/dist/number-input/index.cjs +2 -2
  337. package/dist/number-input/index.cjs.map +1 -1
  338. package/dist/number-input/index.js +1 -1
  339. package/dist/o-t-p-input/index.cjs +2 -2
  340. package/dist/o-t-p-input/index.cjs.map +1 -1
  341. package/dist/o-t-p-input/index.js +1 -1
  342. package/dist/page-layout/index.cjs +15 -15
  343. package/dist/page-layout/index.cjs.map +1 -1
  344. package/dist/page-layout/index.js +14 -14
  345. package/dist/pagination/index.cjs +8 -8
  346. package/dist/pagination/index.cjs.map +1 -1
  347. package/dist/pagination/index.js +7 -7
  348. package/dist/pill/index.cjs.map +1 -1
  349. package/dist/popover/index.cjs +2 -2
  350. package/dist/popover/index.cjs.map +1 -1
  351. package/dist/popover/index.js +1 -1
  352. package/dist/progress/index.cjs +2 -2
  353. package/dist/progress/index.cjs.map +1 -1
  354. package/dist/progress/index.js +1 -1
  355. package/dist/radio/index.cjs +2 -2
  356. package/dist/radio/index.cjs.map +1 -1
  357. package/dist/radio/index.js +1 -1
  358. package/dist/segmented-control/index.cjs +4 -4
  359. package/dist/segmented-control/index.cjs.map +1 -1
  360. package/dist/segmented-control/index.d.cts +5 -34
  361. package/dist/segmented-control/index.d.ts +5 -34
  362. package/dist/segmented-control/index.js +3 -3
  363. package/dist/select/index.cjs +6 -6
  364. package/dist/select/index.cjs.map +1 -1
  365. package/dist/select/index.d.cts +5 -41
  366. package/dist/select/index.d.ts +5 -41
  367. package/dist/select/index.js +5 -5
  368. package/dist/skeleton/index.cjs +2 -2
  369. package/dist/skeleton/index.cjs.map +1 -1
  370. package/dist/skeleton/index.js +1 -1
  371. package/dist/slider/index.cjs +2 -2
  372. package/dist/slider/index.cjs.map +1 -1
  373. package/dist/slider/index.js +1 -1
  374. package/dist/snackbar/index.cjs +5 -5
  375. package/dist/snackbar/index.cjs.map +1 -1
  376. package/dist/snackbar/index.js +4 -4
  377. package/dist/spinner/index.cjs +2 -2
  378. package/dist/spinner/index.cjs.map +1 -1
  379. package/dist/spinner/index.js +1 -1
  380. package/dist/split-button/index.cjs +7 -7
  381. package/dist/split-button/index.cjs.map +1 -1
  382. package/dist/split-button/index.js +6 -6
  383. package/dist/stepper/index.cjs +2 -2
  384. package/dist/stepper/index.cjs.map +1 -1
  385. package/dist/stepper/index.js +1 -1
  386. package/dist/switch/index.cjs +2 -2
  387. package/dist/switch/index.cjs.map +1 -1
  388. package/dist/switch/index.js +1 -1
  389. package/dist/table/index.cjs +17 -17
  390. package/dist/table/index.cjs.map +1 -1
  391. package/dist/table/index.js +16 -16
  392. package/dist/tabs/index.cjs +3 -3
  393. package/dist/tabs/index.cjs.map +1 -1
  394. package/dist/tabs/index.js +2 -2
  395. package/dist/tag-input/index.cjs +6 -6
  396. package/dist/tag-input/index.cjs.map +1 -1
  397. package/dist/tag-input/index.js +5 -5
  398. package/dist/textarea/index.cjs +4 -4
  399. package/dist/textarea/index.cjs.map +1 -1
  400. package/dist/textarea/index.js +3 -3
  401. package/dist/timeline/index.cjs +2 -2
  402. package/dist/timeline/index.cjs.map +1 -1
  403. package/dist/timeline/index.js +1 -1
  404. package/dist/toolbar/index.cjs +11 -11
  405. package/dist/toolbar/index.cjs.map +1 -1
  406. package/dist/toolbar/index.js +10 -10
  407. package/dist/tooltip/index.cjs +2 -2
  408. package/dist/tooltip/index.cjs.map +1 -1
  409. package/dist/tooltip/index.js +1 -1
  410. package/dist/tree-view/index.cjs +2 -2
  411. package/dist/tree-view/index.cjs.map +1 -1
  412. package/dist/tree-view/index.js +1 -1
  413. package/dist/virtual-list/index.cjs +3 -3
  414. package/dist/virtual-list/index.cjs.map +1 -1
  415. package/dist/virtual-list/index.js +2 -2
  416. package/package.json +111 -114
  417. package/dist/chunk-2HTBZGBP.cjs.map +0 -1
  418. package/dist/chunk-2JWY36LD.cjs.map +0 -1
  419. package/dist/chunk-2YQE26EK.js.map +0 -1
  420. package/dist/chunk-2ZWBN3LK.cjs.map +0 -1
  421. package/dist/chunk-3KAR5KCS.cjs.map +0 -1
  422. package/dist/chunk-3YPTYI7R.js.map +0 -1
  423. package/dist/chunk-4NUZP66U.js.map +0 -1
  424. package/dist/chunk-5D3LIJYW.cjs.map +0 -1
  425. package/dist/chunk-5QG2I3FK.cjs.map +0 -1
  426. package/dist/chunk-5TGBNYZK.cjs.map +0 -1
  427. package/dist/chunk-63N2KZZX.cjs.map +0 -1
  428. package/dist/chunk-6GAIQ2IY.cjs.map +0 -1
  429. package/dist/chunk-6HGDQ4BM.js.map +0 -1
  430. package/dist/chunk-6P4WYB3B.js.map +0 -1
  431. package/dist/chunk-6QFT3BUD.cjs.map +0 -1
  432. package/dist/chunk-6USUVU6J.js.map +0 -1
  433. package/dist/chunk-73EKJU4G.js.map +0 -1
  434. package/dist/chunk-7IOOFKG3.js.map +0 -1
  435. package/dist/chunk-7KGV6YCG.cjs.map +0 -1
  436. package/dist/chunk-7R7IFWGB.cjs.map +0 -1
  437. package/dist/chunk-A35Y5MRJ.js.map +0 -1
  438. package/dist/chunk-AOV32YBE.js.map +0 -1
  439. package/dist/chunk-AUFCW7QU.cjs.map +0 -1
  440. package/dist/chunk-BBOUUHLO.js.map +0 -1
  441. package/dist/chunk-BFYSYUA6.cjs.map +0 -1
  442. package/dist/chunk-BTPCSBGP.js.map +0 -1
  443. package/dist/chunk-C7F2VFAI.cjs.map +0 -1
  444. package/dist/chunk-CDV2OAS3.cjs.map +0 -1
  445. package/dist/chunk-CJUZDUXW.cjs.map +0 -1
  446. package/dist/chunk-CKH36D7H.js.map +0 -1
  447. package/dist/chunk-D7PGZ3M3.cjs.map +0 -1
  448. package/dist/chunk-DFADZZ3K.js.map +0 -1
  449. package/dist/chunk-DK4S3EHG.js.map +0 -1
  450. package/dist/chunk-E2B33QB7.js.map +0 -1
  451. package/dist/chunk-E3XATJ63.js.map +0 -1
  452. package/dist/chunk-F54MVGKO.js.map +0 -1
  453. package/dist/chunk-FNUOTM44.cjs.map +0 -1
  454. package/dist/chunk-FO5FNTJX.js.map +0 -1
  455. package/dist/chunk-G2FANEA2.cjs.map +0 -1
  456. package/dist/chunk-G36S5CWN.cjs.map +0 -1
  457. package/dist/chunk-GI7WPGP2.cjs.map +0 -1
  458. package/dist/chunk-GL4DHGQE.js.map +0 -1
  459. package/dist/chunk-GOVOQZYN.js.map +0 -1
  460. package/dist/chunk-GRH57M3E.js.map +0 -1
  461. package/dist/chunk-H523JFY2.js.map +0 -1
  462. package/dist/chunk-H56YUMFB.cjs.map +0 -1
  463. package/dist/chunk-HO7P6IJO.js.map +0 -1
  464. package/dist/chunk-HQ4KZRFH.js.map +0 -1
  465. package/dist/chunk-HUNMRKGE.js.map +0 -1
  466. package/dist/chunk-ICHPPNFV.js.map +0 -1
  467. package/dist/chunk-ICJ3SV5I.cjs.map +0 -1
  468. package/dist/chunk-IYQX7PBO.cjs.map +0 -1
  469. package/dist/chunk-JFA5ABVE.js.map +0 -1
  470. package/dist/chunk-JORQYNJD.js.map +0 -1
  471. package/dist/chunk-K5TKNT6I.cjs.map +0 -1
  472. package/dist/chunk-KF64C4QI.js.map +0 -1
  473. package/dist/chunk-KKOZX64Z.js.map +0 -1
  474. package/dist/chunk-KO2MKZDW.cjs.map +0 -1
  475. package/dist/chunk-KQKJVFYF.js.map +0 -1
  476. package/dist/chunk-KV2FG7AN.cjs.map +0 -1
  477. package/dist/chunk-L3UPSLJ5.cjs.map +0 -1
  478. package/dist/chunk-LEZ4HSBD.cjs.map +0 -1
  479. package/dist/chunk-LQ3C3OR2.js.map +0 -1
  480. package/dist/chunk-LTOHGCU4.cjs.map +0 -1
  481. package/dist/chunk-M56IGNH7.cjs.map +0 -1
  482. package/dist/chunk-N7HX5635.cjs.map +0 -1
  483. package/dist/chunk-NDLMU6HJ.js.map +0 -1
  484. package/dist/chunk-O5ZPSZNY.cjs.map +0 -1
  485. package/dist/chunk-O6B4KB4D.js.map +0 -1
  486. package/dist/chunk-OHUVWPFJ.js.map +0 -1
  487. package/dist/chunk-OT3VZLN4.js.map +0 -1
  488. package/dist/chunk-OVYIBDGE.js.map +0 -1
  489. package/dist/chunk-P2BTQ33C.cjs.map +0 -1
  490. package/dist/chunk-P6ZBENAG.js.map +0 -1
  491. package/dist/chunk-P74HNSNJ.cjs.map +0 -1
  492. package/dist/chunk-PEPYVWGY.cjs.map +0 -1
  493. package/dist/chunk-POX6JZLO.cjs.map +0 -1
  494. package/dist/chunk-PWIA4XQD.js.map +0 -1
  495. package/dist/chunk-QGZF5MOS.cjs.map +0 -1
  496. package/dist/chunk-QP2A5ZMK.cjs.map +0 -1
  497. package/dist/chunk-QYHTMEI5.js.map +0 -1
  498. package/dist/chunk-QYK4ECSZ.js.map +0 -1
  499. package/dist/chunk-R36SGSJX.cjs.map +0 -1
  500. package/dist/chunk-R5QPUQSI.cjs.map +0 -1
  501. package/dist/chunk-R5UNLPQZ.cjs.map +0 -1
  502. package/dist/chunk-RSBQNIJZ.js.map +0 -1
  503. package/dist/chunk-S25WB7KJ.js.map +0 -1
  504. package/dist/chunk-SAFSEXMU.cjs.map +0 -1
  505. package/dist/chunk-SOGUWOSQ.cjs.map +0 -1
  506. package/dist/chunk-SXF3TCYA.js.map +0 -1
  507. package/dist/chunk-T56K5IKQ.js.map +0 -1
  508. package/dist/chunk-TBMVUI7S.cjs.map +0 -1
  509. package/dist/chunk-TCX3QKF3.js.map +0 -1
  510. package/dist/chunk-TQCNQKWF.cjs.map +0 -1
  511. package/dist/chunk-UTENJWSE.cjs.map +0 -1
  512. package/dist/chunk-V5JNYS77.cjs.map +0 -1
  513. package/dist/chunk-VFYG7GAH.js.map +0 -1
  514. package/dist/chunk-VLC2OZV3.cjs.map +0 -1
  515. package/dist/chunk-VTAABT55.js.map +0 -1
  516. package/dist/chunk-VYV45YOK.cjs.map +0 -1
  517. package/dist/chunk-VZ43OLU6.cjs.map +0 -1
  518. package/dist/chunk-XJBMEDQ5.js.map +0 -1
  519. package/dist/chunk-XMRMCWSQ.js.map +0 -1
  520. package/dist/chunk-XSGUFMT4.js.map +0 -1
  521. package/dist/chunk-YCUT6NQ4.js.map +0 -1
  522. package/dist/chunk-YKECQKOV.cjs.map +0 -1
  523. package/dist/chunk-YLKESEHQ.cjs.map +0 -1
  524. package/dist/chunk-YZOVF7JV.cjs.map +0 -1
  525. package/dist/chunk-Z7S4UQKY.js.map +0 -1
  526. package/dist/chunk-ZBGTVTQJ.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
2
 
3
- var _chunkLTOHGCU4cjs = require('./chunk-LTOHGCU4.cjs');
3
+ var _chunkA7Z2QAFZcjs = require('./chunk-A7Z2QAFZ.cjs');
4
4
 
5
5
  // src/components/Drawer/Drawer.component.tsx
6
6
  var _react = require('react');
@@ -110,7 +110,7 @@ var Drawer = ({
110
110
  ] }),
111
111
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { id: bodyId, className: "eidos-drawer-body", children }),
112
112
  actions && actions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-drawer-footer", children: actions.map((action) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
113
- _chunkLTOHGCU4cjs.Button,
113
+ _chunkA7Z2QAFZcjs.Button,
114
114
  {
115
115
  variant: _nullishCoalesce(action.variant, () => ( "outlined")),
116
116
  color: action.color,
@@ -135,4 +135,4 @@ Drawer.displayName = "Drawer";
135
135
 
136
136
 
137
137
  exports.Drawer = Drawer;
138
- //# sourceMappingURL=chunk-N7HX5635.cjs.map
138
+ //# sourceMappingURL=chunk-PJC7NZUV.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PJC7NZUV.cjs","../src/components/Drawer/Drawer.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PJC7NZUV.cjs","sourcesContent":[null,"import React, { useEffect, useCallback, useId, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { Button } from '../Button';\nimport type { DrawerProps } from './Drawer.types';\n\nexport const Drawer: React.FC<DrawerProps> = ({\n isOpen,\n onClose,\n placement = 'right',\n title,\n children,\n actions,\n size = 'md',\n closeOnBackdropClick = true,\n closeOnEscape = true,\n className = '',\n}) => {\n const titleId = useId();\n const bodyId = useId();\n\n // ── Animation state ────────────────────────────────────────────────────────\n // isMounted: whether the portal DOM node exists at all.\n // isVisible: whether the '--open' CSS class is applied (drives the transition).\n //\n // On open: mount first → one rAF → apply --open (browser sees initial\n // closed position before transitioning, so the animation fires).\n // On close: remove --open (CSS transition plays) → after 300 ms unmount.\n // 300 ms matches the CSS `transition: 0.3s` in Drawer.scss.\n const TRANSITION_MS = 300;\n const [isMounted, setIsMounted] = useState(isOpen);\n const [isVisible, setIsVisible] = useState(isOpen);\n\n useEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n let timerId: ReturnType<typeof setTimeout>;\n\n if (isOpen) {\n setIsMounted(true);\n // Double rAF: React 18 automatic batching means setIsMounted(true) may\n // not produce a committed browser paint before the first rAF fires.\n // The second frame guarantees the panel is rendered in its off-screen\n // (closed) position before the CSS transition begins.\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsVisible(true));\n });\n } else {\n setIsVisible(false);\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\n }\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(timerId);\n };\n }, [isOpen]);\n\n // ── Escape key + scroll lock (tied to isOpen, not isMounted) ───────────────\n const handleEscapeKey = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEscape && event.key === 'Escape' && isOpen) {\n onClose();\n }\n },\n [closeOnEscape, isOpen, onClose],\n );\n\n useEffect(() => {\n if (isOpen) {\n document.addEventListener('keydown', handleEscapeKey);\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.removeEventListener('keydown', handleEscapeKey);\n document.body.style.overflow = '';\n };\n }, [isOpen, handleEscapeKey]);\n\n // ── Backdrop click ─────────────────────────────────────────────────────────\n const handleBackdropClick = useCallback(\n (event: React.MouseEvent) => {\n if (closeOnBackdropClick && event.target === event.currentTarget) {\n onClose();\n }\n },\n [closeOnBackdropClick, onClose],\n );\n\n if (!isMounted) return null;\n\n return createPortal(\n <div\n className={[\n 'eidos-drawer',\n `eidos-drawer--${placement}`,\n isVisible && 'eidos-drawer--open',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Backdrop */}\n <div className=\"eidos-drawer-backdrop\" onClick={handleBackdropClick} aria-hidden=\"true\" />\n\n {/* Panel */}\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={bodyId}\n className={[\n 'eidos-drawer-panel',\n `eidos-drawer-panel--${size}`,\n `eidos-drawer-panel--${placement}`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Header */}\n <div className=\"eidos-drawer-header\">\n {title && (\n <h3 id={titleId} className=\"eidos-drawer-title\">\n {title}\n </h3>\n )}\n <button\n type=\"button\"\n className=\"eidos-drawer-close\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n >\n <X aria-hidden=\"true\" />\n </button>\n </div>\n\n {/* Body */}\n <div id={bodyId} className=\"eidos-drawer-body\">\n {children}\n </div>\n\n {/* Footer - only rendered when actions are provided */}\n {actions && actions.length > 0 && (\n <div className=\"eidos-drawer-footer\">\n {actions.map((action) => (\n <Button\n key={action.id}\n variant={action.variant ?? 'outlined'}\n color={action.color}\n disabled={action.disabled}\n loading={action.loading}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </div>\n )}\n </div>\n </div>,\n document.body,\n );\n};\n\nDrawer.displayName = 'Drawer';\n"]}
@@ -15,4 +15,4 @@ Footer.displayName = "Footer";
15
15
 
16
16
 
17
17
  exports.Footer = Footer;
18
- //# sourceMappingURL=chunk-QP2A5ZMK.cjs.map
18
+ //# sourceMappingURL=chunk-PTBBY4ZX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PTBBY4ZX.cjs","../src/components/Footer/Footer.component.tsx"],"names":[],"mappings":"AAAA;ACgBS,+CAAA;AAZF,IAAM,OAAA,EAAgC,CAAC,KAAA,EAAA,GAAU;AACtD,EAAA,MAAM,EAAE,UAAA,EAAY,GAAG,EAAA,EAAI,KAAA;AAC3B,EAAA,MAAM,YAAA,EAAc,YAAA,GAAe,MAAA,GAAS,KAAA,CAAM,UAAA,IAAc,KAAA,CAAA;AAEhE,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,cAAA;AAAA,IACA,YAAA,EAAc,0BAAA,EAA4B,yBAAA;AAAA,IAC1C;AAAA,EACF,CAAA,CACG,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAEX,EAAA,uBAAO,6BAAA,QAAC,EAAA,EAAO,SAAA,EAAW,OAAA,EAAU,QAAA,EAAA,YAAA,EAAc,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,UAAA,CAAU,CAAA;AACtF,CAAA;AAEA,MAAA,CAAO,YAAA,EAAc,QAAA;ADNrB;AACA;AACE;AACF,wBAAC","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-PTBBY4ZX.cjs","sourcesContent":[null,"import React from 'react';\nimport type { FooterProps } from './Footer.types';\nimport './Footer.scss';\n\nexport const Footer: React.FC<FooterProps> = (props) => {\n const { className = '' } = props;\n const isCopyright = 'copyright' in props && props.copyright !== undefined;\n\n const classes = [\n 'eidos-footer',\n isCopyright ? 'eidos-footer--copyright' : 'eidos-footer--component',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return <footer className={classes}>{isCopyright ? props.copyright : props.component}</footer>;\n};\n\nFooter.displayName = 'Footer';\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Kbd
3
- } from "./chunk-73EKJU4G.js";
3
+ } from "./chunk-LYH3EKKQ.js";
4
4
 
5
5
  // src/components/CommandPalette/CommandPalette.component.tsx
6
6
  import { useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
@@ -324,4 +324,4 @@ CommandPalette.displayName = "CommandPalette";
324
324
  export {
325
325
  CommandPalette
326
326
  };
327
- //# sourceMappingURL=chunk-VFYG7GAH.js.map
327
+ //# sourceMappingURL=chunk-PY2376XI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/CommandPalette/CommandPalette.component.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ArrowDown, ArrowUp, Command, CornerDownLeft, Search } from 'lucide-react';\nimport type { CommandItem, CommandPaletteProps } from './CommandPalette.types';\nimport { Kbd } from '../Kbd';\nimport './CommandPalette.scss';\n\n// ── Constants ──────────────────────────────────────────────────────────────────\n\n/** Must match the CSS transition duration in CommandPalette.scss */\nconst TRANSITION_MS = 200;\n\n// ── Pure helpers ───────────────────────────────────────────────────────────────\n\nfunction filterItems(items: CommandItem[], query: string): CommandItem[] {\n const q = query.trim().toLowerCase();\n if (!q) return items;\n return items.filter(({ label, description, keywords }) => {\n return (\n label.toLowerCase().includes(q) ||\n (description?.toLowerCase().includes(q) ?? false) ||\n (keywords?.some((k) => k.toLowerCase().includes(q)) ?? false)\n );\n });\n}\n\ninterface Group {\n label: string | null;\n items: CommandItem[];\n}\n\n/**\n * Groups items while preserving the order in which groups first appear.\n * Items with no `group` property are placed in a leading implicit section\n * (label: null) so that labelled groups always follow them.\n */\nfunction buildGroups(items: CommandItem[]): Group[] {\n const groups: Group[] = [];\n const groupMap = new Map<string, Group>();\n\n for (const item of items) {\n const key = item.group ?? '';\n let group = groupMap.get(key);\n if (!group) {\n group = { label: item.group ?? null, items: [] };\n groups.push(group);\n groupMap.set(key, group);\n }\n group.items.push(item);\n }\n\n return groups;\n}\n\n// ── Component ──────────────────────────────────────────────────────────────────\n\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\n open: openProp,\n defaultOpen = false,\n onClose,\n onOpen,\n shortcutKey = 'k',\n items,\n onSelect,\n placeholder = 'Search commands…',\n emptyText = 'No commands found',\n maxHeight = 360,\n className = '',\n footer,\n trigger,\n triggerLabel = 'Search',\n}) => {\n const dialogId = useId();\n const listId = `${dialogId}-list`;\n\n // ── Controlled / uncontrolled open state ───────────────────────────────────\n // Omitting `open` lets the palette own its state entirely, which combined\n // with the shortcut listener below means it needs zero external\n // useState/useEffect to work. Passing `open` (+ `onClose`, optionally\n // `onOpen`) keeps full external control for consumers who need it (syncing\n // with a URL, another piece of app state, etc).\n const isControlled = openProp !== undefined;\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : internalOpen;\n\n const close = useCallback(() => {\n if (!isControlled) setInternalOpen(false);\n onClose?.();\n }, [isControlled, onClose]);\n\n // Shared \"open\" path - uncontrolled flips the internal state directly;\n // controlled defers to `onOpen` since the palette can't change `open`\n // itself. Used by both the keyboard shortcut below and the inline\n // `trigger`'s click handler.\n const openPalette = useCallback(() => {\n if (isControlled) {\n onOpen?.();\n } else {\n setInternalOpen(true);\n }\n }, [isControlled, onOpen]);\n\n // Global keyboard shortcut - Cmd/Ctrl+<shortcutKey> opens the palette.\n useEffect(() => {\n if (!shortcutKey) return;\n\n const handler = (e: KeyboardEvent) => {\n if (!(e.metaKey || e.ctrlKey) || e.key.toLowerCase() !== shortcutKey.toLowerCase()) return;\n e.preventDefault();\n openPalette();\n };\n\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [shortcutKey, openPalette]);\n\n // ── Animation state machine (mirrors the Drawer pattern) ─────────────────\n // isMounted → portal exists in the DOM (controls render/null)\n // isVisible → CSS --visible modifier is applied (drives transitions)\n //\n // Opening: isMounted=true → double rAF → isVisible=true → CSS transitions fire\n // Closing: isVisible=false → CSS transitions reverse → after TRANSITION_MS → isMounted=false\n const [isMounted, setIsMounted] = useState(open);\n const [isVisible, setIsVisible] = useState(open);\n\n useEffect(() => {\n let raf1 = 0;\n let raf2 = 0;\n let timerId: ReturnType<typeof setTimeout>;\n\n if (open) {\n setIsMounted(true);\n // Double rAF: ensures the browser has painted the initial off-screen\n // state before the CSS transition begins (React 18 automatic batching\n // means a single rAF is not always sufficient).\n raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsVisible(true));\n });\n } else {\n setIsVisible(false);\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\n }\n\n return () => {\n cancelAnimationFrame(raf1);\n cancelAnimationFrame(raf2);\n clearTimeout(timerId);\n };\n }, [open]);\n\n // ── Search state ───────────────────────────────────────────────────────────\n const [query, setQuery] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n // Derived lists - memoised to stabilise scroll-effect deps\n const filtered = useMemo(() => filterItems(items, query), [items, query]);\n const navigable = useMemo(() => filtered.filter((item) => !item.disabled), [filtered]);\n const groups = useMemo(() => buildGroups(filtered), [filtered]);\n\n // Reset search query and selection when the palette is opened\n useEffect(() => {\n if (open) {\n setQuery('');\n setFocusedIndex(0);\n }\n }, [open]);\n\n // Auto-focus the search input after the entry animation begins\n useEffect(() => {\n if (isVisible) {\n inputRef.current?.focus();\n }\n }, [isVisible]);\n\n // Reset focused index to 0 whenever the filtered list changes\n useEffect(() => {\n setFocusedIndex(0);\n }, [query]);\n\n // Scroll the focused item into view during keyboard navigation\n useEffect(() => {\n const focusedItem = navigable[focusedIndex];\n if (!focusedItem) return;\n itemRefs.current.get(focusedItem.id)?.scrollIntoView({ block: 'nearest' });\n }, [focusedIndex, navigable]);\n\n // Body scroll lock (tied to open, not to isMounted, so it releases promptly\n // when the consumer decides to close - even before the exit animation ends)\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // ── Interaction handlers ───────────────────────────────────────────────────\n\n const selectItem = useCallback(\n (item: CommandItem) => {\n if (item.disabled) return;\n item.action?.();\n onSelect?.(item);\n close();\n },\n [close, onSelect],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i + 1) % navigable.length);\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (navigable.length === 0) return;\n setFocusedIndex((i) => (i - 1 + navigable.length) % navigable.length);\n break;\n }\n case 'Enter': {\n e.preventDefault();\n const item = navigable[focusedIndex];\n if (item) selectItem(item);\n break;\n }\n case 'Escape': {\n e.preventDefault();\n close();\n break;\n }\n }\n },\n [focusedIndex, navigable, close, selectItem],\n );\n\n const handleBackdropClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Only fire when the click lands directly on the backdrop element,\n // not on any child (the dialog itself or its contents).\n if (e.target === e.currentTarget) {\n close();\n }\n },\n [close],\n );\n\n // ── Render ─────────────────────────────────────────────────────────────────\n\n // The inline trigger (if any) must render regardless of `isMounted` - it's\n // what opens the palette in the first place, so it can't be gated behind\n // the portal's own mount state.\n const triggerNode =\n trigger === true ? (\n <button type=\"button\" className=\"eidos-cmd-trigger-default\" onClick={openPalette}>\n <span>{triggerLabel}</span>\n {shortcutKey && (\n <Kbd size=\"sm\" className=\"eidos-cmd-trigger-kbd\">\n <Command size={10} />\n {shortcutKey.toUpperCase()}\n </Kbd>\n )}\n </button>\n ) : trigger ? (\n <div className=\"eidos-cmd-trigger\" role=\"button\" tabIndex={0} onClick={openPalette}>\n {trigger}\n </div>\n ) : null;\n\n if (!isMounted) return triggerNode;\n\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n\n return (\n <>\n {triggerNode}\n {createPortal(\n <div\n className={['eidos-cmd-backdrop', isVisible && 'eidos-cmd-backdrop--visible']\n .filter(Boolean)\n .join(' ')}\n onClick={handleBackdropClick}\n aria-hidden={!open}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n id={dialogId}\n className={['eidos-cmd-dialog', isVisible && 'eidos-cmd-dialog--visible', className]\n .filter(Boolean)\n .join(' ')}\n onKeyDown={handleKeyDown}\n >\n {/* ── Search ──────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-search\">\n <Search className=\"eidos-cmd-search-icon\" size={18} aria-hidden=\"true\" />\n\n <input\n ref={inputRef}\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-label={placeholder}\n className=\"eidos-cmd-input\"\n placeholder={placeholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n spellCheck={false}\n autoComplete=\"off\"\n />\n\n {/* Reminds users of the configured shortcut, if any */}\n {shortcutKey && (\n <div className=\"eidos-cmd-search-badge\" aria-hidden=\"true\">\n <Command size={11} />\n <span>{shortcutKey.toUpperCase()}</span>\n </div>\n )}\n </div>\n\n {/* ── Results list ─────────────────────────────────────────────────── */}\n <div\n id={listId}\n role=\"listbox\"\n aria-label=\"Commands\"\n className=\"eidos-cmd-list\"\n style={{ maxHeight: maxHeightValue }}\n >\n {filtered.length === 0 ? (\n <p className=\"eidos-cmd-empty\" role=\"status\">\n {emptyText}\n </p>\n ) : (\n groups.map((group) => (\n <div\n key={group.label ?? '__ungrouped__'}\n role=\"group\"\n aria-label={group.label ?? undefined}\n >\n {group.label && (\n <div className=\"eidos-cmd-group-label\" aria-hidden=\"true\">\n {group.label}\n </div>\n )}\n\n {group.items.map((item) => {\n const isFocused = navigable[focusedIndex]?.id === item.id;\n const Icon = item.icon;\n\n return (\n <div\n key={item.id}\n ref={(el) => {\n if (el) {\n itemRefs.current.set(item.id, el);\n } else {\n itemRefs.current.delete(item.id);\n }\n }}\n role=\"option\"\n aria-selected={isFocused}\n aria-disabled={item.disabled}\n className={[\n 'eidos-cmd-item',\n isFocused && 'eidos-cmd-item--focused',\n item.disabled && 'eidos-cmd-item--disabled',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => selectItem(item)}\n onMouseEnter={() => {\n if (!item.disabled) {\n const idx = navigable.findIndex((n) => n.id === item.id);\n if (idx !== -1) setFocusedIndex(idx);\n }\n }}\n >\n {Icon && (\n <span className=\"eidos-cmd-item-icon\" aria-hidden=\"true\">\n <Icon size={16} />\n </span>\n )}\n\n <div className=\"eidos-cmd-item-body\">\n <div className=\"eidos-cmd-item-label\">{item.label}</div>\n {item.description && (\n <div className=\"eidos-cmd-item-description\">{item.description}</div>\n )}\n </div>\n\n {item.shortcut && item.shortcut.length > 0 && (\n <div\n className=\"eidos-cmd-item-shortcut\"\n aria-label={`Shortcut: ${item.shortcut.join(' ')}`}\n >\n {item.shortcut.map((key, i) => (\n <kbd key={i} className=\"eidos-cmd-kbd\">\n {key}\n </kbd>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n ))\n )}\n </div>\n\n {/* ── Footer ───────────────────────────────────────────────────────── */}\n <div className=\"eidos-cmd-footer\">\n <div className=\"eidos-cmd-hints\" aria-hidden=\"true\">\n <span>\n <ArrowUp size={11} />\n <ArrowDown size={11} /> Navigate\n </span>\n <span>\n <CornerDownLeft size={11} /> Select\n </span>\n <span>Esc Close</span>\n </div>\n\n {footer && <div className=\"eidos-cmd-footer-slot\">{footer}</div>}\n </div>\n </div>\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nCommandPalette.displayName = 'CommandPalette';\n"],"mappings":"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","names":[]}
@@ -100,4 +100,4 @@ var AvatarGroup = ({ children, max, size, className }) => {
100
100
 
101
101
 
102
102
  exports.Avatar = Avatar; exports.AvatarGroup = AvatarGroup;
103
- //# sourceMappingURL=chunk-R5UNLPQZ.cjs.map
103
+ //# sourceMappingURL=chunk-Q3GNKF74.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-Q3GNKF74.cjs","../src/components/Avatar/Avatar.component.tsx"],"names":[],"mappings":"AAAA;ACAA,4EAAgC;AAChC,2CAAqB;AAmEjB,+CAAA;AA3DJ,IAAM,cAAA,EAA+B;AAAA,EACnC,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA;AAMA,SAAS,WAAA,CAAY,IAAA,EAAsB;AACzC,EAAA,MAAM,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,CAAE,KAAA,CAAM,KAAK,CAAA;AACrC,EAAA,GAAA,CAAI,KAAA,CAAM,OAAA,IAAW,CAAA,EAAG,OAAO,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,CAAY,CAAA;AAC9D,EAAA,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,EAAA,EAAI,KAAA,CAAM,KAAA,CAAM,OAAA,EAAS,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAA,CAAG,WAAA,CAAY,CAAA;AAC9E;AAEA,SAAS,YAAA,CAAa,IAAA,EAA2B;AAC/C,EAAA,MAAM,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,EAAA,GAAM,IAAA,EAAM,CAAA,CAAE,UAAA,CAAW,CAAC,CAAA,EAAG,CAAC,CAAA;AACtE,EAAA,OAAO,aAAA,CAAc,IAAA,EAAM,aAAA,CAAc,MAAM,CAAA;AACjD;AAMO,IAAM,OAAA,EAAgC,CAAC;AAAA,EAC5C,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,EAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAI,6BAAA,KAAc,CAAA;AAE9C,EAAA,MAAM,UAAA,EAAY,CAAC,CAAC,IAAA,GAAO,CAAC,QAAA;AAC5B,EAAA,MAAM,aAAA,EAAe,CAAC,UAAA,GAAa,CAAC,CAAC,IAAA;AACrC,EAAA,MAAM,aAAA,EAAe,CAAC,UAAA,GAAa,CAAC,YAAA;AAEpC,EAAA,MAAM,cAAA,mBAA6B,KAAA,UAAA,CAAU,KAAA,EAAO,YAAA,CAAa,IAAI,EAAA,EAAI,MAAA,GAAA;AAEzE,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,cAAA;AAAA,IACA,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAA;AACC,IAAA;AACN,IAAA;AACL,IAAA;AACX,IAAA;AAGM,EAAA;AAGN,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACX,MAAA;AACgB,MAAA;AACI,MAAA;AAElB,MAAA;AAEoB,QAAA;AACV,UAAA;AACM,UAAA;AACV,QAAA;AAEF,MAAA;AAGL,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACC,YAAA;AACY,YAAA;AACF,YAAA;AACD,YAAA;AAAsB,UAAA;AACjC,QAAA;AAEe,QAAA;AAEd,QAAA;AAA4E,MAAA;AAAA,IAAA;AACjF,EAAA;AAEJ;AAM0D;AACrC,EAAA;AACI,EAAA;AACN,EAAA;AAGf,EAAA;AACuB,IAAA;AAMnB,IAAA;AAAC,MAAA;AAAA,MAAA;AACY,QAAA;AACT,UAAA;AACA,UAAA;AACA,UAAA;AACA,UAAA;AAGC,QAAA;AAEH,QAAA;AAAwC,UAAA;AAAE,UAAA;AAAS,QAAA;AAAA,MAAA;AACrD,IAAA;AAEJ,EAAA;AAEJ;ADlC0B;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-Q3GNKF74.cjs","sourcesContent":[null,"import React, { useState } from 'react';\nimport { User } from 'lucide-react';\nimport type { AvatarProps, AvatarGroupProps, AvatarColor } from './Avatar.types';\nimport './Avatar.scss';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst AVATAR_COLORS: AvatarColor[] = [\n 'primary',\n 'secondary',\n 'success',\n 'danger',\n 'warning',\n 'info',\n];\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) return parts[0].charAt(0).toUpperCase();\n return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();\n}\n\nfunction getAutoColor(name: string): AvatarColor {\n const sum = name.split('').reduce((acc, c) => acc + c.charCodeAt(0), 0);\n return AVATAR_COLORS[sum % AVATAR_COLORS.length];\n}\n\n// ============================================================================\n// Avatar\n// ============================================================================\n\nexport const Avatar: React.FC<AvatarProps> = ({\n src,\n alt,\n name,\n size = 'md',\n color,\n shape = 'circle',\n fallback,\n className,\n onClick,\n}) => {\n const [imgError, setImgError] = useState(false);\n\n const showImage = !!src && !imgError;\n const showInitials = !showImage && !!name;\n const showFallback = !showImage && !showInitials;\n\n const resolvedColor: AvatarColor = color ?? (name ? getAutoColor(name) : 'gray');\n\n const classes = [\n 'eidos-avatar',\n `eidos-avatar--${size}`,\n `eidos-avatar--${shape}`,\n showInitials && `eidos-avatar--${resolvedColor}`,\n onClick && 'eidos-avatar--clickable',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={classes}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {showImage && (\n <img\n src={src}\n alt={alt ?? name ?? 'Avatar'}\n className=\"eidos-avatar-image\"\n onError={() => setImgError(true)}\n />\n )}\n {showInitials && <span className=\"eidos-avatar-initials\">{getInitials(name!)}</span>}\n {showFallback &&\n (fallback ?? <User className=\"eidos-avatar-fallback-icon\" aria-hidden=\"true\" />)}\n </div>\n );\n};\n\n// ============================================================================\n// AvatarGroup\n// ============================================================================\n\nexport const AvatarGroup: React.FC<AvatarGroupProps> = ({ children, max, size, className }) => {\n const childArray = React.Children.toArray(children) as React.ReactElement<AvatarProps>[];\n const visibleAvatars = max !== undefined ? childArray.slice(0, max) : childArray;\n const overflow = childArray.length - visibleAvatars.length;\n\n return (\n <div className={['eidos-avatar-group', className].filter(Boolean).join(' ')}>\n {visibleAvatars.map((child, i) => (\n <div key={i} className=\"eidos-avatar-group-item\">\n {React.cloneElement(child, { size: size ?? child.props.size })}\n </div>\n ))}\n {overflow > 0 && (\n <div\n className={[\n 'eidos-avatar',\n `eidos-avatar--${size ?? 'md'}`,\n 'eidos-avatar--circle',\n 'eidos-avatar--overflow',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <span className=\"eidos-avatar-initials\">+{overflow}</span>\n </div>\n )}\n </div>\n );\n};\n"]}
@@ -196,4 +196,4 @@ NumberInput.displayName = "NumberInput";
196
196
 
197
197
 
198
198
  exports.NumberInput = NumberInput;
199
- //# sourceMappingURL=chunk-YLKESEHQ.cjs.map
199
+ //# sourceMappingURL=chunk-QF2RAUPB.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QF2RAUPB.cjs","../src/components/NumberInput/NumberInput.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QF2RAUPB.cjs","sourcesContent":[null,"import React, { forwardRef, useState, useEffect, useId } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport type { NumberInputProps } from './NumberInput.types';\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue = 0,\n onChange,\n min,\n max,\n step = 1,\n precision = 0,\n placeholder,\n disabled = false,\n readOnly = false,\n label,\n helperText,\n error = false,\n errorMessage,\n size = 'md',\n fullWidth = false,\n allowTyping = true,\n className = '',\n id,\n name,\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = id || `number-input-${generatedId}`;\n\n // Controlled / uncontrolled bridge\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState<number>(defaultValue);\n\n // Intermediate text while the user is actively typing\n const [inputText, setInputText] = useState<string>(defaultValue.toFixed(precision));\n const [isFocused, setIsFocused] = useState(false);\n\n const currentValue = isControlled ? value! : localValue;\n\n // When min/max props change (e.g. via Storybook controls), clamp the\n // uncontrolled localValue so the display never shows an out-of-range value.\n useEffect(() => {\n if (isControlled) return;\n setLocalValue((prev) => {\n let result = prev;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n });\n }, [min, max, precision, isControlled]);\n\n // Clamp to [min, max] and apply precision rounding\n const clampValue = (raw: number): number => {\n let result = raw;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n };\n\n const commitValue = (newVal: number) => {\n const clamped = clampValue(newVal);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n };\n\n // ── Stepper buttons ────────────────────────────────────────────────────\n const handleDecrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue - step);\n };\n\n const handleIncrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue + step);\n };\n\n // ── Typing mode handlers ───────────────────────────────────────────────\n const handleTextFocus = () => {\n setInputText(currentValue.toFixed(precision));\n setIsFocused(true);\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n };\n\n const handleTextBlur = () => {\n setIsFocused(false);\n const parsed = parseFloat(inputText);\n if (!isNaN(parsed)) {\n const clamped = clampValue(parsed);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n setInputText(clamped.toFixed(precision));\n } else {\n // Revert to the last known-good value\n setInputText(currentValue.toFixed(precision));\n }\n };\n\n // ArrowUp / ArrowDown keyboard support for both display modes\n const handleDisplayKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n // ── Display value ──────────────────────────────────────────────────────\n // Show intermediate inputText while focused in typing mode;\n // otherwise always derive from the real (controlled/uncontrolled) value.\n const formattedValue = currentValue.toFixed(precision);\n const displayedText = allowTyping && isFocused ? inputText : formattedValue;\n\n // ── Disabled states for buttons ────────────────────────────────────────\n const isDecrementDisabled = disabled || readOnly || (min !== undefined && currentValue <= min);\n const isIncrementDisabled = disabled || readOnly || (max !== undefined && currentValue >= max);\n\n // ── CSS classes ────────────────────────────────────────────────────────\n const rootClasses = [\n 'eidos-number-input',\n `eidos-number-input--${size}`,\n fullWidth && 'eidos-number-input--fullWidth',\n error && 'eidos-number-input--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-number-input-control',\n disabled && 'eidos-number-input-control--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClasses}>\n {label && (\n <label htmlFor={allowTyping ? inputId : undefined} className=\"eidos-number-input-label\">\n {label}\n </label>\n )}\n\n <div\n className={controlClasses}\n role={allowTyping ? undefined : 'spinbutton'}\n aria-valuemin={allowTyping ? undefined : min}\n aria-valuemax={allowTyping ? undefined : max}\n aria-valuenow={allowTyping ? undefined : currentValue}\n aria-label={allowTyping ? undefined : (label ?? 'Number input')}\n aria-disabled={disabled || undefined}\n tabIndex={!allowTyping && !disabled ? 0 : undefined}\n onKeyDown={!allowTyping ? handleDisplayKeyDown : undefined}\n >\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n aria-label=\"Decrease\"\n >\n <Minus />\n </button>\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n {allowTyping ? (\n <input\n id={inputId}\n type=\"text\"\n className=\"eidos-number-input-display\"\n value={displayedText}\n onChange={handleTextChange}\n onFocus={handleTextFocus}\n onBlur={handleTextBlur}\n onKeyDown={handleDisplayKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-label={label ?? 'Number input'}\n />\n ) : (\n <span className=\"eidos-number-input-display\" aria-hidden=\"true\">\n {placeholder && formattedValue === (0).toFixed(precision) && !isFocused\n ? placeholder\n : formattedValue}\n </span>\n )}\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n aria-label=\"Increase\"\n >\n <Plus />\n </button>\n </div>\n\n {/* Hidden native <input type=\"number\"> for form integration */}\n <input\n ref={ref}\n type=\"number\"\n name={name}\n value={currentValue}\n onChange={() => {}}\n className=\"eidos-number-input-hidden\"\n tabIndex={-1}\n aria-hidden=\"true\"\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n />\n\n {helperText && !error && <span className=\"eidos-number-input-helper\">{helperText}</span>}\n\n {error && errorMessage && (\n <span className=\"eidos-number-input-error\" role=\"alert\">\n {errorMessage}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n"]}
@@ -110,4 +110,4 @@ RadioGroup.displayName = "RadioGroup";
110
110
 
111
111
 
112
112
  exports.Radio = Radio; exports.RadioGroup = RadioGroup;
113
- //# sourceMappingURL=chunk-2HTBZGBP.cjs.map
113
+ //# sourceMappingURL=chunk-QQIALSTX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QQIALSTX.cjs","../src/components/Radio/Radio.component.tsx"],"names":[],"mappings":"AAAA;ACAA,8BAAmD;AACnD,2CAA4B;AA6DtB,+CAAA;AAtDC,IAAM,MAAA,EAAQ,+BAAA;AAAA,EACnB,CACE;AAAA,IACE,KAAA;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,KAAA,EAAO,IAAA;AAAA,IACP,UAAA,EAAY,EAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,EAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,EACL,CAAA,EACA,GAAA,EAAA,GACG;AACH,IAAA,MAAM,YAAA,EAAc,0BAAA,CAAM;AAC1B,IAAA,MAAM,QAAA,EAAU,GAAA,GAAM,CAAA,MAAA,EAAS,WAAW,CAAA,CAAA;AAKT,IAAA;AACO,IAAA;AAGX,IAAA;AAEoC,IAAA;AAC5C,MAAA;AACe,QAAA;AAClC,MAAA;AACY,sBAAA;AACd,IAAA;AAEuB,IAAA;AACrB,MAAA;AAC6B,MAAA;AACD,MAAA;AAChB,MAAA;AACZ,MAAA;AAGS,IAAA;AAEY,IAAA;AACrB,MAAA;AACa,MAAA;AACD,MAAA;AAGH,IAAA;AAGF,IAAA;AACL,sBAAA;AAAC,QAAA;AAAA,QAAA;AACC,UAAA;AACK,UAAA;AACD,UAAA;AACM,UAAA;AACV,UAAA;AACU,UAAA;AAC0B,UAAA;AAChC,UAAA;AAAA,QAAA;AACN,MAAA;AACiB,sBAAA;AAGD,MAAA;AAClB,IAAA;AAEJ,EAAA;AACF;AAEoB;AAWkC;AACpD,EAAA;AACO,EAAA;AACP,EAAA;AACA,EAAA;AACA,EAAA;AACY,EAAA;AACJ,EAAA;AACD,EAAA;AACI,EAAA;AACX,EAAA;AACY,EAAA;AACR;AAC+B,EAAA;AAC8B,EAAA;AAG7B,EAAA;AAEgB,EAAA;AAC/B,IAAA;AACQ,MAAA;AAC3B,IAAA;AACsB,oBAAA;AACxB,EAAA;AAE2C,EAAA;AAMvC,EAAA;AAAgB,oBAAA;AAEX,MAAA;AAAA,MAAA;AAEC,QAAA;AACc,QAAA;AACmB,QAAA;AAChB,QAAA;AACO,UAAA;AACxB,QAAA;AAC6B,QAAA;AACf,QAAA;AACd,QAAA;AACA,QAAA;AAAA,MAAA;AAVY,MAAA;AAalB,IAAA;AAGO,IAAA;AACU,sBAAA;AACN,sBAAA;AACT,IAAA;AAEJ,EAAA;AAEJ;AAEyB;AD9CsB;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-QQIALSTX.cjs","sourcesContent":[null,"import React, { forwardRef, useId, useState } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport type { RadioProps, RadioGroupProps } from './Radio.types';\n\n// ============================================================================\n// Radio\n// ============================================================================\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n label,\n color = 'primary',\n size = 'md',\n className = '',\n disabled = false,\n id,\n checked,\n defaultChecked,\n onChange,\n ...inputProps\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id || `radio-${generatedId}`;\n\n // Track checked state for the visual control:\n // - controlled mode: `checked` prop drives the visual\n // - uncontrolled mode (standalone Radio): local state mirrors the native input\n const isControlled = checked !== undefined;\n const [localChecked, setLocalChecked] = useState<boolean>(defaultChecked ?? false);\n\n // `??` only falls back when `checked` is undefined – `false` is kept as-is\n const isChecked = checked ?? localChecked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setLocalChecked(e.target.checked);\n }\n onChange?.(e);\n };\n\n const wrapperClasses = [\n 'eidos-radio-wrapper',\n `eidos-radio-wrapper--${color}`,\n `eidos-radio-wrapper--${size}`,\n disabled && 'eidos-radio-wrapper--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-radio-control',\n isChecked && 'eidos-radio-control--checked',\n disabled && 'eidos-radio-control--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={wrapperClasses}>\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n className=\"eidos-radio-input\"\n disabled={disabled}\n onChange={handleChange}\n {...(isControlled ? { checked } : { defaultChecked })}\n {...inputProps}\n />\n <span className={controlClasses}>\n <span className=\"eidos-radio-dot\" />\n </span>\n {label && <span className=\"eidos-radio-label\">{label}</span>}\n </label>\n );\n },\n);\n\nRadio.displayName = 'Radio';\n\n// ============================================================================\n// RadioGroup\n//\n// Design note: RadioGroup always passes a controlled `checked` prop to every\n// Radio child so that the selection dot stays in sync across the full group.\n// For the \"uncontrolled\" case (defaultValue), RadioGroup owns the state\n// internally – individual Radios never need to manage it themselves.\n// ============================================================================\n\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\n name,\n value: valueProp,\n defaultValue,\n onChange,\n options,\n direction = 'vertical',\n color = 'primary',\n size = 'md',\n disabled = false,\n error,\n className = '',\n}) => {\n const isControlled = valueProp !== undefined;\n const [localValue, setLocalValue] = useState<string | undefined>(defaultValue);\n\n // currentValue is always defined when valueProp is provided (controlled)\n const currentValue = isControlled ? valueProp : localValue;\n\n const handleOptionChange = (optionValue: string) => {\n if (!isControlled) {\n setLocalValue(optionValue);\n }\n onChange?.(optionValue);\n };\n\n const groupClasses = ['eidos-radio-group', `eidos-radio-group--${direction}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div>\n <div className={groupClasses}>\n {options.map((option) => (\n <Radio\n key={option.value}\n name={name}\n value={option.value}\n checked={currentValue === option.value}\n onChange={(e) => {\n if (e.target.checked) handleOptionChange(option.value);\n }}\n disabled={disabled || option.disabled}\n label={option.label}\n color={color}\n size={size}\n />\n ))}\n </div>\n\n {error && (\n <div className=\"eidos-radio-error-message\">\n <CircleAlert />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n};\n\nRadioGroup.displayName = 'RadioGroup';\n"]}
@@ -1,6 +1,6 @@
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 _chunkTBMVUI7Scjs = require('./chunk-TBMVUI7S.cjs');
3
+ var _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
4
4
 
5
5
  // src/components/Tabs/Tabs.component.tsx
6
6
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -61,7 +61,7 @@ var Tab = ({
61
61
  onKeyDown: handleKeyDown,
62
62
  type: "button",
63
63
  children: [
64
- icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tab-icon", children: _chunkTBMVUI7Scjs.renderIcon.call(void 0, icon, "eidos-tab-icon-svg") }),
64
+ icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tab-icon", children: _chunkGOR642KKcjs.renderIcon.call(void 0, icon, "eidos-tab-icon-svg") }),
65
65
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-tab-label", children })
66
66
  ]
67
67
  }
@@ -166,4 +166,4 @@ Tabs.displayName = "Tabs";
166
166
 
167
167
 
168
168
  exports.Tab = Tab; exports.TabPanel = TabPanel; exports.Tabs = Tabs;
169
- //# sourceMappingURL=chunk-5QG2I3FK.cjs.map
169
+ //# sourceMappingURL=chunk-S77GR5YQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-S77GR5YQ.cjs","../src/components/Tabs/Tabs.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-S77GR5YQ.cjs","sourcesContent":[null,"import React, { useState, useRef, useContext, useLayoutEffect } from 'react';\nimport { renderIcon } from '../../utils';\nimport type { TabsProps, TabProps, TabPanelProps, TabsContextValue } from './Tabs.types';\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\nconst useTabsContext = (): TabsContextValue => {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error('Tab/TabPanel must be used inside <Tabs>');\n return ctx;\n};\n\n// ============================================================================\n// TAB - individual tab trigger button\n// Defined before Tabs so Tabs can use `child.type === Tab` for child separation.\n// ============================================================================\n\nexport const Tab: React.FC<TabProps> = ({\n value,\n children,\n disabled = false,\n icon,\n className = '',\n}) => {\n const { activeValue, onSelect, size, fullWidth, listRef } = useTabsContext();\n const isActive = activeValue === value;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n const list = listRef.current;\n if (!list) return;\n\n const allTabs = Array.from(\n list.querySelectorAll('[role=\"tab\"]:not([disabled])'),\n ) as HTMLElement[];\n const currentIndex = allTabs.indexOf(e.currentTarget);\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n if (e.key === 'ArrowRight') targetIndex = (currentIndex + 1) % allTabs.length;\n else if (e.key === 'ArrowLeft')\n targetIndex = (currentIndex - 1 + allTabs.length) % allTabs.length;\n else if (e.key === 'Home') targetIndex = 0;\n else if (e.key === 'End') targetIndex = allTabs.length - 1;\n\n if (targetIndex !== -1) {\n e.preventDefault();\n allTabs[targetIndex].focus();\n }\n };\n\n const tabClasses = [\n 'eidos-tab',\n `eidos-tab--${size}`,\n isActive && 'eidos-tab--active',\n disabled && 'eidos-tab--disabled',\n fullWidth && 'eidos-tab--fullWidth',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <button\n id={`eidos-tab-${value}`}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`eidos-tabpanel-${value}`}\n tabIndex={isActive ? 0 : -1}\n disabled={disabled}\n className={tabClasses}\n onClick={() => !disabled && onSelect(value)}\n onKeyDown={handleKeyDown}\n type=\"button\"\n >\n {icon && <span className=\"eidos-tab-icon\">{renderIcon(icon, 'eidos-tab-icon-svg')}</span>}\n <span className=\"eidos-tab-label\">{children}</span>\n </button>\n );\n};\n\nTab.displayName = 'Tab';\n\n// ============================================================================\n// TAB PANEL - content region shown when its value matches the active tab\n// Defined before Tabs for the same `child.type === TabPanel` check.\n// ============================================================================\n\nexport const TabPanel: React.FC<TabPanelProps> = ({ value, children, className = '' }) => {\n const { activeValue } = useTabsContext();\n const isActive = activeValue === value;\n\n if (!isActive) return null;\n\n return (\n <div\n id={`eidos-tabpanel-${value}`}\n role=\"tabpanel\"\n aria-labelledby={`eidos-tab-${value}`}\n tabIndex={0}\n className={['eidos-tab-panel', className].filter(Boolean).join(' ')}\n >\n {children}\n </div>\n );\n};\n\nTabPanel.displayName = 'TabPanel';\n\n// ============================================================================\n// TABS - root container; provides context, separates tab/panel children\n// ============================================================================\n\nexport const Tabs: React.FC<TabsProps> = ({\n value,\n defaultValue,\n onChange,\n variant = 'line',\n size = 'md',\n color = 'primary',\n fullWidth = false,\n className = '',\n children,\n}) => {\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState(defaultValue ?? '');\n const activeValue = isControlled ? value! : localValue;\n\n const listRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLSpanElement>(null);\n // Tracks whether the indicator has been positioned at least once so we can\n // skip the CSS transition on the very first render and avoid it animating\n // from the top-left corner to the initial tab.\n const hasPositioned = useRef(false);\n\n useLayoutEffect(() => {\n if (variant !== 'line') return;\n const list = listRef.current;\n const indicator = indicatorRef.current;\n if (!list || !indicator) return;\n\n const activeTab = list.querySelector('[aria-selected=\"true\"]') as HTMLElement | null;\n if (!activeTab) return;\n\n // Suppress the CSS transition on the initial paint so the indicator snaps\n // into place rather than sliding from 0.\n if (!hasPositioned.current) {\n indicator.style.transition = 'none';\n }\n\n indicator.style.left = `${activeTab.offsetLeft}px`;\n indicator.style.width = `${activeTab.offsetWidth}px`;\n\n if (!hasPositioned.current) {\n // Force a synchronous reflow so the browser commits the no-transition\n // position before we re-enable the transition for future clicks.\n void indicator.offsetWidth;\n indicator.style.transition = '';\n hasPositioned.current = true;\n }\n }, [activeValue, variant, fullWidth]);\n\n const onSelect = (newValue: string) => {\n if (!isControlled) {\n setLocalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n // Separate Tab and TabPanel children so the list and panels render in\n // distinct DOM regions, regardless of how the consumer orders them.\n const tabChildren: React.ReactElement[] = [];\n const panelChildren: React.ReactElement[] = [];\n\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n if (child.type === Tab) {\n tabChildren.push(child);\n } else if (child.type === TabPanel) {\n panelChildren.push(child);\n }\n });\n\n const rootClasses = ['eidos-tabs', `eidos-tabs--${variant}`, `eidos-tabs--${color}`, className]\n .filter(Boolean)\n .join(' ');\n\n const listClasses = [\n 'eidos-tabs-list',\n `eidos-tabs-list--${size}`,\n fullWidth && 'eidos-tabs-list--fullWidth',\n ]\n .filter(Boolean)\n .join(' ');\n\n const contextValue: TabsContextValue = {\n activeValue,\n onSelect,\n variant,\n size,\n color,\n fullWidth,\n listRef,\n };\n\n return (\n <TabsContext.Provider value={contextValue}>\n <div className={rootClasses}>\n <div ref={listRef} className={listClasses} role=\"tablist\">\n {tabChildren}\n {variant === 'line' && (\n <span ref={indicatorRef} className=\"eidos-tabs-indicator\" aria-hidden=\"true\" />\n )}\n </div>\n <div className=\"eidos-tabs-panels\">{panelChildren}</div>\n </div>\n </TabsContext.Provider>\n );\n};\n\nTabs.displayName = 'Tabs';\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  MenuPanel
3
- } from "./chunk-O6B4KB4D.js";
3
+ } from "./chunk-JMD3P4CY.js";
4
4
 
5
5
  // src/components/ContextMenu/ContextMenu.component.tsx
6
6
  import { useState, useEffect, useRef, useCallback } from "react";
@@ -103,4 +103,4 @@ var ContextMenu = ({
103
103
  export {
104
104
  ContextMenu
105
105
  };
106
- //# sourceMappingURL=chunk-YCUT6NQ4.js.map
106
+ //# sourceMappingURL=chunk-S7TWEVC3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ContextMenu/ContextMenu.component.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { MenuPanel } from '../Menu';\nimport type { MenuItem } from '../Menu';\nimport type { ContextMenuProps } from './ContextMenu.types';\n\ninterface MenuPosition {\n x: number;\n y: number;\n}\n\n/**\n * ContextMenu - wraps any content and attaches a right-click (or long-press)\n * triggered menu positioned at the cursor.\n *\n * The browser's native context menu is suppressed when `disabled` is false.\n * The menu closes on: click outside, item selection, Escape, and scroll.\n *\n * @example\n * ```tsx\n * <ContextMenu\n * items={[\n * { type: 'item', id: 'copy', label: 'Copy', icon: Copy, onClick: () => copy() },\n * { type: 'item', id: 'cut', label: 'Cut', icon: Scissors, onClick: () => cut() },\n * { type: 'separator', id: 'sep1' },\n * { type: 'item', id: 'delete', label: 'Delete', icon: Trash2, onClick: () => remove(), disabled: true },\n * ]}\n * >\n * <div className=\"canvas-area\">...</div>\n * </ContextMenu>\n * ```\n */\nexport const ContextMenu: React.FC<ContextMenuProps> = ({\n items,\n children,\n disabled = false,\n className = '',\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [position, setPosition] = useState<MenuPosition>({ x: 0, y: 0 });\n const [isPositioned, setIsPositioned] = useState(false);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const close = useCallback(() => {\n setIsOpen(false);\n setIsPositioned(false);\n }, []);\n\n // Measure the menu panel after it renders and clamp to viewport edges.\n useEffect(() => {\n if (!isOpen || !menuRef.current) return;\n\n const menu = menuRef.current;\n const { width, height } = menu.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const GAP = 4; // px clearance from viewport edge\n\n const clampedX = Math.min(position.x, vw - width - GAP);\n const clampedY = Math.min(position.y, vh - height - GAP);\n\n menu.style.left = `${Math.max(GAP, clampedX)}px`;\n menu.style.top = `${Math.max(GAP, clampedY)}px`;\n setIsPositioned(true);\n }, [isOpen, position]);\n\n // Close on click outside.\n useEffect(() => {\n if (!isOpen) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n close();\n }\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [isOpen, close]);\n\n // Close on Escape or scroll.\n useEffect(() => {\n if (!isOpen) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') close();\n };\n\n const handleScroll = () => close();\n\n document.addEventListener('keydown', handleKeyDown);\n window.addEventListener('scroll', handleScroll, true); // capture: catches nested scrollers\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('scroll', handleScroll, true);\n };\n }, [isOpen, close]);\n\n const handleContextMenu = (e: React.MouseEvent) => {\n if (disabled) return;\n e.preventDefault();\n e.stopPropagation();\n setIsOpen(true);\n setIsPositioned(false);\n setPosition({ x: e.clientX, y: e.clientY });\n };\n\n const handleItemClick = useCallback(\n (_item: MenuItem) => {\n close();\n },\n [close],\n );\n\n return (\n <>\n <div\n className={['eidos-context-menu-target', className].filter(Boolean).join(' ')}\n onContextMenu={handleContextMenu}\n >\n {children}\n </div>\n\n {isOpen &&\n createPortal(\n <div\n ref={menuRef}\n className={[\n 'eidos-context-menu-panel',\n isPositioned && 'eidos-context-menu-panel--positioned',\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n top: position.y,\n left: position.x,\n }}\n >\n <MenuPanel items={items} onItemClick={handleItemClick} />\n </div>,\n document.body,\n )}\n </>\n );\n};\n"],"mappings":"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","names":[]}
@@ -109,4 +109,4 @@ AccordionItem.displayName = "AccordionItem";
109
109
 
110
110
 
111
111
  exports.Accordion = Accordion; exports.AccordionItem = AccordionItem;
112
- //# sourceMappingURL=chunk-2JWY36LD.cjs.map
112
+ //# sourceMappingURL=chunk-SDEKANNL.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SDEKANNL.cjs","../src/components/Accordion/Accordion.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SDEKANNL.cjs","sourcesContent":[null,"import React, { useState, useRef, useContext, useId, useEffect, useCallback } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { AccordionProps, AccordionItemProps, AccordionContextValue } from './Accordion.types';\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\n/** Normalise a controlled/default value (string | string[] | undefined) to string[]. */\nconst toArray = (v: string | string[] | undefined): string[] =>\n v === undefined ? [] : Array.isArray(v) ? v : [v];\n\n// ============================================================================\n// CONTEXT\n// ============================================================================\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\nconst useAccordion = (): AccordionContextValue => {\n const ctx = useContext(AccordionContext);\n if (!ctx) throw new Error('AccordionItem must be used inside <Accordion>');\n return ctx;\n};\n\n// ============================================================================\n// ACCORDION - root container; owns open state; provides context\n// ============================================================================\n\nexport const Accordion: React.FC<AccordionProps> = ({\n multiple = false,\n value,\n defaultValue,\n onChange,\n variant = 'default',\n size = 'md',\n color = 'primary',\n className = '',\n children,\n}) => {\n const isControlled = value !== undefined;\n\n const [localOpen, setLocalOpen] = useState<string[]>(() => toArray(defaultValue));\n const openValues = isControlled ? toArray(value) : localOpen;\n\n const toggle = useCallback(\n (itemValue: string) => {\n const isOpen = openValues.includes(itemValue);\n let next: string[];\n\n if (multiple) {\n next = isOpen ? openValues.filter((v) => v !== itemValue) : [...openValues, itemValue];\n } else {\n next = isOpen ? [] : [itemValue];\n }\n\n if (!isControlled) setLocalOpen(next);\n onChange?.(multiple ? next : (next[0] ?? ''));\n },\n [openValues, multiple, isControlled, onChange],\n );\n\n const rootClasses = ['eidos-accordion', `eidos-accordion--${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <AccordionContext.Provider value={{ openValues, toggle, variant, size, color }}>\n <div className={rootClasses}>{children}</div>\n </AccordionContext.Provider>\n );\n};\n\nAccordion.displayName = 'Accordion';\n\n// ============================================================================\n// ACCORDION ITEM - individual item; reads context; renders trigger + animated panel\n// ============================================================================\n\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\n value,\n label,\n icon,\n disabled = false,\n className = '',\n children,\n}) => {\n const { openValues, toggle, size, color } = useAccordion();\n const isOpen = openValues.includes(value);\n const contentRef = useRef<HTMLDivElement>(null);\n const triggerId = useId();\n const panelId = useId();\n\n // Drives the max-height CSS transition.\n // On open: set to scrollHeight so the wrapper animates to its natural height.\n // On close: set to 0 so the wrapper animates shut.\n // The CSS transition on .eidos-accordion-content-wrapper handles the animation.\n const [maxHeight, setMaxHeight] = useState<number>(0);\n\n useEffect(() => {\n if (!contentRef.current) return;\n setMaxHeight(isOpen ? contentRef.current.scrollHeight : 0);\n }, [isOpen]);\n\n const itemClasses = [\n 'eidos-accordion-item',\n isOpen && 'eidos-accordion-item--open',\n disabled && 'eidos-accordion-item--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const triggerClasses = [\n 'eidos-accordion-trigger',\n `eidos-accordion-trigger--${size}`,\n isOpen && 'eidos-accordion-trigger--open',\n isOpen && `eidos-accordion-trigger--${color}`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={itemClasses}>\n <button\n id={triggerId}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={disabled}\n onClick={() => !disabled && toggle(value)}\n className={triggerClasses}\n >\n {icon && <span className=\"eidos-accordion-trigger-icon\">{icon}</span>}\n <span className=\"eidos-accordion-trigger-label\">{label}</span>\n <ChevronDown className=\"eidos-accordion-chevron\" aria-hidden=\"true\" />\n </button>\n\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n ref={contentRef}\n className=\"eidos-accordion-content-wrapper\"\n style={{ maxHeight: `${maxHeight}px` }}\n >\n <div className=\"eidos-accordion-content\">{children}</div>\n </div>\n </div>\n );\n};\n\nAccordionItem.displayName = 'AccordionItem';\n"]}
@@ -196,4 +196,4 @@ NumberInput.displayName = "NumberInput";
196
196
  export {
197
197
  NumberInput
198
198
  };
199
- //# sourceMappingURL=chunk-RSBQNIJZ.js.map
199
+ //# sourceMappingURL=chunk-SENVA467.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/NumberInput/NumberInput.component.tsx"],"sourcesContent":["import React, { forwardRef, useState, useEffect, useId } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport type { NumberInputProps } from './NumberInput.types';\n\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n value,\n defaultValue = 0,\n onChange,\n min,\n max,\n step = 1,\n precision = 0,\n placeholder,\n disabled = false,\n readOnly = false,\n label,\n helperText,\n error = false,\n errorMessage,\n size = 'md',\n fullWidth = false,\n allowTyping = true,\n className = '',\n id,\n name,\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = id || `number-input-${generatedId}`;\n\n // Controlled / uncontrolled bridge\n const isControlled = value !== undefined;\n const [localValue, setLocalValue] = useState<number>(defaultValue);\n\n // Intermediate text while the user is actively typing\n const [inputText, setInputText] = useState<string>(defaultValue.toFixed(precision));\n const [isFocused, setIsFocused] = useState(false);\n\n const currentValue = isControlled ? value! : localValue;\n\n // When min/max props change (e.g. via Storybook controls), clamp the\n // uncontrolled localValue so the display never shows an out-of-range value.\n useEffect(() => {\n if (isControlled) return;\n setLocalValue((prev) => {\n let result = prev;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n });\n }, [min, max, precision, isControlled]);\n\n // Clamp to [min, max] and apply precision rounding\n const clampValue = (raw: number): number => {\n let result = raw;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return parseFloat(result.toFixed(precision));\n };\n\n const commitValue = (newVal: number) => {\n const clamped = clampValue(newVal);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n };\n\n // ── Stepper buttons ────────────────────────────────────────────────────\n const handleDecrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue - step);\n };\n\n const handleIncrement = () => {\n if (disabled || readOnly) return;\n commitValue(currentValue + step);\n };\n\n // ── Typing mode handlers ───────────────────────────────────────────────\n const handleTextFocus = () => {\n setInputText(currentValue.toFixed(precision));\n setIsFocused(true);\n };\n\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n };\n\n const handleTextBlur = () => {\n setIsFocused(false);\n const parsed = parseFloat(inputText);\n if (!isNaN(parsed)) {\n const clamped = clampValue(parsed);\n if (!isControlled) setLocalValue(clamped);\n onChange?.(clamped);\n setInputText(clamped.toFixed(precision));\n } else {\n // Revert to the last known-good value\n setInputText(currentValue.toFixed(precision));\n }\n };\n\n // ArrowUp / ArrowDown keyboard support for both display modes\n const handleDisplayKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n handleIncrement();\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n handleDecrement();\n }\n };\n\n // ── Display value ──────────────────────────────────────────────────────\n // Show intermediate inputText while focused in typing mode;\n // otherwise always derive from the real (controlled/uncontrolled) value.\n const formattedValue = currentValue.toFixed(precision);\n const displayedText = allowTyping && isFocused ? inputText : formattedValue;\n\n // ── Disabled states for buttons ────────────────────────────────────────\n const isDecrementDisabled = disabled || readOnly || (min !== undefined && currentValue <= min);\n const isIncrementDisabled = disabled || readOnly || (max !== undefined && currentValue >= max);\n\n // ── CSS classes ────────────────────────────────────────────────────────\n const rootClasses = [\n 'eidos-number-input',\n `eidos-number-input--${size}`,\n fullWidth && 'eidos-number-input--fullWidth',\n error && 'eidos-number-input--error',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-number-input-control',\n disabled && 'eidos-number-input-control--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClasses}>\n {label && (\n <label htmlFor={allowTyping ? inputId : undefined} className=\"eidos-number-input-label\">\n {label}\n </label>\n )}\n\n <div\n className={controlClasses}\n role={allowTyping ? undefined : 'spinbutton'}\n aria-valuemin={allowTyping ? undefined : min}\n aria-valuemax={allowTyping ? undefined : max}\n aria-valuenow={allowTyping ? undefined : currentValue}\n aria-label={allowTyping ? undefined : (label ?? 'Number input')}\n aria-disabled={disabled || undefined}\n tabIndex={!allowTyping && !disabled ? 0 : undefined}\n onKeyDown={!allowTyping ? handleDisplayKeyDown : undefined}\n >\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleDecrement}\n disabled={isDecrementDisabled}\n aria-label=\"Decrease\"\n >\n <Minus />\n </button>\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n {allowTyping ? (\n <input\n id={inputId}\n type=\"text\"\n className=\"eidos-number-input-display\"\n value={displayedText}\n onChange={handleTextChange}\n onFocus={handleTextFocus}\n onBlur={handleTextBlur}\n onKeyDown={handleDisplayKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={currentValue}\n aria-label={label ?? 'Number input'}\n />\n ) : (\n <span className=\"eidos-number-input-display\" aria-hidden=\"true\">\n {placeholder && formattedValue === (0).toFixed(precision) && !isFocused\n ? placeholder\n : formattedValue}\n </span>\n )}\n\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\n\n <button\n type=\"button\"\n className=\"eidos-number-input-btn\"\n onClick={handleIncrement}\n disabled={isIncrementDisabled}\n aria-label=\"Increase\"\n >\n <Plus />\n </button>\n </div>\n\n {/* Hidden native <input type=\"number\"> for form integration */}\n <input\n ref={ref}\n type=\"number\"\n name={name}\n value={currentValue}\n onChange={() => {}}\n className=\"eidos-number-input-hidden\"\n tabIndex={-1}\n aria-hidden=\"true\"\n disabled={disabled}\n readOnly={readOnly}\n min={min}\n max={max}\n step={step}\n />\n\n {helperText && !error && <span className=\"eidos-number-input-helper\">{helperText}</span>}\n\n {error && errorMessage && (\n <span className=\"eidos-number-input-error\" role=\"alert\">\n {errorMessage}\n </span>\n )}\n </div>\n );\n },\n);\n\nNumberInput.displayName = 'NumberInput';\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SJDTFR3I.cjs"],"names":[],"mappings":"AAAA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SJDTFR3I.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SJDTFR3I.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SJDTFR3I.cjs"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SWPZ3HFY.cjs"],"names":[],"mappings":"AAAA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-SWPZ3HFY.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SWPZ3HFY.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-SWPZ3HFY.cjs"}
@@ -23,4 +23,4 @@ var Spinner = ({
23
23
 
24
24
 
25
25
  exports.Spinner = Spinner;
26
- //# sourceMappingURL=chunk-R36SGSJX.cjs.map
26
+ //# sourceMappingURL=chunk-TROYIUDH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-TROYIUDH.cjs","../src/components/Spinner/Spinner.component.tsx"],"names":[],"mappings":"AAAA;ACCA,2CAA6B;AA4BzB,+CAAA;AAjBG,IAAM,QAAA,EAAkC,CAAC;AAAA,EAC9C,KAAA,EAAO,IAAA;AAAA,EACP,MAAA,EAAQ,SAAA;AAAA,EACR,UAAA,EAAY;AACd,CAAA,EAAA,mBACE,6BAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,IAAA,EAAK,QAAA;AAAA,IACL,YAAA,EAAW,SAAA;AAAA,IACX,SAAA,EAAW;AAAA,MACT,uBAAA;AAAA,MACA,CAAA,uBAAA,EAA0B,IAAI,CAAA,CAAA;AACC,MAAA;AAC/B,MAAA;AAGS,IAAA;AAEV,IAAA;AAA0D,EAAA;AAC7D;ADTmC;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-TROYIUDH.cjs","sourcesContent":[null,"import React from 'react';\nimport { LoaderCircle } from 'lucide-react';\nimport type { ComponentSizeProps } from '../../utils';\n\nexport type SpinnerColorProps = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\n\nexport interface SpinnerProps {\n size?: ComponentSizeProps;\n color?: SpinnerColorProps;\n className?: string;\n}\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n size = 'md',\n color = 'primary',\n className = '',\n}) => (\n <div\n role=\"status\"\n aria-label=\"Loading\"\n className={[\n 'eidos-spinner-wrapper',\n `eidos-spinner-wrapper--${size}`,\n `eidos-spinner-wrapper--${color}`,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <LoaderCircle className=\"eidos-spinner\" aria-hidden=\"true\" />\n </div>\n);\n"]}
@@ -1,18 +1,18 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkPEPYVWGYcjs = require('./chunk-PEPYVWGY.cjs');
3
+ var _chunk3EPND5M2cjs = require('./chunk-3EPND5M2.cjs');
4
4
 
5
5
 
6
- var _chunkBFYSYUA6cjs = require('./chunk-BFYSYUA6.cjs');
6
+ var _chunkFMPXSF3Hcjs = require('./chunk-FMPXSF3H.cjs');
7
7
 
8
8
 
9
- var _chunkR5UNLPQZcjs = require('./chunk-R5UNLPQZ.cjs');
9
+ var _chunkQ3GNKF74cjs = require('./chunk-Q3GNKF74.cjs');
10
10
 
11
11
 
12
- var _chunkVLC2OZV3cjs = require('./chunk-VLC2OZV3.cjs');
12
+ var _chunk5O73AALPcjs = require('./chunk-5O73AALP.cjs');
13
13
 
14
14
 
15
- var _chunkLTOHGCU4cjs = require('./chunk-LTOHGCU4.cjs');
15
+ var _chunkA7Z2QAFZcjs = require('./chunk-A7Z2QAFZ.cjs');
16
16
 
17
17
  // src/components/Toolbar/Toolbar.component.tsx
18
18
  var _jsxruntime = require('react/jsx-runtime');
@@ -25,14 +25,14 @@ var Toolbar = ({
25
25
  }) => {
26
26
  const classes = ["eidos-toolbar", className].filter(Boolean).join(" ");
27
27
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: classes, children: [
28
- breadcrumbs && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVLC2OZV3cjs.Breadcrumb, { ...breadcrumbs }),
28
+ breadcrumbs && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5O73AALPcjs.Breadcrumb, { ...breadcrumbs }),
29
29
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-toolbar__content", children: [
30
- cmdPaletteItems && cmdPaletteItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPEPYVWGYcjs.CommandPalette, { trigger: true, triggerLabel: "Search", items: cmdPaletteItems }),
31
- actions && actions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-toolbar__actions", children: actions.map((action, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLTOHGCU4cjs.IconButton, { variant: "text", size: "sm", ...action }, index)) }),
30
+ cmdPaletteItems && cmdPaletteItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3EPND5M2cjs.CommandPalette, { trigger: true, triggerLabel: "Search", items: cmdPaletteItems }),
31
+ actions && actions.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-toolbar__actions", children: actions.map((action, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkA7Z2QAFZcjs.IconButton, { variant: "text", size: "sm", ...action }, index)) }),
32
32
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33
- _chunkBFYSYUA6cjs.Menu,
33
+ _chunkFMPXSF3Hcjs.Menu,
34
34
  {
35
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkR5UNLPQZcjs.Avatar, { name: "John Doe", size: "sm", color: "primary" }),
35
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQ3GNKF74cjs.Avatar, { name: "John Doe", size: "sm", color: "primary" }),
36
36
  items: userMenu,
37
37
  minWidth: 220
38
38
  }
@@ -44,4 +44,4 @@ var Toolbar = ({
44
44
 
45
45
 
46
46
  exports.Toolbar = Toolbar;
47
- //# sourceMappingURL=chunk-3KAR5KCS.cjs.map
47
+ //# sourceMappingURL=chunk-UGMONQGH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-UGMONQGH.cjs","../src/components/Toolbar/Toolbar.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACIsB,+CAAA;AAXf,IAAM,QAAA,EAAkC,CAAC;AAAA,EAC9C,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,QAAA,EAAU,CAAC,eAAA,EAAiB,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAErE,EAAA,uBACE,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAW,OAAA,EACb,QAAA,EAAA;AAAA,IAAA,YAAA,mBAAe,6BAAA,4BAAC,EAAA,EAAY,GAAG,YAAA,CAAa,CAAA;AAAA,oBAC7C,8BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,gBAAA,GAAmB,eAAA,CAAgB,OAAA,EAAS,EAAA,mBAC3C,6BAAA,gCAAC,EAAA,EAAe,OAAA,EAAO,IAAA,EAAC,YAAA,EAAa,QAAA,EAAS,KAAA,EAAO,gBAAA,CAAiB,CAAA;AAAA,MAEvE,QAAA,GAAW,OAAA,CAAQ,OAAA,EAAS,EAAA,mBAC3B,6BAAA,KAAC,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,EAAA,mBACpB,6BAAA,4BAAC,EAAA,EAAuB,OAAA,EAAQ,MAAA,EAAO,IAAA,EAAK,IAAA,EAAM,GAAG,OAAA,CAAA,EAApC,KAA4C,CAC9D,EAAA,CACH,CAAA;AAAA,sBAEF,6BAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACC,OAAA,kBAAS,6BAAA,wBAAC,EAAA,EAAO,IAAA,EAAK,UAAA,EAAW,IAAA,EAAK,IAAA,EAAK,KAAA,EAAM,UAAA,CAAU,CAAA;AAAA,UAC3D,KAAA,EAAO,QAAA;AAAA,UACP,QAAA,EAAU;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CACF,CAAA;AAEJ,CAAA;ADEA;AACA;AACE;AACF,0BAAC","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-UGMONQGH.cjs","sourcesContent":[null,"import React from 'react';\nimport type { ToolbarProps } from './Toolbar.types';\nimport './Toolbar.scss';\nimport { IconButton } from '../Button';\nimport { Breadcrumb } from '../Breadcrumb';\nimport { Avatar } from '../Avatar';\nimport { Menu } from '../Menu';\nimport { CommandPalette } from '../CommandPalette';\n\nexport const Toolbar: React.FC<ToolbarProps> = ({\n breadcrumbs,\n actions,\n userMenu,\n cmdPaletteItems,\n className = '',\n}) => {\n const classes = ['eidos-toolbar', className].filter(Boolean).join(' ');\n\n return (\n <div className={classes}>\n {breadcrumbs && <Breadcrumb {...breadcrumbs} />}\n <div className=\"eidos-toolbar__content\">\n {cmdPaletteItems && cmdPaletteItems.length > 0 && (\n <CommandPalette trigger triggerLabel=\"Search\" items={cmdPaletteItems} />\n )}\n {actions && actions.length > 0 && (\n <div className=\"eidos-toolbar__actions\">\n {actions.map((action, index) => (\n <IconButton key={index} variant=\"text\" size=\"sm\" {...action} />\n ))}\n </div>\n )}\n <Menu\n trigger={<Avatar name=\"John Doe\" size=\"sm\" color=\"primary\" />}\n items={userMenu}\n minWidth={220}\n />\n </div>\n </div>\n );\n};\n"]}
@@ -25,4 +25,4 @@ var ButtonGroup = ({
25
25
  export {
26
26
  ButtonGroup
27
27
  };
28
- //# sourceMappingURL=chunk-CKH36D7H.js.map
28
+ //# sourceMappingURL=chunk-UTUPJOBY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ButtonGroup/ButtonGroup.component.tsx"],"sourcesContent":["import React from 'react';\nimport type { ButtonGroupProps } from './ButtonGroup.types';\n\n/**\n * ButtonGroup - wraps adjacent Button components into a single visual unit.\n *\n * - Collapses inner border-radii so only the two outer ends are rounded.\n * - Collapses the shared border between adjacent outlined buttons into one line.\n * - Optionally propagates `size`, `variant`, and `color` down to children that\n * don't already specify those props (each child can still override individually).\n *\n * @example\n * ```tsx\n * <ButtonGroup variant=\"outlined\" color=\"primary\">\n * <Button>Left</Button>\n * <Button>Center</Button>\n * <Button>Right</Button>\n * </ButtonGroup>\n * ```\n */\nexport const ButtonGroup: React.FC<ButtonGroupProps> = ({\n children,\n size,\n variant,\n color,\n orientation = 'horizontal',\n className = '',\n}) => {\n const clampedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child;\n // Child's own explicitly-set props win; group-level props are fallbacks.\n const childProps = child.props as Record<string, unknown>;\n return React.cloneElement(child as React.ReactElement<Record<string, unknown>>, {\n ...(size !== undefined && childProps.size === undefined && { size }),\n ...(variant !== undefined && childProps.variant === undefined && { variant }),\n ...(color !== undefined && childProps.color === undefined && { color }),\n });\n });\n\n const classes = ['eidos-button-group', `eidos-button-group--${orientation}`, className]\n .filter(Boolean)\n .join(' ');\n\n return <div className={classes}>{clampedChildren}</div>;\n};\n"],"mappings":";AAAA,OAAO,WAAW;AA2CT;AAvBF,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,YAAY;AACd,MAAM;AACJ,QAAM,kBAAkB,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU;AAC9D,QAAI,CAAC,MAAM,eAAe,KAAK,EAAG,QAAO;AAEzC,UAAM,aAAa,MAAM;AACzB,WAAO,MAAM,aAAa,OAAsD;AAAA,MAC9E,GAAI,SAAS,UAAa,WAAW,SAAS,UAAa,EAAE,KAAK;AAAA,MAClE,GAAI,YAAY,UAAa,WAAW,YAAY,UAAa,EAAE,QAAQ;AAAA,MAC3E,GAAI,UAAU,UAAa,WAAW,UAAU,UAAa,EAAE,MAAM;AAAA,IACvE,CAAC;AAAA,EACH,CAAC;AAED,QAAM,UAAU,CAAC,sBAAsB,uBAAuB,WAAW,IAAI,SAAS,EACnF,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SAAO,oBAAC,SAAI,WAAW,SAAU,2BAAgB;AACnD;","names":[]}
@@ -51,4 +51,4 @@ var Progress = ({
51
51
 
52
52
 
53
53
  exports.Progress = Progress;
54
- //# sourceMappingURL=chunk-63N2KZZX.cjs.map
54
+ //# sourceMappingURL=chunk-V2S6XWIQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V2S6XWIQ.cjs","../src/components/Progress/Progress.component.tsx"],"names":[],"mappings":"AAAA;ACyCI,+CAAA;AArCG,IAAM,SAAA,EAAoC,CAAC;AAAA,EAChD,KAAA;AAAA,EACA,IAAA,EAAM,GAAA;AAAA,EACN,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,UAAA,EAAY,KAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA,EAAU,KAAA;AAAA,EACV;AACF,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,WAAA,EACJ,MAAA,IAAU,KAAA,EAAA,EAAY,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAI,MAAA,EAAQ,IAAA,EAAO,GAAG,CAAC,EAAA,EAAI,KAAA,CAAA;AAE1E,EAAA,MAAM,gBAAA,EAAkB,WAAA,IAAe,KAAA,CAAA;AAEvC,EAAA,MAAM,aAAA,mBACJ,KAAA,UAAA,CAAU,WAAA,IAAe,KAAA,EAAA,EAAY,CAAA,EAAA;AAEvB,EAAA;AACd,IAAA;AACwB,IAAA;AACD,IAAA;AACZ,IAAA;AACQ,IAAA;AACnB,IAAA;AAGS,EAAA;AAES,EAAA;AAClB,IAAA;AACmB,IAAA;AAGV,EAAA;AAGT,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACN,MAAA;AACU,MAAA;AACA,MAAA;AACA,MAAA;AACyB,MAAA;AAExC,MAAA;AAAe,wBAAA;AACZ,UAAA;AAAA,UAAA;AACY,YAAA;AAC2B,YAAA;AAAkB,UAAA;AAE5D,QAAA;AAEE,QAAA;AAAqD,MAAA;AAAA,IAAA;AAEzD,EAAA;AAEJ;ADX0D;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V2S6XWIQ.cjs","sourcesContent":[null,"import React from 'react';\nimport type { ProgressProps } from './Progress.types';\nimport './Progress.scss';\n\nexport const Progress: React.FC<ProgressProps> = ({\n value,\n max = 100,\n color = 'primary',\n size = 'md',\n showLabel = false,\n label,\n striped = false,\n className,\n}) => {\n const percentage =\n value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : undefined;\n\n const isIndeterminate = percentage === undefined;\n\n const displayLabel =\n label ?? (percentage !== undefined ? `${Math.round(percentage)}%` : undefined);\n\n const classes = [\n 'eidos-progress',\n `eidos-progress--${color}`,\n `eidos-progress--${size}`,\n striped && 'eidos-progress--striped',\n isIndeterminate && 'eidos-progress--indeterminate',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fillClasses = [\n 'eidos-progress-fill',\n isIndeterminate && 'eidos-progress-fill--indeterminate',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={classes}\n role=\"progressbar\"\n aria-valuenow={percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label ?? (isIndeterminate ? 'Loading…' : `${Math.round(percentage!)}%`)}\n >\n <div className=\"eidos-progress-track\">\n <div\n className={fillClasses}\n style={!isIndeterminate ? { width: `${percentage}%` } : undefined}\n />\n </div>\n {showLabel && !isIndeterminate && (\n <span className=\"eidos-progress-label\">{displayLabel}</span>\n )}\n </div>\n );\n};\n"]}
@@ -23,4 +23,4 @@ var Card = ({
23
23
 
24
24
 
25
25
  exports.Card = Card;
26
- //# sourceMappingURL=chunk-G36S5CWN.cjs.map
26
+ //# sourceMappingURL=chunk-V5RS3JZN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V5RS3JZN.cjs","../src/components/Card/Card.component.tsx"],"names":[],"mappings":"AAAA;AC2BI,+CAAA;AAvBG,IAAM,KAAA,EAA4B,CAAC;AAAA,EACxC,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,IAAA;AAAA,EACV,EAAA,EAAI,GAAA;AAAA,EACJ,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AAEJ,EAAA,MAAM,QAAA,EAA6B,IAAA,GAAO,KAAA;AAE1C,EAAA,MAAM,QAAA,EAAU;AAAA,IACd,YAAA;AAAA,IACA,CAAA,YAAA,EAAe,OAAO,CAAA,CAAA;AACC,IAAA;AACX,IAAA;AACZ,IAAA;AAGM,EAAA;AAGN,EAAA;AAIJ;ADV2B;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-V5RS3JZN.cjs","sourcesContent":[null,"import React from 'react';\nimport type { CardProps } from './Card.types';\nimport './Card.scss';\n\nexport const Card: React.FC<CardProps> = ({\n variant = 'outlined',\n padding = 'md',\n as: Tag,\n clickable = false,\n className = '',\n children,\n ...rest\n}) => {\n // Guard against empty string passed by Storybook's text control\n const Element: React.ElementType = Tag || 'div';\n\n const classes = [\n 'eidos-card',\n `eidos-card--${variant}`,\n `eidos-card--padding-${padding}`,\n clickable ? 'eidos-card--clickable' : '',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Element className={classes} {...rest}>\n {children}\n </Element>\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VW32UTUE.cjs"],"names":[],"mappings":"AAAA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VW32UTUE.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-VW32UTUE.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-VW32UTUE.cjs"}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Chip
3
- } from "./chunk-GRH57M3E.js";
3
+ } from "./chunk-4M3LZLOH.js";
4
4
  import {
5
5
  Dropdown
6
- } from "./chunk-SXF3TCYA.js";
6
+ } from "./chunk-4BKTBV2I.js";
7
7
 
8
8
  // src/components/TagInput/TagInput.component.tsx
9
9
  import { useState, useId, useRef, useCallback, useMemo, useEffect } from "react";
@@ -296,4 +296,4 @@ TagInput.displayName = "TagInput";
296
296
  export {
297
297
  TagInput
298
298
  };
299
- //# sourceMappingURL=chunk-4NUZP66U.js.map
299
+ //# sourceMappingURL=chunk-VZYLJSV5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/TagInput/TagInput.component.tsx"],"sourcesContent":["import React, { useState, useId, useRef, useCallback, useMemo, useEffect } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport { Chip } from '../Chip/Chip.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { TagInputProps } from './TagInput.types';\nimport './TagInput.scss';\n\nexport const TagInput: React.FC<TagInputProps> = ({\n value,\n defaultValue = [],\n onChange,\n placeholder = 'Add tag…',\n size = 'md',\n disabled = false,\n label,\n error,\n hint,\n allowDuplicates = false,\n maxTags,\n separators = ['Enter', ',', 'Tab'],\n validate,\n className = '',\n fullWidth = false,\n suggestions,\n onSearch,\n suggestionsEmptyText = 'No matches',\n}) => {\n const generatedId = useId();\n const inputId = `tag-input-${generatedId}`;\n const inputRef = useRef<HTMLInputElement>(null);\n\n /** Entire component wrapper - used for click-outside detection on the suggestions dropdown */\n const containerRef = useRef<HTMLDivElement>(null);\n\n /** The field wrapper - passed to Dropdown as externalTriggerRef for width/anchoring */\n const fieldRef = useRef<HTMLDivElement>(null);\n\n /** The 0-height span that IS the Dropdown trigger element - programmatically clicked to open */\n const dropdownSpanRef = useRef<HTMLSpanElement>(null);\n\n const hasSuggestions = suggestions !== undefined;\n const isSuggestionsOpenRef = useRef(false);\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n const [suggestionsMenuKey, setSuggestionsMenuKey] = useState(0);\n const [focusedSuggestionIndex, setFocusedSuggestionIndex] = useState(-1);\n\n const isControlled = value !== undefined;\n\n const [internalTags, setInternalTags] = useState<string[]>(defaultValue);\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const tags = isControlled ? (value as string[]) : internalTags;\n\n const updateTags = useCallback(\n (newTags: string[]) => {\n if (!isControlled) {\n setInternalTags(newTags);\n }\n onChange?.(newTags);\n },\n [isControlled, onChange],\n );\n\n const addTag = useCallback(\n (rawTag: string) => {\n const tag = rawTag.trim();\n\n if (!tag) return;\n\n if (!allowDuplicates && tags.includes(tag)) return;\n\n if (maxTags !== undefined && tags.length >= maxTags) return;\n\n if (validate) {\n const result = validate(tag);\n if (result === false) return;\n if (typeof result === 'string') {\n setValidationError(result);\n return;\n }\n // result === true → valid, fall through\n }\n\n setValidationError(null);\n updateTags([...tags, tag]);\n setInputValue('');\n },\n [tags, allowDuplicates, maxTags, validate, updateTags],\n );\n\n const removeTag = useCallback(\n (index: number) => {\n updateTags(tags.filter((_, i) => i !== index));\n },\n [tags, updateTags],\n );\n\n // ─── Suggestions dropdown (autocomplete) ───────────────────────────────────\n\n const filteredSuggestions = useMemo<string[]>(() => {\n if (!suggestions) return [];\n const query = inputValue.trim().toLowerCase();\n return suggestions.filter((suggestion) => {\n if (!allowDuplicates && tags.includes(suggestion)) return false;\n if (!query) return true;\n return suggestion.toLowerCase().includes(query);\n });\n }, [suggestions, inputValue, tags, allowDuplicates]);\n\n useEffect(() => {\n setFocusedSuggestionIndex(-1);\n }, [filteredSuggestions]);\n\n const openSuggestions = useCallback(() => {\n if (isSuggestionsOpenRef.current || disabled || !hasSuggestions) return;\n dropdownSpanRef.current?.click(); // opens the Dropdown (bubbles to trigger)\n isSuggestionsOpenRef.current = true;\n setIsSuggestionsOpen(true);\n }, [disabled, hasSuggestions]);\n\n const closeSuggestions = useCallback(() => {\n isSuggestionsOpenRef.current = false;\n setIsSuggestionsOpen(false);\n setFocusedSuggestionIndex(-1);\n setSuggestionsMenuKey((prev) => prev + 1);\n }, []);\n\n const selectSuggestion = useCallback(\n (suggestion: string) => {\n addTag(suggestion);\n closeSuggestions();\n inputRef.current?.focus();\n },\n [addTag, closeSuggestions],\n );\n\n // Click-outside detection for the suggestions dropdown.\n useEffect(() => {\n if (!hasSuggestions) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n if (!isSuggestionsOpenRef.current) return;\n if (e.defaultPrevented) return; // click inside the portal-rendered listbox\n if (containerRef.current?.contains(e.target as Node)) return;\n closeSuggestions();\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [hasSuggestions, closeSuggestions]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (hasSuggestions && isSuggestionsOpenRef.current && filteredSuggestions.length > 0) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev + 1 < filteredSuggestions.length ? prev + 1 : 0));\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setFocusedSuggestionIndex((prev) => (prev > 0 ? prev - 1 : filteredSuggestions.length - 1));\n return;\n }\n if (e.key === 'Enter' && focusedSuggestionIndex >= 0) {\n e.preventDefault();\n selectSuggestion(filteredSuggestions[focusedSuggestionIndex]);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n closeSuggestions();\n return;\n }\n }\n\n if (separators.includes(e.key)) {\n e.preventDefault();\n addTag(inputValue);\n return;\n }\n\n if (e.key === 'Backspace' && inputValue === '' && tags.length > 0) {\n e.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setInputValue(query);\n if (validationError) {\n setValidationError(null);\n }\n onSearch?.(query);\n if (hasSuggestions && !isSuggestionsOpenRef.current) openSuggestions();\n };\n\n const handleInputFocus = () => {\n setIsFocused(true);\n if (hasSuggestions) openSuggestions();\n };\n\n const handleFieldClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // Don't steal focus from interactive child elements\n if ((e.target as HTMLElement).closest('button, input')) return;\n if (!disabled) {\n inputRef.current?.focus();\n }\n };\n\n const displayError = validationError ?? error;\n const hasError = !!displayError;\n const errorId = `${inputId}-error`;\n const hintId = `${inputId}-hint`;\n\n const containerClasses = [\n 'eidos-tag-input',\n hasError && 'eidos-tag-input--error',\n disabled && 'eidos-tag-input--disabled',\n fullWidth && 'eidos-tag-input--full-width',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const fieldClasses = [\n 'eidos-tag-input-field',\n `eidos-tag-input-field--${size}`,\n isFocused && 'eidos-tag-input-field--focused',\n hasError && 'eidos-tag-input-field--error',\n disabled && 'eidos-tag-input-field--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n const uid = generatedId;\n\n return (\n <div\n className={containerClasses}\n ref={containerRef}\n aria-expanded={hasSuggestions ? isSuggestionsOpen : undefined}\n aria-haspopup={hasSuggestions ? 'listbox' : undefined}\n >\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-describedby={hasError ? errorId : hint ? hintId : undefined}\n aria-autocomplete={hasSuggestions ? 'list' : undefined}\n aria-controls={hasSuggestions ? `${uid}-tag-suggestions` : undefined}\n aria-activedescendant={\n hasSuggestions && focusedSuggestionIndex >= 0\n ? `${uid}-tag-suggestion-${focusedSuggestionIndex}`\n : undefined\n }\n />\n\n {hasSuggestions && (\n <Dropdown\n key={suggestionsMenuKey}\n trigger={\n <span\n ref={dropdownSpanRef}\n className=\"eidos-tag-input-dropdown-anchor\"\n aria-hidden=\"true\"\n />\n }\n content={\n <div\n id={`${uid}-tag-suggestions`}\n className=\"eidos-tag-input-suggestions\"\n role=\"listbox\"\n aria-label={label ?? 'Suggestions'}\n onMouseDown={(e) => e.preventDefault()}\n >\n {filteredSuggestions.length === 0 ? (\n <div className=\"eidos-tag-input-suggestions-empty\">{suggestionsEmptyText}</div>\n ) : (\n filteredSuggestions.map((suggestion, index) => (\n <div\n key={suggestion}\n id={`${uid}-tag-suggestion-${index}`}\n className={[\n 'eidos-tag-input-suggestion',\n index === focusedSuggestionIndex && 'eidos-tag-input-suggestion--focused',\n ]\n .filter(Boolean)\n .join(' ')}\n role=\"option\"\n aria-selected={index === focusedSuggestionIndex}\n onClick={() => selectSuggestion(suggestion)}\n onMouseEnter={() => setFocusedSuggestionIndex(index)}\n >\n {suggestion}\n </div>\n ))\n )}\n </div>\n }\n triggerRef={fieldRef as React.RefObject<HTMLElement | null>}\n autoWidth\n closeOnClickOutside={false}\n closeOnEscape={false}\n />\n )}\n </div>\n\n {hint && !hasError && (\n <p className=\"eidos-tag-input-hint\" id={hintId}>\n {hint}\n </p>\n )}\n\n {hasError && (\n <p className=\"eidos-tag-input-error-message\" id={errorId} role=\"alert\">\n <CircleAlert />\n {displayError}\n </p>\n )}\n </div>\n );\n};\n\nTagInput.displayName = 'TagInput';\n"],"mappings":"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","names":[]}