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,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkBFYSYUA6cjs = require('./chunk-BFYSYUA6.cjs');
3
+ var _chunkFMPXSF3Hcjs = require('./chunk-FMPXSF3H.cjs');
4
4
 
5
5
 
6
- var _chunkKV2FG7ANcjs = require('./chunk-KV2FG7AN.cjs');
6
+ var _chunkFRUOA2QUcjs = require('./chunk-FRUOA2QU.cjs');
7
7
 
8
8
 
9
- var _chunkTBMVUI7Scjs = require('./chunk-TBMVUI7S.cjs');
9
+ var _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
10
10
 
11
11
  // src/components/SplitButton/SplitButton.component.tsx
12
12
  var _react = require('react');
@@ -71,16 +71,16 @@ var SplitButton = ({
71
71
  disabled: disabledOrLoading,
72
72
  onClick,
73
73
  children: [
74
- loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { className: "eidos-split-button__spinner", "aria-hidden": "true" }) : preIcon && _chunkTBMVUI7Scjs.renderIcon.call(void 0, preIcon, "eidos-split-button__pre-icon"),
74
+ loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.LoaderCircle, { className: "eidos-split-button__spinner", "aria-hidden": "true" }) : preIcon && _chunkGOR642KKcjs.renderIcon.call(void 0, preIcon, "eidos-split-button__pre-icon"),
75
75
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-split-button__label", children: label })
76
76
  ]
77
77
  }
78
78
  ),
79
79
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
80
- _chunkKV2FG7ANcjs.Dropdown,
80
+ _chunkFRUOA2QUcjs.Dropdown,
81
81
  {
82
82
  trigger: chevronTrigger,
83
- content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBFYSYUA6cjs.MenuPanel, { items: menuItems, onItemClick: handleItemClick }),
83
+ content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkFMPXSF3Hcjs.MenuPanel, { items: menuItems, onItemClick: handleItemClick }),
84
84
  placement: "bottom",
85
85
  align: "end",
86
86
  disabled: disabledOrLoading
@@ -94,4 +94,4 @@ var SplitButton = ({
94
94
 
95
95
 
96
96
  exports.SplitButton = SplitButton;
97
- //# sourceMappingURL=chunk-VZ43OLU6.cjs.map
97
+ //# sourceMappingURL=chunk-EQEV7GPT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EQEV7GPT.cjs","../src/components/SplitButton/SplitButton.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACVA,8BAAmC;AACnC,2CAA0C;AAmEpC,+CAAA;AAzCC,IAAM,YAAA,EAA0C,CAAC;AAAA,EACtD,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA,EAAU,QAAA;AAAA,EACV,MAAA,EAAQ,SAAA;AAAA,EACR,KAAA,EAAO,IAAA;AAAA,EACP,SAAA,EAAW,KAAA;AAAA,EACX,QAAA,EAAU,KAAA;AAAA,EACV,OAAA;AAAA,EACA,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AAEJ,EAAA,MAAM,UAAA,EAAwB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAA,GAAA,CAAS;AAAA,IAClD,IAAA,EAAM,MAAA;AAAA,IACN,EAAA,EAAI,GAAA,CAAI,EAAA;AAAA,IACR,KAAA,EAAO,GAAA,CAAI,KAAA;AAAA,IACX,IAAA,EAAM,GAAA,CAAI,IAAA;AAAA,IACV,QAAA,EAAU,GAAA,CAAI,QAAA;AAAA,IACd,OAAA,EAAS,GAAA,CAAI;AAAA,EACf,CAAA,CAAE,CAAA;AAEF,EAAA,MAAM,gBAAA,EAAkB,gCAAA,CAAY,EAAA,GAAM;AAExC,IAAA,UAAA,CAAW,CAAA,EAAA,GAAM;AACf,MAAA,QAAA,CAAS,aAAA;AAAA,QACP,IAAI,UAAA,CAAW,WAAA,EAAa,EAAE,OAAA,EAAS,IAAA,EAAM,UAAA,EAAY,IAAA,EAAM,IAAA,EAAM,OAAO,CAAC;AAAA,MAC/E,CAAA;AAAA,IACF,CAAA,EAAG,EAAE,CAAA;AAAA,EACP,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,MAAM,UAAA,EAAY,CAAA,2BAAA,EAA8B,OAAO,CAAA,eAAA,EAAkB,KAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAA;AAC9D,EAAA;AAGpC,EAAA;AAAC,IAAA;AAAA,IAAA;AACM,MAAA;AACkB,MAAA;AACb,MAAA;AACC,MAAA;AAE+C,MAAA;AAAmB,IAAA;AAC/E,EAAA;AAIA,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AAC8B,QAAA;AACF,QAAA;AACD,QAAA;AACN,QAAA;AACrB,QAAA;AAGS,MAAA;AAGX,MAAA;AAAA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACkB,YAAA;AACb,YAAA;AACV,YAAA;AAEC,YAAA;AACuD,cAAA;AAIL,8BAAA;AAAA,YAAA;AAAA,UAAA;AACrD,QAAA;AAGA,wBAAA;AAAC,UAAA;AAAA,UAAA;AACU,YAAA;AAC2D,YAAA;AAC1D,YAAA;AACJ,YAAA;AACI,YAAA;AAAA,UAAA;AACZ,QAAA;AAAA,MAAA;AAAA,IAAA;AACF,EAAA;AAEJ;ADlBuG;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-EQEV7GPT.cjs","sourcesContent":[null,"import React, { useCallback } from 'react';\nimport { ChevronDown, LoaderCircle } from 'lucide-react';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport { MenuPanel } from '../Menu';\nimport type { MenuItem } from '../Menu';\nimport { renderIcon } from '../../utils';\nimport type { SplitButtonProps } from './SplitButton.types';\n\n/**\n * SplitButton - a two-part control with a primary action button on the left\n * and a chevron that opens a dropdown of secondary actions on the right.\n *\n * The primary button fires `onClick` directly; clicking the chevron opens the\n * dropdown. Visually the two parts share a single bordered unit.\n *\n * @example\n * ```tsx\n * <SplitButton\n * label=\"Save\"\n * onClick={() => save()}\n * options={[\n * { id: 'draft', label: 'Save as draft', onClick: saveDraft },\n * { id: 'template', label: 'Save as template', onClick: saveTemplate },\n * ]}\n * />\n * ```\n */\nexport const SplitButton: React.FC<SplitButtonProps> = ({\n label,\n onClick,\n options,\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n preIcon,\n className = '',\n}) => {\n // Convert SplitButtonOption → MenuItemType so MenuPanel can render them.\n const menuItems: MenuItem[] = options.map((opt) => ({\n type: 'item' as const,\n id: opt.id,\n label: opt.label,\n icon: opt.icon,\n disabled: opt.disabled,\n onClick: opt.onClick,\n }));\n\n const handleItemClick = useCallback(() => {\n // Close the dropdown by dispatching a mousedown outside it.\n setTimeout(() => {\n document.dispatchEvent(\n new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window }),\n );\n }, 10);\n }, []);\n\n const baseClass = `eidos-button eidos-button--${variant} eidos-button--${color} eidos-button--${size}`;\n const disabledOrLoading = disabled || loading;\n\n const chevronTrigger = (\n <button\n type=\"button\"\n className={`${baseClass} eidos-split-button__chevron`}\n disabled={disabledOrLoading}\n aria-label=\"More options\"\n >\n <ChevronDown className=\"eidos-split-button__chevron-icon\" aria-hidden=\"true\" />\n </button>\n );\n\n return (\n <div\n className={[\n 'eidos-split-button',\n `eidos-split-button--${variant}`,\n `eidos-split-button--${color}`,\n `eidos-split-button--${size}`,\n disabledOrLoading && 'eidos-split-button--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* Primary action */}\n <button\n type=\"button\"\n className={`${baseClass} eidos-split-button__primary`}\n disabled={disabledOrLoading}\n onClick={onClick}\n >\n {loading ? (\n <LoaderCircle className=\"eidos-split-button__spinner\" aria-hidden=\"true\" />\n ) : (\n preIcon && renderIcon(preIcon, 'eidos-split-button__pre-icon')\n )}\n <span className=\"eidos-split-button__label\">{label}</span>\n </button>\n\n {/* Secondary actions dropdown */}\n <Dropdown\n trigger={chevronTrigger}\n content={<MenuPanel items={menuItems} onItemClick={handleItemClick} />}\n placement=\"bottom\"\n align=\"end\"\n disabled={disabledOrLoading}\n />\n </div>\n );\n};\n"]}
@@ -180,4 +180,4 @@ OTPInput.displayName = "OTPInput";
180
180
 
181
181
 
182
182
  exports.OTPInput = OTPInput;
183
- //# sourceMappingURL=chunk-ICJ3SV5I.cjs.map
183
+ //# sourceMappingURL=chunk-FKXKBJUI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FKXKBJUI.cjs","../src/components/OTPInput/OTPInput.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FKXKBJUI.cjs","sourcesContent":[null,"import React, { useState, useEffect, useRef, useId } from 'react';\nimport { CircleAlert } from 'lucide-react';\nimport type { OTPInputProps } from './OTPInput.types';\nimport './OTPInput.scss';\n\nexport const OTPInput: React.FC<OTPInputProps> = ({\n length = 6,\n value,\n defaultValue = '',\n onChange,\n onComplete,\n type = 'numeric',\n mask = false,\n size = 'md',\n disabled = false,\n error,\n label,\n hint,\n autoFocus = false,\n className = '',\n}) => {\n const generatedId = useId();\n const labelId = `otp-label-${generatedId}`;\n const hintId = `otp-hint-${generatedId}`;\n const errorId = `otp-error-${generatedId}`;\n\n const isControlled = value !== undefined;\n\n // Split a string into an array of `length` single characters, padding with ''\n const splitToSlots = (src: string): string[] => Array.from({ length }, (_v, i) => src[i] ?? '');\n\n const [slots, setSlots] = useState<string[]>(() =>\n splitToSlots(isControlled ? (value ?? '') : defaultValue),\n );\n\n // A ref that always mirrors the latest slots value so that event handlers\n // never operate on stale closure state during rapid sequential keystrokes.\n const slotsRef = useRef<string[]>(slots);\n\n const [focusedIndex, setFocusedIndex] = useState<number | null>(null);\n\n // Array of refs - one per slot input\n const inputRefs = useRef<Array<HTMLInputElement | null>>([]);\n\n // Sync internal slots when the controlled `value` prop changes\n useEffect(() => {\n if (isControlled) {\n const synced = splitToSlots(value ?? '');\n slotsRef.current = synced;\n setSlots(synced);\n }\n // splitToSlots is stable within a render; length is in deps\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, length, isControlled]);\n\n // AutoFocus: focus first empty slot on mount\n useEffect(() => {\n if (!autoFocus) return;\n const firstEmptyIdx = slots.findIndex((s) => s === '');\n const targetIdx = firstEmptyIdx === -1 ? 0 : firstEmptyIdx;\n inputRefs.current[targetIdx]?.focus();\n // Intentionally runs only on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // ── Core state update ──────────────────────────────────────────────────────\n\n /**\n * Apply a new slots array, propagate onChange, and fire onComplete if every\n * slot is filled. In controlled mode we do NOT call setSlots - the parent\n * drives state via the `value` prop.\n */\n const commitChange = (newSlots: string[]) => {\n // Keep the ref in sync BEFORE state update so the next synchronous\n // handler (rapid typing) reads the correct value from the ref.\n slotsRef.current = newSlots;\n if (!isControlled) setSlots(newSlots);\n const fullValue = newSlots.join('');\n onChange?.(fullValue);\n if (newSlots.every((s) => s !== '')) {\n onComplete?.(fullValue);\n }\n };\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>, index: number) => {\n const rawValue = e.target.value;\n // When maxLength=1 is enforced, rawValue is 0–1 chars.\n // When the browser transiently allows 2 chars (typed over existing), we\n // take the last character - that's always the newly entered one.\n const char = rawValue.slice(-1);\n\n if (!char) return; // Deletes are handled by onKeyDown\n\n // Guard: numeric mode rejects non-digit characters\n if (type === 'numeric' && !/^\\d$/.test(char)) return;\n\n // Read from slotsRef (not the stale `slots` closure) so rapid keystrokes\n // don't overwrite each other when React hasn't re-rendered yet.\n const newSlots = [...slotsRef.current];\n newSlots[index] = char;\n commitChange(newSlots);\n\n // Advance focus to the next slot\n if (index < length - 1) {\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>, index: number) => {\n // ── Numeric mode: block non-digit, non-control key presses ──────────────\n if (type === 'numeric') {\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'Tab',\n 'Escape',\n 'ArrowLeft',\n 'ArrowRight',\n 'Home',\n 'End',\n ];\n const isDigit = /^\\d$/.test(e.key);\n const isControlKey = e.ctrlKey || e.metaKey;\n if (!isDigit && !controlKeys.includes(e.key) && !isControlKey) {\n e.preventDefault();\n return;\n }\n }\n\n // ── Backspace ────────────────────────────────────────────────────────────\n if (e.key === 'Backspace') {\n e.preventDefault(); // Prevent the browser from also firing onChange\n if (slotsRef.current[index] !== '') {\n // Clear the current slot\n const newSlots = [...slotsRef.current];\n newSlots[index] = '';\n commitChange(newSlots);\n } else if (index > 0) {\n // Move focus to the previous slot and clear it\n const newSlots = [...slotsRef.current];\n newSlots[index - 1] = '';\n commitChange(newSlots);\n inputRefs.current[index - 1]?.focus();\n }\n return;\n }\n\n // ── Arrow navigation ─────────────────────────────────────────────────────\n if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault();\n inputRefs.current[index - 1]?.focus();\n return;\n }\n if (e.key === 'ArrowRight' && index < length - 1) {\n e.preventDefault();\n inputRefs.current[index + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>, index: number) => {\n e.preventDefault();\n const pasted = e.clipboardData.getData('text/plain');\n // Strip non-digits in numeric mode\n const filtered = type === 'numeric' ? pasted.replace(/\\D/g, '') : pasted;\n if (!filtered) return;\n\n const newSlots = [...slotsRef.current];\n let charsPlaced = 0;\n for (let i = index; i < length && charsPlaced < filtered.length; i++) {\n newSlots[i] = filtered[charsPlaced];\n charsPlaced++;\n }\n commitChange(newSlots);\n\n // Focus the slot after the last pasted character\n const nextFocusIdx = Math.min(index + charsPlaced, length - 1);\n inputRefs.current[nextFocusIdx]?.focus();\n };\n\n // ── CSS class builders ─────────────────────────────────────────────────────\n\n const containerClasses = [\n 'eidos-otp',\n `eidos-otp--${size}`,\n disabled && 'eidos-otp--disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const slotClasses = (index: number) =>\n [\n 'eidos-otp-slot',\n // Show \"filled\" accent only when there's no error overriding the colour\n slots[index] !== '' && !error && 'eidos-otp-slot--filled',\n focusedIndex === index && 'eidos-otp-slot--focused',\n error && 'eidos-otp-slot--error',\n disabled && 'eidos-otp-slot--disabled',\n ]\n .filter(Boolean)\n .join(' ');\n\n // Accessible description: prefer error, fall back to hint\n const describedBy = error ? errorId : hint ? hintId : undefined;\n\n return (\n <div className={containerClasses}>\n {label && (\n <label id={labelId} className=\"eidos-otp-label\">\n {label}\n </label>\n )}\n\n <div\n className=\"eidos-otp-slots\"\n role=\"group\"\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={describedBy}\n >\n {Array.from({ length }, (_v, index) => (\n <div key={index} className={slotClasses(index)}>\n <input\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode={type === 'numeric' ? 'numeric' : 'text'}\n maxLength={2}\n value={slots[index]}\n disabled={disabled}\n aria-label={`Digit ${index + 1} of ${length}`}\n autoComplete={index === 0 ? 'one-time-code' : 'off'}\n onChange={(e) => handleChange(e, index)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n onPaste={(e) => handlePaste(e, index)}\n onFocus={() => setFocusedIndex(index)}\n onBlur={() => setFocusedIndex(null)}\n />\n </div>\n ))}\n </div>\n\n {hint && !error && (\n <span id={hintId} className=\"eidos-otp-hint\">\n {hint}\n </span>\n )}\n\n {error && (\n <span id={errorId} className=\"eidos-otp-error-message\" role=\"alert\">\n <CircleAlert aria-hidden=\"true\" />\n {error}\n </span>\n )}\n </div>\n );\n};\n\nOTPInput.displayName = 'OTPInput';\n"]}
@@ -1,15 +1,15 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkKV2FG7ANcjs = require('./chunk-KV2FG7AN.cjs');
3
+ var _chunkFRUOA2QUcjs = require('./chunk-FRUOA2QU.cjs');
4
4
 
5
5
 
6
- var _chunk5TGBNYZKcjs = require('./chunk-5TGBNYZK.cjs');
6
+ var _chunkKVIL4EP4cjs = require('./chunk-KVIL4EP4.cjs');
7
7
 
8
8
 
9
- var _chunkTBMVUI7Scjs = require('./chunk-TBMVUI7S.cjs');
9
+ var _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
10
10
 
11
11
 
12
- var _chunkR5QPUQSIcjs = require('./chunk-R5QPUQSI.cjs');
12
+ var _chunkZ5U4NJTWcjs = require('./chunk-Z5U4NJTW.cjs');
13
13
 
14
14
  // src/components/Menu/Menu.component.tsx
15
15
  var _react = require('react');
@@ -41,9 +41,9 @@ var MenuPanel = ({ items, className = "", onItemClick }) => {
41
41
  ].filter(Boolean).join(" "),
42
42
  onClick: () => handleItemClick(item),
43
43
  children: [
44
- item.icon && _chunkTBMVUI7Scjs.renderIcon.call(void 0, item.icon, "eidos-menu-icon"),
44
+ item.icon && _chunkGOR642KKcjs.renderIcon.call(void 0, item.icon, "eidos-menu-icon"),
45
45
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-menu-label`, children: item.label }),
46
- item.shortcut && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5TGBNYZKcjs.Kbd, { size: "sm", className: "eidos-menu-shortcut", children: item.shortcut })
46
+ item.shortcut && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkKVIL4EP4cjs.Kbd, { size: "sm", className: "eidos-menu-shortcut", children: item.shortcut })
47
47
  ]
48
48
  },
49
49
  item.id
@@ -54,12 +54,12 @@ var MenuPanel = ({ items, className = "", onItemClick }) => {
54
54
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { className: `eidos-menu-separator` }, item.id);
55
55
  case "nested": {
56
56
  const triggerElement = /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: `eidos-menu-nested-trigger`, children: [
57
- item.icon && _chunkTBMVUI7Scjs.renderIcon.call(void 0, item.icon, "eidos-menu-icon"),
57
+ item.icon && _chunkGOR642KKcjs.renderIcon.call(void 0, item.icon, "eidos-menu-icon"),
58
58
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-menu-label`, children: item.label }),
59
59
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronRight, { className: `eidos-menu-nested-arrow` })
60
60
  ] });
61
61
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { className: `eidos-menu-nested-item`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
62
- _chunkKV2FG7ANcjs.Dropdown,
62
+ _chunkFRUOA2QUcjs.Dropdown,
63
63
  {
64
64
  trigger: triggerElement,
65
65
  content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MenuPanel, { items: item.items, onItemClick }),
@@ -103,7 +103,7 @@ var Menu = ({
103
103
  [closeOnItemClick]
104
104
  );
105
105
  const dropdown = /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
106
- _chunkKV2FG7ANcjs.Dropdown,
106
+ _chunkFRUOA2QUcjs.Dropdown,
107
107
  {
108
108
  trigger,
109
109
  content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MenuPanel, { items, onItemClick: handleItemClick }),
@@ -115,11 +115,11 @@ var Menu = ({
115
115
  triggerRef
116
116
  }
117
117
  );
118
- return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkR5QPUQSIcjs.Tooltip, { message: tooltip, children: dropdown }) : dropdown;
118
+ return tooltip ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ5U4NJTWcjs.Tooltip, { message: tooltip, children: dropdown }) : dropdown;
119
119
  };
120
120
 
121
121
 
122
122
 
123
123
 
124
124
  exports.MenuPanel = MenuPanel; exports.Menu = Menu;
125
- //# sourceMappingURL=chunk-BFYSYUA6.cjs.map
125
+ //# sourceMappingURL=chunk-FMPXSF3H.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FMPXSF3H.cjs","../src/components/Menu/Menu.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACbA,8BAAmC;AACnC,2CAA6B;AAoCnB,+CAAA;AAxBH,IAAM,UAAA,EAAiC,CAAC,EAAE,KAAA,EAAO,UAAA,EAAY,EAAA,EAAI,YAAY,CAAA,EAAA,GAAM;AAExF,EAAA,MAAM,gBAAA,EAAkB,gCAAA;AAAA,IACtB,CAAC,IAAA,EAAA,GAAmB;AAClB,MAAA,GAAA,CAAI,IAAA,CAAK,QAAA,EAAU,MAAA;AAGnB,MAAA,GAAA,CAAI,IAAA,CAAK,OAAA,EAAS;AAChB,QAAA,IAAA,CAAK,OAAA,CAAQ,CAAA;AAAA,MACf;AAGA,MAAA,GAAA,CAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,IAAI,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,EACd,CAAA;AAGA,EAAA,MAAM,eAAA,EAAiB,CAAC,IAAA,EAAA,GAAwC;AAC9D,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,EAAM;AAAA,MACjB,KAAK,MAAA;AACH,QAAA,uBACE,8BAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW;AAAA,cACT,iBAAA;AAAA,cACA,IAAA,CAAK,SAAA,EAAW,4BAAA,EAA8B,EAAA;AAAA,cAC9C,IAAA,CAAK,MAAA,EAAQ,CAAA,iBAAA,EAAoB,IAAA,CAAK,KAAK,CAAA,EAAA;AAGlC,YAAA;AACwB,YAAA;AAElC,YAAA;AAAmC,cAAA;AACnB,8BAAA;AAEV,cAAA;AAEL,YAAA;AAAA,UAAA;AAfQ,UAAA;AAiBZ,QAAA;AAGC,MAAA;AAE4B,QAAA;AAK5B,MAAA;AACiC,QAAA;AAEvB,MAAA;AAEV,QAAA;AACqC,UAAA;AACnB,0BAAA;AACQ,0BAAA;AAC3B,QAAA;AAI6B,QAAA;AAC1B,UAAA;AAAA,UAAA;AACU,YAAA;AACW,YAAA;AACV,YAAA;AACA,YAAA;AACD,YAAA;AAAA,UAAA;AAEb,QAAA;AAEJ,MAAA;AAEA,MAAA;AACS,QAAA;AACX,IAAA;AACF,EAAA;AAEsB,EAAA;AACxB;AAEiD;AAC/C,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACY,EAAA;AACZ,EAAA;AACmB,EAAA;AACnB,EAAA;AACI;AACoB,EAAA;AACD,IAAA;AAIG,MAAA;AAEH,QAAA;AAE2B,UAAA;AAC/B,YAAA;AACG,YAAA;AACN,YAAA;AACP,UAAA;AAC2B,UAAA;AACzB,QAAA;AACP,MAAA;AACF,IAAA;AACiB,IAAA;AACnB,EAAA;AAGE,EAAA;AAAC,IAAA;AAAA,IAAA;AACC,MAAA;AACkC,MAAA;AAClC,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AAAA,IAAA;AACF,EAAA;AAGwB,EAAA;AAC5B;AD1B0D;AACA;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FMPXSF3H.cjs","sourcesContent":[null,"import React, { useCallback } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport type { MenuProps, MenuItemType, MenuItem, MenuWrapperProps } from './Menu.types';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\nimport { Kbd } from '../Kbd/Kbd.component';\nimport { renderIcon } from '../../utils';\n\n/**\n * MenuPanel - the bare menu list, without any trigger or dropdown wrapper.\n * Exported for use in SplitButton, ContextMenu, and other consumers that need\n * to render the menu content inside their own Dropdown / portal.\n */\nexport const MenuPanel: React.FC<MenuProps> = ({ items, className = '', onItemClick }) => {\n // Handle menu item click\n const handleItemClick = useCallback(\n (item: MenuItem) => {\n if (item.disabled) return;\n\n // Execute the item's onClick handler first\n if (item.onClick) {\n item.onClick();\n }\n\n // Then call the onItemClick callback (which will close the dropdown)\n if (onItemClick) {\n onItemClick(item);\n }\n },\n [onItemClick],\n );\n\n // Render individual menu item\n const renderMenuItem = (item: MenuItemType): React.ReactNode => {\n switch (item.type) {\n case 'item':\n return (\n <li\n key={item.id}\n className={[\n 'eidos-menu-item',\n item.disabled ? 'eidos-menu-item--disabled' : '',\n item.color ? `eidos-menu-item--${item.color}` : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => handleItemClick(item)}\n >\n {item.icon && renderIcon(item.icon, 'eidos-menu-icon')}\n <span className={`eidos-menu-label`}>{item.label}</span>\n {item.shortcut && (\n <Kbd size=\"sm\" className=\"eidos-menu-shortcut\">\n {item.shortcut}\n </Kbd>\n )}\n </li>\n );\n\n case 'component':\n return (\n <li key={item.id} className={`eidos-menu-component-item`}>\n {item.component}\n </li>\n );\n\n case 'separator':\n return <li key={item.id} className={`eidos-menu-separator`} />;\n\n case 'nested': {\n const triggerElement = (\n <div className={`eidos-menu-nested-trigger`}>\n {item.icon && renderIcon(item.icon, 'eidos-menu-icon')}\n <span className={`eidos-menu-label`}>{item.label}</span>\n <ChevronRight className={`eidos-menu-nested-arrow`} />\n </div>\n );\n\n return (\n <li key={item.id} className={`eidos-menu-nested-item`}>\n <Dropdown\n trigger={triggerElement}\n content={<MenuPanel items={item.items} onItemClick={onItemClick} />}\n placement=\"right\"\n isNested={true}\n fullWidth\n />\n </li>\n );\n }\n\n default:\n return null;\n }\n };\n\n return <ul className={`eidos-menu ${className}`}>{items.map(renderMenuItem)}</ul>;\n};\n\nexport const Menu: React.FC<MenuWrapperProps> = ({\n trigger,\n items,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n autoWidth = true,\n triggerRef,\n closeOnItemClick = true,\n tooltip,\n}) => {\n const handleItemClick = useCallback(\n (_item: MenuItem) => {\n // Note: item.onClick is already called in MenuPanel's handleItemClick\n // Here we only handle closing the dropdown if needed\n\n if (closeOnItemClick) {\n // Use a small delay to ensure the onClick handler completes\n setTimeout(() => {\n // Create a synthetic click event outside the dropdown to close it\n const event = new MouseEvent('mousedown', {\n bubbles: true,\n cancelable: true,\n view: window,\n });\n document.dispatchEvent(event);\n }, 10);\n }\n },\n [closeOnItemClick],\n );\n\n const dropdown = (\n <Dropdown\n trigger={trigger}\n content={<MenuPanel items={items} onItemClick={handleItemClick} />}\n minWidth={minWidth}\n maxWidth={maxWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n autoWidth={autoWidth}\n triggerRef={triggerRef}\n />\n );\n\n return tooltip ? <Tooltip message={tooltip}>{dropdown}</Tooltip> : dropdown;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-FQZ6F7FQ.cjs"],"names":[],"mappings":"AAAA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-FQZ6F7FQ.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FQZ6F7FQ.cjs"],"names":[],"mappings":"AAAA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FQZ6F7FQ.cjs"}
@@ -398,4 +398,4 @@ Dropdown.displayName = "Dropdown";
398
398
 
399
399
 
400
400
  exports.DropdownProvider = DropdownProvider; exports.useDropdownContext = useDropdownContext; exports.Dropdown = Dropdown;
401
- //# sourceMappingURL=chunk-KV2FG7AN.cjs.map
401
+ //# sourceMappingURL=chunk-FRUOA2QU.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FRUOA2QU.cjs","../src/components/Dropdown/Dropdown.context.types.ts","../src/components/Dropdown/Dropdown.context.tsx","../src/components/Dropdown/Dropdown.hooks.ts","../src/components/Dropdown/Dropdown.component.tsx"],"names":["jsx"],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-FRUOA2QU.cjs","sourcesContent":[null,"import { createContext } from 'react';\n\nexport interface DropdownContextValue {\n level: number;\n}\n\nexport const DropdownContext = createContext<DropdownContextValue>({ level: 0 });\n","import React from 'react';\nimport { DropdownContext } from './Dropdown.context.types';\n\nexport const DropdownProvider: React.FC<{ children: React.ReactNode; level?: number }> = ({\n children,\n level = 0,\n}) => {\n return <DropdownContext.Provider value={{ level }}>{children}</DropdownContext.Provider>;\n};\n","import { useContext } from 'react';\nimport { DropdownContext } from './Dropdown.context.types';\n\nexport const useDropdownContext = () => {\n return useContext(DropdownContext);\n};\n","import React, { useState, useRef, useCallback, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { DropdownProps, DropdownState } from './Dropdown.types';\nimport { DropdownProvider } from './Dropdown.context';\nimport { useDropdownContext } from './Dropdown.hooks';\n\nconst DropdownInternal: React.FC<DropdownProps> = ({\n trigger,\n content,\n placement: preferredPlacement = 'bottom',\n align = 'start',\n delay = 0,\n disabled = false,\n defaultOpen = false,\n triggerClassName = '',\n contentClassName = '',\n closeOnClickOutside = true,\n closeOnEscape = true,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight,\n autoWidth = true,\n fullWidth = false,\n triggerRef: externalTriggerRef,\n isNested = false,\n dropdownLevel,\n dropdownGroup,\n}) => {\n const context = useDropdownContext();\n const actualLevel = dropdownLevel !== undefined ? dropdownLevel : context.level;\n const [dropdownState, setDropdownState] = useState<DropdownState>({\n isVisible: defaultOpen,\n isPositioned: false,\n position: { top: 0, left: 0, placement: preferredPlacement },\n });\n const triggerRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const animationFrameRef = useRef<number | undefined>(undefined);\n const isScrollingRef = useRef(false);\n\n // The element to actually measure/anchor against. When a consumer passes\n // `triggerRef`, that's an explicit statement of \"this is what I want the\n // dropdown positioned relative to\" - it must win over the internal wrapper\n // div, not just inform sizing. Consumers occasionally need `trigger` to be\n // a small anchor node (e.g. a 0-height span) sitting inside a larger,\n // variable-content field (chips, wrapped text); anchoring position to the\n // wrapper instead of that field silently drifts as soon as the field's\n // internal layout changes, since the wrapper only ever contains `trigger`\n // itself, never the field around it.\n const getTriggerElement = useCallback(\n (): HTMLElement | null => externalTriggerRef?.current ?? triggerRef.current,\n [externalTriggerRef],\n );\n\n const calculateDynamicSizing = useCallback(\n (triggerRect: DOMRect) => {\n // Shrink the panel to its content by default. This prevents the\n // position:fixed element from expanding to viewport width when children\n // use `width:100%` or `flex:1`. `minWidth` (set below) still wins when\n // the trigger is wider than the content, as CSS min-width overrides width.\n const styles: Record<string, string | number> = { width: 'max-content' };\n\n if (autoWidth && (externalTriggerRef?.current || triggerRef.current)) {\n const triggerWidth = triggerRect.width;\n styles.minWidth = triggerWidth;\n }\n\n if (minWidth !== undefined) {\n styles.minWidth = typeof minWidth === 'number' ? `${minWidth}px` : minWidth;\n }\n if (maxWidth !== undefined) {\n if (maxWidth === 'auto') {\n styles.maxWidth = 'none';\n } else {\n styles.maxWidth = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth;\n }\n }\n if (minHeight !== undefined) {\n styles.minHeight = typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n }\n if (maxHeight !== undefined) {\n if (maxHeight === 'auto') {\n styles.maxHeight = 'none';\n } else {\n styles.maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n }\n\n const hasHeightConstraint = minHeight !== undefined || maxHeight !== undefined;\n if (hasHeightConstraint) {\n styles.overflowY = 'auto';\n } else {\n styles.overflowY = 'visible';\n }\n\n return styles;\n },\n [autoWidth, externalTriggerRef, minWidth, maxWidth, minHeight, maxHeight],\n );\n\n const calculateOptimalPosition = useCallback(\n (triggerRect: DOMRect, contentRect: DOMRect) => {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 8;\n\n let placement: 'top' | 'bottom' | 'left' | 'right' = preferredPlacement;\n let top = 0;\n let left = 0;\n\n // Helpers for cross-axis alignment\n const alignedLeft = (() => {\n switch (align) {\n case 'end':\n return triggerRect.right - contentRect.width;\n case 'center':\n return triggerRect.left + (triggerRect.width - contentRect.width) / 2;\n default:\n return triggerRect.left; // \"start\"\n }\n })();\n const alignedTop = (() => {\n switch (align) {\n case 'end':\n return triggerRect.bottom - contentRect.height;\n case 'center':\n return triggerRect.top + (triggerRect.height - contentRect.height) / 2;\n default:\n return triggerRect.top; // \"start\"\n }\n })();\n\n switch (preferredPlacement) {\n case 'top':\n top = triggerRect.top - contentRect.height - gap;\n left = alignedLeft;\n break;\n case 'bottom':\n top = triggerRect.bottom + gap;\n left = alignedLeft;\n break;\n case 'left':\n top = alignedTop;\n left = triggerRect.left - contentRect.width - gap;\n break;\n case 'right':\n top = alignedTop;\n left = triggerRect.right + gap;\n break;\n }\n\n if (placement === 'top' && top < gap) {\n placement = 'bottom';\n top = triggerRect.bottom + gap;\n } else if (placement === 'bottom' && top + contentRect.height > viewportHeight - gap) {\n placement = 'top';\n top = triggerRect.top - contentRect.height - gap;\n } else if (placement === 'left' && left < gap) {\n placement = 'right';\n left = triggerRect.right + gap;\n } else if (placement === 'right' && left + contentRect.width > viewportWidth - gap) {\n placement = 'left';\n left = triggerRect.left - contentRect.width - gap;\n }\n\n // Always clamp to both viewport edges - not just the near one - regardless\n // of whether an explicit min/max size was passed. `autoWidth` consumers\n // (Combobox, Select, TagInput suggestions, Menu, ...) never set\n // minWidth/maxWidth, so gating this on those props left the far edge\n // (right/bottom) completely unclamped and let content overflow the\n // viewport whenever it rendered wider/taller than its trigger.\n top = Math.max(gap, Math.min(top, viewportHeight - contentRect.height - gap));\n\n left = Math.max(gap, Math.min(left, viewportWidth - contentRect.width - gap));\n\n return { top, left, placement };\n },\n [preferredPlacement, align],\n );\n\n const handleScroll = useCallback(() => {\n if (!dropdownState.isVisible || !dropdownState.isPositioned || isScrollingRef.current) return;\n\n isScrollingRef.current = true;\n\n animationFrameRef.current = requestAnimationFrame(() => {\n const triggerElement = getTriggerElement();\n if (triggerElement && contentRef.current) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n }));\n }\n\n isScrollingRef.current = false;\n });\n }, [\n dropdownState.isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n ]);\n\n const handleTriggerClick = useCallback(() => {\n if (disabled) return;\n\n if (dropdownState.isVisible) {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n } else {\n if (dropdownGroup) {\n const siblingDropdowns = document.querySelectorAll(\n `[data-dropdown-group=\"${dropdownGroup}\"][data-dropdown-content]`,\n );\n siblingDropdowns.forEach((dropdown) => {\n const dropdownElement = dropdown as HTMLElement;\n\n dropdownElement.dispatchEvent(new CustomEvent('closeSibling'));\n });\n }\n\n if (delay > 0) {\n timeoutRef.current = setTimeout(() => {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: true,\n isPositioned: false,\n }));\n }, delay);\n } else {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: true,\n isPositioned: false,\n }));\n }\n }\n }, [disabled, dropdownState.isVisible, delay, dropdownGroup]);\n\n useEffect(() => {\n const handleCloseSibling = () => {\n if (dropdownState.isVisible) {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n }\n };\n\n const currentContentRef = contentRef.current;\n if (currentContentRef) {\n currentContentRef.addEventListener('closeSibling', handleCloseSibling);\n }\n\n return () => {\n if (currentContentRef) {\n currentContentRef.removeEventListener('closeSibling', handleCloseSibling);\n }\n };\n }, [dropdownState.isVisible]);\n\n const handleClickOutside = useCallback(\n (event: MouseEvent) => {\n if (!closeOnClickOutside || !dropdownState.isVisible) return;\n\n const target = event.target as Node;\n\n if (contentRef.current?.contains(target)) {\n return;\n }\n\n if (getTriggerElement()?.contains(target)) {\n return;\n }\n\n const allDropdowns = document.querySelectorAll('[data-dropdown-content]');\n for (const dropdown of allDropdowns) {\n if (dropdown === contentRef.current) continue;\n\n if (dropdown.contains(target)) {\n const clickedDropdownLevel = parseInt(\n dropdown.getAttribute('data-dropdown-level') || '0',\n );\n\n if (clickedDropdownLevel > actualLevel) {\n return;\n }\n }\n }\n\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n },\n [closeOnClickOutside, dropdownState.isVisible, actualLevel, getTriggerElement],\n );\n\n const handleEscapeKey = useCallback(\n (event: KeyboardEvent) => {\n if (closeOnEscape && event.key === 'Escape' && dropdownState.isVisible) {\n setDropdownState((prev) => ({\n ...prev,\n isVisible: false,\n isPositioned: false,\n }));\n }\n },\n [closeOnEscape, dropdownState.isVisible],\n );\n\n useEffect(() => {\n const triggerElement = getTriggerElement();\n if (\n dropdownState.isVisible &&\n !dropdownState.isPositioned &&\n contentRef.current &&\n triggerElement\n ) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n isPositioned: true,\n }));\n }\n }, [\n dropdownState.isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n ]);\n\n useEffect(() => {\n const handleResize = () => {\n const triggerElement = getTriggerElement();\n if (\n dropdownState.isVisible &&\n dropdownState.isPositioned &&\n contentRef.current &&\n triggerElement\n ) {\n const triggerRect = triggerElement.getBoundingClientRect();\n const contentRect = contentRef.current.getBoundingClientRect();\n\n const { top, left, placement } = calculateOptimalPosition(triggerRect, contentRect);\n\n setDropdownState((prev) => ({\n ...prev,\n position: { top, left, placement },\n }));\n }\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [\n dropdownState.isVisible,\n dropdownState.isPositioned,\n calculateOptimalPosition,\n getTriggerElement,\n ]);\n\n useEffect(() => {\n if (dropdownState.isVisible) {\n window.addEventListener('scroll', handleScroll, { passive: true });\n\n document.body.addEventListener('scroll', handleScroll, { passive: true });\n }\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n document.body.removeEventListener('scroll', handleScroll);\n };\n }, [dropdownState.isVisible, handleScroll]);\n\n useEffect(() => {\n if (dropdownState.isVisible) {\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('keydown', handleEscapeKey);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('keydown', handleEscapeKey);\n };\n }, [dropdownState.isVisible, handleClickOutside, handleEscapeKey]);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n }\n };\n }, []);\n\n return (\n <>\n <div\n ref={triggerRef}\n onClick={handleTriggerClick}\n className={`eidos-dropdown-trigger ${fullWidth ? 'eidos-dropdown-trigger--fullWidth' : ''} ${triggerClassName}`}\n role=\"button\"\n tabIndex={-1}\n >\n {trigger}\n </div>\n {dropdownState.isVisible &&\n createPortal(\n <div\n ref={contentRef}\n data-dropdown-content\n data-dropdown-level={actualLevel}\n data-dropdown-group={dropdownGroup || ''}\n className={`eidos-dropdown-content eidos-dropdown-content--${dropdownState.position.placement} ${isNested ? 'eidos-dropdown-content--nested' : ''} ${dropdownState.isPositioned ? 'eidos-dropdown-content--positioned' : ''} ${contentClassName || ''}`}\n style={{\n top: dropdownState.position.top,\n left: dropdownState.position.left,\n ...calculateDynamicSizing(\n getTriggerElement()?.getBoundingClientRect() || new DOMRect(),\n ),\n }}\n role=\"menu\"\n >\n {content}\n </div>,\n document.body,\n )}\n </>\n );\n};\n\nexport const Dropdown: React.FC<DropdownProps> = (props) => {\n const context = useDropdownContext();\n const nextLevel = props.dropdownLevel !== undefined ? props.dropdownLevel : context.level + 1;\n\n return (\n <DropdownProvider level={nextLevel}>\n <DropdownInternal {...props} />\n </DropdownProvider>\n );\n};\n\nDropdown.displayName = 'Dropdown';\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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
 
6
- var _chunkR5QPUQSIcjs = require('./chunk-R5QPUQSI.cjs');
6
+ var _chunkZ5U4NJTWcjs = require('./chunk-Z5U4NJTW.cjs');
7
7
 
8
8
  // src/components/Input/Input.component.tsx
9
9
  var _react = require('react');
@@ -150,10 +150,10 @@ var Input = _react.forwardRef.call(void 0,
150
150
  label && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "label", { htmlFor: inputId, className: labelClasses, children: [
151
151
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-label-text`, children: label }),
152
152
  isRequired && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-required-asterisk`, children: "*" }),
153
- disclaimerIcon && (disclaimerContent ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkR5QPUQSIcjs.Tooltip, { message: disclaimerContent, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-disclaimer-icon`, children: _chunkTBMVUI7Scjs.renderIcon.call(void 0, disclaimerIcon, `eidos-input-disclaimer-icon-svg`) }) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-disclaimer-icon`, children: _chunkTBMVUI7Scjs.renderIcon.call(void 0, disclaimerIcon, `eidos-input-disclaimer-icon-svg`) }))
153
+ disclaimerIcon && (disclaimerContent ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ5U4NJTWcjs.Tooltip, { message: disclaimerContent, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-disclaimer-icon`, children: _chunkGOR642KKcjs.renderIcon.call(void 0, disclaimerIcon, `eidos-input-disclaimer-icon-svg`) }) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-disclaimer-icon`, children: _chunkGOR642KKcjs.renderIcon.call(void 0, disclaimerIcon, `eidos-input-disclaimer-icon-svg`) }))
154
154
  ] }),
155
155
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: wrapperClasses, children: [
156
- preIcon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-pre-icon`, children: _chunkTBMVUI7Scjs.renderIcon.call(void 0, preIcon, `eidos-input-pre-icon-svg`) }),
156
+ preIcon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-pre-icon`, children: _chunkGOR642KKcjs.renderIcon.call(void 0, preIcon, `eidos-input-pre-icon-svg`) }),
157
157
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
158
158
  "input",
159
159
  {
@@ -204,7 +204,7 @@ var Input = _react.forwardRef.call(void 0,
204
204
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: `eidos-input-clear-button-icon` })
205
205
  }
206
206
  ),
207
- posIcon && !posIconButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-pos-icon`, children: _chunkTBMVUI7Scjs.renderIcon.call(void 0, posIcon, `eidos-input-pos-icon-svg`) }),
207
+ posIcon && !posIconButton && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-pos-icon`, children: _chunkGOR642KKcjs.renderIcon.call(void 0, posIcon, `eidos-input-pos-icon-svg`) }),
208
208
  posIcon && posIconButton && onPosIconClick && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
209
209
  "button",
210
210
  {
@@ -213,7 +213,7 @@ var Input = _react.forwardRef.call(void 0,
213
213
  onClick: onPosIconClick,
214
214
  disabled: disabled || loading,
215
215
  tabIndex: -1,
216
- children: _chunkTBMVUI7Scjs.renderIcon.call(void 0, posIcon, `eidos-input-pos-icon-svg`)
216
+ children: _chunkGOR642KKcjs.renderIcon.call(void 0, posIcon, `eidos-input-pos-icon-svg`)
217
217
  }
218
218
  ),
219
219
  isSelect && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: `eidos-input-select-chevron`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ChevronDown, { className: `eidos-input-pos-icon-svg` }) })
@@ -232,4 +232,4 @@ Input.displayName = "Input";
232
232
 
233
233
 
234
234
  exports.Input = Input;
235
- //# sourceMappingURL=chunk-CDV2OAS3.cjs.map
235
+ //# sourceMappingURL=chunk-G5IGADJI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-G5IGADJI.cjs","../src/components/Input/Input.component.tsx"],"names":["currentValue"],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-G5IGADJI.cjs","sourcesContent":[null,"import React, { forwardRef, useState, useId } from 'react';\nimport { Eye, EyeOff, CircleAlert, X, ChevronDown } from 'lucide-react';\nimport { renderIcon } from '../../utils';\nimport type { InputProps } from './Input.types';\nimport { Tooltip } from '../Tooltip/Tooltip.component';\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n variant = 'filled',\n color = 'primary',\n size = 'md',\n disabled = false,\n loading = false,\n className = '',\n width,\n label,\n error,\n disclaimerIcon,\n disclaimerContent,\n preIcon,\n posIcon,\n posIconButton = false,\n onPosIconClick,\n type = 'text',\n id,\n name,\n required,\n isSelect = false,\n clearable = true,\n fullWidth = false,\n ...inputProps\n },\n ref,\n ) => {\n // Extract defaultValue so it never reaches the native <input> alongside `value`.\n // Passing both causes React's \"controlled/uncontrolled\" warning because we always\n // set value={currentValue} below - defaultValue is only needed to seed local state.\n const { defaultValue, ...restInputProps } = inputProps;\n\n const [showPassword, setShowPassword] = useState(false);\n const [localValue, setLocalValue] = useState(defaultValue || '');\n const [isFocused, setIsFocused] = useState(false);\n\n // Auto-generate id and name if not provided\n const generatedId = useId();\n const inputId = id || `input-${generatedId}`;\n const inputName = name || inputId;\n\n // Determine if using controlled or uncontrolled mode\n const isControlled = restInputProps.value !== undefined;\n const currentValue = isControlled ? restInputProps.value : localValue;\n\n // For select inputs, don't manage localValue - let the select component handle it\n // This prevents the Input's clear button from showing\n\n // Determine if label should float (only when there's content - static behavior)\n // For select inputs, keep label completely static (never float)\n const shouldFloatLabel = isSelect ? false : currentValue || defaultValue;\n\n // Check if field is required (from props or enhanced register function)\n const isRequired = required || Boolean('required' in restInputProps && restInputProps.required);\n\n // Handle number input to allow decimals and negative numbers\n const handleNumberInput = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (type === 'number') {\n const allowedKeys = [\n 'Backspace',\n 'Delete',\n 'Tab',\n 'Escape',\n 'Enter',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n ];\n const isNumber = /[0-9]/.test(e.key);\n const isDecimal = /[.,]/.test(e.key);\n const isMinus = e.key === '-';\n const isAllowedKey = allowedKeys.includes(e.key);\n const isControlKey = e.ctrlKey || e.metaKey;\n\n // Allow minus only at the beginning or when no text is selected\n if (isMinus) {\n const selectionStart = e.currentTarget.selectionStart || 0;\n const selectionEnd = e.currentTarget.selectionEnd || 0;\n const hasSelection = selectionStart !== selectionEnd;\n\n // Allow if at beginning or if replacing selected text\n if (selectionStart !== 0 && !hasSelection) {\n e.preventDefault();\n return;\n }\n }\n\n // Allow decimal only once\n if (isDecimal) {\n const currentValue = e.currentTarget.value;\n const hasDecimal = /[.,]/.test(currentValue);\n if (hasDecimal) {\n e.preventDefault();\n return;\n }\n }\n\n if (!isNumber && !isDecimal && !isMinus && !isAllowedKey && !isControlKey) {\n e.preventDefault();\n }\n }\n };\n\n // Handle input change for number inputs\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n // Only update localValue if uncontrolled and not a select input\n if (!isControlled && !isSelect) {\n setLocalValue(value);\n }\n restInputProps.onChange?.(e);\n };\n\n // Handle clear button\n const handleClear = () => {\n // Update localValue if uncontrolled\n if (!isControlled) {\n setLocalValue('');\n }\n\n // Create a proper synthetic event for React Hook Form\n const syntheticEvent = {\n target: {\n value: '',\n name: inputName,\n id: inputId,\n type: actualType,\n },\n } as React.ChangeEvent<HTMLInputElement>;\n\n // Call the form's onChange handler\n restInputProps.onChange?.(syntheticEvent);\n\n // Also try to update the input element directly\n if (ref && typeof ref === 'object' && ref.current) {\n ref.current.value = '';\n }\n };\n\n // Handle focus and blur\n const handleFocus = () => {\n setIsFocused(true);\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n };\n\n // Determine actual input type (handle password visibility)\n const actualType = type === 'password' ? (showPassword ? 'text' : 'password') : type;\n\n // Generate CSS classes\n const inputClasses = [\n 'eidos-input',\n `eidos-input--${variant}`,\n `eidos-input--${color}`,\n `eidos-input--${size}`,\n fullWidth && `eidos-input--fullWidth`,\n loading && `eidos-input--loading`,\n error && `eidos-input--error`,\n ]\n .filter(Boolean)\n .join(' ');\n\n const wrapperClasses = [\n 'eidos-input-wrapper',\n `eidos-input-wrapper--${variant}`,\n `eidos-input-wrapper--${color}`,\n `eidos-input-wrapper--${size}`,\n fullWidth && `eidos-input-wrapper--fullWidth`,\n loading && `eidos-input-wrapper--loading`,\n isFocused && `eidos-input-wrapper--focused`,\n error && `eidos-input-wrapper--error`,\n ]\n .filter(Boolean)\n .join(' ');\n\n const labelClasses = [\n 'eidos-input-label',\n shouldFloatLabel && `eidos-input-label--floating`,\n disclaimerIcon && `eidos-input-label--with-icon`,\n error && `eidos-input-label--error`,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n className={`eidos-input-container ${fullWidth ? `eidos-input-container--fullWidth` : ''} ${className}`}\n >\n {label && (\n <label htmlFor={inputId} className={labelClasses}>\n <span className={`eidos-input-label-text`}>{label}</span>\n {isRequired && <span className={`eidos-input-required-asterisk`}>*</span>}\n {disclaimerIcon &&\n (disclaimerContent ? (\n <Tooltip message={disclaimerContent}>\n <span className={`eidos-input-disclaimer-icon`}>\n {renderIcon(disclaimerIcon, `eidos-input-disclaimer-icon-svg`)}\n </span>\n </Tooltip>\n ) : (\n <span className={`eidos-input-disclaimer-icon`}>\n {renderIcon(disclaimerIcon, `eidos-input-disclaimer-icon-svg`)}\n </span>\n ))}\n </label>\n )}\n\n <div className={wrapperClasses}>\n {preIcon && (\n <span className={`eidos-input-pre-icon`}>\n {renderIcon(preIcon, `eidos-input-pre-icon-svg`)}\n </span>\n )}\n\n <input\n ref={ref}\n id={inputId}\n name={inputName}\n type={actualType}\n className={inputClasses}\n style={\n width\n ? {\n width: typeof width === 'number' ? `${width}px` : width,\n minWidth: typeof width === 'number' ? `${width}px` : width,\n maxWidth: typeof width === 'number' ? `${width}px` : width,\n }\n : undefined\n }\n disabled={disabled || loading}\n onKeyDown={handleNumberInput}\n {...restInputProps}\n value={currentValue}\n onFocus={(e) => {\n handleFocus();\n restInputProps.onFocus?.(e);\n }}\n onBlur={(e) => {\n handleBlur();\n restInputProps.onBlur?.(e);\n }}\n onChange={handleInputChange}\n />\n\n {type === 'password' && (\n <button\n type=\"button\"\n className={`eidos-input-password-toggle`}\n onClick={() => setShowPassword(!showPassword)}\n disabled={disabled || loading}\n tabIndex={-1}\n >\n {showPassword ? (\n <EyeOff className={`eidos-input-password-toggle-icon`} />\n ) : (\n <Eye className={`eidos-input-password-toggle-icon`} />\n )}\n </button>\n )}\n\n {/* Clear button - show when there's content and clearable is enabled (default: true) */}\n {currentValue &&\n String(currentValue).trim().length > 0 &&\n type !== 'password' &&\n !isSelect &&\n clearable !== false && (\n <button\n type=\"button\"\n className={`eidos-input-clear-button`}\n onClick={handleClear}\n disabled={disabled || loading}\n tabIndex={-1}\n >\n <X className={`eidos-input-clear-button-icon`} />\n </button>\n )}\n\n {posIcon && !posIconButton && (\n <span className={`eidos-input-pos-icon`}>\n {renderIcon(posIcon, `eidos-input-pos-icon-svg`)}\n </span>\n )}\n\n {posIcon && posIconButton && onPosIconClick && (\n <button\n type=\"button\"\n className={`eidos-input-pos-icon-button`}\n onClick={onPosIconClick}\n disabled={disabled || loading}\n tabIndex={-1}\n >\n {renderIcon(posIcon, `eidos-input-pos-icon-svg`)}\n </button>\n )}\n\n {/* Chevron for select inputs */}\n {isSelect && (\n <span className={`eidos-input-select-chevron`}>\n <ChevronDown className={`eidos-input-pos-icon-svg`} />\n </span>\n )}\n </div>\n\n {error && (\n <div className={`eidos-input-error-message`}>\n <CircleAlert className={`eidos-input-error-icon`} />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n"]}
@@ -18,4 +18,4 @@ var renderIcon = (icon, className) => {
18
18
 
19
19
 
20
20
  exports.renderIcon = renderIcon;
21
- //# sourceMappingURL=chunk-TBMVUI7S.cjs.map
21
+ //# sourceMappingURL=chunk-GOR642KK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-GOR642KK.cjs","../src/utils/renderIcon.tsx"],"names":[],"mappings":"AAAA;ACCA,2CAAsB;AAyCT,+CAAA;AAfN,IAAM,WAAA,EAAa,CAAC,IAAA,EAA4B,SAAA,EAAA,GAAwC;AAC7F,EAAA,GAAA,CAAI,CAAC,IAAA,EAAM,OAAO,IAAA;AAElB,EAAA,GAAA,CAAI,OAAO,KAAA,IAAS,QAAA,EAAU;AAE5B,IAAA,MAAM,SAAA,EAAW,IAAA,CACd,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,EAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,CAAY,EAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC1D,IAAA,CAAK,EAAE,CAAA;AAGV,IAAA,MAAM,WAAA,EAAa,kBAAA,CAAM,QAA8B,CAAA;AAGvD,IAAA,GAAA,CAAI,UAAA,EAAY;AACd,MAAA,uBAAO,6BAAA,UAAC,EAAA,EAAW,SAAA,EAAsB,aAAA,EAAY,OAAA,CAAO,CAAA;AAAA,IAC9D;AAGA,IAAA,uBAAO,6BAAA,GAAC,EAAA,EAAE,SAAA,EAAW,CAAA,EAAA;AACvB,EAAA;AAGsB,EAAA;AACA,EAAA;AACxB;ADpCkD;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-GOR642KK.cjs","sourcesContent":[null,"import React from 'react';\nimport { icons } from 'lucide-react';\n\nexport type IconType = React.ComponentType<{ className?: string }> | string;\n\n/**\n * Helper function to render icons dynamically\n * Supports both React components (Lucide, MUI, etc.) and string-based icon names\n *\n * @param icon - Icon component or string name (e.g., \"heart\" or \"arrow-right\")\n * @param className - Optional CSS class name to apply to the icon\n * @returns React node representing the icon, or null if no icon provided\n *\n * @example\n * // Component-based icon\n * import { Heart } from 'lucide-react';\n * renderIcon(Heart, 'my-icon-class');\n *\n * @example\n * // String-based Lucide icon (kebab-case converted to PascalCase)\n * renderIcon('heart', 'my-icon-class');\n * renderIcon('arrow-right', 'my-icon-class');\n *\n * @example\n * // String-based CSS class (for Font Awesome, Remixicon, etc.)\n * renderIcon('fas fa-heart', 'my-icon-class');\n */\nexport const renderIcon = (icon: IconType | undefined, className?: string): React.ReactNode => {\n if (!icon) return null;\n\n if (typeof icon === 'string') {\n // Convert kebab-case to PascalCase for Lucide icons\n const iconName = icon\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n\n // Try to find the icon in lucide-react\n const LucideIcon = icons[iconName as keyof typeof icons] as\n React.ComponentType<{ className?: string }> | undefined;\n\n if (LucideIcon) {\n return <LucideIcon className={className} aria-hidden=\"true\" />;\n }\n\n // Fallback: render as a CSS class (for Font Awesome, Remixicon, etc.)\n return <i className={`${icon} ${className || ''}`} aria-hidden=\"true\" />;\n }\n\n // It's a React component\n const IconComponent = icon;\n return <IconComponent className={className} aria-hidden=\"true\" />;\n};\n"]}
@@ -98,4 +98,4 @@ Checkbox.displayName = "Checkbox";
98
98
  export {
99
99
  Checkbox
100
100
  };
101
- //# sourceMappingURL=chunk-XJBMEDQ5.js.map
101
+ //# sourceMappingURL=chunk-H6CWTMAH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Checkbox/Checkbox.component.tsx"],"sourcesContent":["import React, { forwardRef, useId, useRef, useState, useEffect, useCallback } from 'react';\nimport { Check, Minus, CircleAlert } from 'lucide-react';\nimport type { CheckboxProps } from './Checkbox.types';\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n error,\n indeterminate = false,\n color = 'primary',\n size = 'md',\n className = '',\n disabled = false,\n id,\n checked,\n defaultChecked,\n onChange,\n onClick,\n ...inputProps\n },\n ref,\n ) => {\n const generatedId = useId();\n const checkboxId = id || `checkbox-${generatedId}`;\n\n // Internal ref needed to imperatively set `indeterminate` (not a standard HTML attribute)\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Track checked state for the visual control:\n // - controlled mode: `checked` prop drives everything\n // - uncontrolled mode: local state mirrors the native input\n const isControlled = checked !== undefined;\n const [localChecked, setLocalChecked] = useState<boolean>(defaultChecked ?? false);\n\n // `??` correctly handles `false` (falsy but defined): only falls back when `checked` is undefined\n const isChecked = checked ?? localChecked;\n\n // Imperatively set the indeterminate property – it has no HTML attribute equivalent\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Merge the forwarded ref with our internal ref so callers can still access the input.\n // useCallback(_, [ref]) prevents the ref callback from being a new function identity\n // every render, which would cause React to detach/re-attach the ref unnecessarily.\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n internalRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\n }\n },\n [ref],\n );\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setLocalChecked(e.target.checked);\n }\n onChange?.(e);\n };\n\n // Clicking anywhere in the surrounding <label> (e.g. the custom\n // `.eidos-checkbox-control` box) fires a click on the clicked element\n // *and* a second, browser-synthesized click targeted at this input -\n // both bubble up. A consumer that wraps Checkbox in its own click\n // handler (e.g. DataGrid toggling a cell on click) would otherwise see\n // that handler fire twice per click and cancel itself out. Stopping\n // propagation here only cancels the synthesized click's bubbling; the\n // original click (whichever element the user actually clicked) still\n // bubbles normally. Still forwards to a caller-supplied `onClick`\n // first, so passing one through doesn't silently disable this fix.\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n onClick?.(e);\n e.stopPropagation();\n };\n\n const wrapperClasses = [\n 'eidos-checkbox-wrapper',\n `eidos-checkbox-wrapper--${color}`,\n `eidos-checkbox-wrapper--${size}`,\n disabled && 'eidos-checkbox-wrapper--disabled',\n error && 'eidos-checkbox-wrapper--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n const controlClasses = [\n 'eidos-checkbox-control',\n isChecked && 'eidos-checkbox-control--checked',\n indeterminate && 'eidos-checkbox-control--indeterminate',\n disabled && 'eidos-checkbox-control--disabled',\n error && !disabled && 'eidos-checkbox-control--error',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={['eidos-checkbox-container', className].filter(Boolean).join(' ')}>\n <label className={wrapperClasses}>\n <input\n ref={mergedRef}\n type=\"checkbox\"\n id={checkboxId}\n className=\"eidos-checkbox-input\"\n disabled={disabled}\n onChange={handleChange}\n onClick={handleClick}\n {...(isControlled ? { checked } : { defaultChecked })}\n {...inputProps}\n />\n <span className={controlClasses}>\n {isChecked && !indeterminate && <Check className=\"eidos-checkbox-icon\" />}\n {indeterminate && <Minus className=\"eidos-checkbox-icon\" />}\n </span>\n {label && <span className=\"eidos-checkbox-label\">{label}</span>}\n </label>\n\n {error && (\n <div className=\"eidos-checkbox-error-message\">\n <CircleAlert />\n <span>{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\n\nCheckbox.displayName = 'Checkbox';\n"],"mappings":";AAAA,SAAgB,YAAY,OAAO,QAAQ,UAAU,WAAW,mBAAmB;AACnF,SAAS,OAAO,OAAO,mBAAmB;AAwGhC,cAWA,YAXA;AArGH,IAAM,WAAW;AAAA,EACtB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,cAAc,MAAM;AAC1B,UAAM,aAAa,MAAM,YAAY,WAAW;AAGhD,UAAM,cAAc,OAAyB,IAAI;AAKjD,UAAM,eAAe,YAAY;AACjC,UAAM,CAAC,cAAc,eAAe,IAAI,SAAkB,kBAAkB,KAAK;AAGjF,UAAM,YAAY,WAAW;AAG7B,cAAU,MAAM;AACd,UAAI,YAAY,SAAS;AACvB,oBAAY,QAAQ,gBAAgB;AAAA,MACtC;AAAA,IACF,GAAG,CAAC,aAAa,CAAC;AAKlB,UAAM,YAAY;AAAA,MAChB,CAAC,SAAkC;AACjC,oBAAY,UAAU;AACtB,YAAI,OAAO,QAAQ,YAAY;AAC7B,cAAI,IAAI;AAAA,QACV,WAAW,KAAK;AACd,UAAC,IAAwD,UAAU;AAAA,QACrE;AAAA,MACF;AAAA,MACA,CAAC,GAAG;AAAA,IACN;AAEA,UAAM,eAAe,CAAC,MAA2C;AAC/D,UAAI,CAAC,cAAc;AACjB,wBAAgB,EAAE,OAAO,OAAO;AAAA,MAClC;AACA,iBAAW,CAAC;AAAA,IACd;AAYA,UAAM,cAAc,CAAC,MAA0C;AAC7D,gBAAU,CAAC;AACX,QAAE,gBAAgB;AAAA,IACpB;AAEA,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,2BAA2B,KAAK;AAAA,MAChC,2BAA2B,IAAI;AAAA,MAC/B,YAAY;AAAA,MACZ,SAAS;AAAA,IACX,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,YAAY;AAAA,MACZ,SAAS,CAAC,YAAY;AAAA,IACxB,EACG,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,WACE,qBAAC,SAAI,WAAW,CAAC,4BAA4B,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC9E;AAAA,2BAAC,WAAM,WAAW,gBAChB;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,MAAK;AAAA,YACL,IAAI;AAAA,YACJ,WAAU;AAAA,YACV;AAAA,YACA,UAAU;AAAA,YACV,SAAS;AAAA,YACR,GAAI,eAAe,EAAE,QAAQ,IAAI,EAAE,eAAe;AAAA,YAClD,GAAG;AAAA;AAAA,QACN;AAAA,QACA,qBAAC,UAAK,WAAW,gBACd;AAAA,uBAAa,CAAC,iBAAiB,oBAAC,SAAM,WAAU,uBAAsB;AAAA,UACtE,iBAAiB,oBAAC,SAAM,WAAU,uBAAsB;AAAA,WAC3D;AAAA,QACC,SAAS,oBAAC,UAAK,WAAU,wBAAwB,iBAAM;AAAA,SAC1D;AAAA,MAEC,SACC,qBAAC,SAAI,WAAU,gCACb;AAAA,4BAAC,eAAY;AAAA,QACb,oBAAC,UAAM,iBAAM;AAAA,SACf;AAAA,OAEJ;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;","names":[]}
@@ -89,4 +89,4 @@ Stepper.displayName = "Stepper";
89
89
 
90
90
 
91
91
  exports.Stepper = Stepper;
92
- //# sourceMappingURL=chunk-2ZWBN3LK.cjs.map
92
+ //# sourceMappingURL=chunk-HFZ5FKRG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-HFZ5FKRG.cjs","../src/components/Stepper/Stepper.component.tsx"],"names":[],"mappings":"AAAA;ACCA,2CAAyB;AA6CjB,+CAAA;AA1CD,IAAM,QAAA,EAAkC,CAAC;AAAA,EAC9C,KAAA;AAAA,EACA,WAAA,EAAa,CAAA;AAAA,EACb,YAAA,EAAc,YAAA;AAAA,EACd,MAAA,EAAQ,SAAA;AAAA,EACR,YAAA,EAAc,IAAA;AAAA,EACd,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY;AACd,CAAA,EAAA,GAAM;AACJ,EAAA,MAAM,UAAA,EAAY,CAAC,KAAA,EAAe,cAAA,EAAA,GAA4C;AAC5E,IAAA,GAAA,CAAI,cAAA,EAAgB,OAAO,cAAA;AAC3B,IAAA,GAAA,CAAI,MAAA,EAAQ,UAAA,EAAY,OAAO,WAAA;AAC/B,IAAA,GAAA,CAAI,MAAA,IAAU,UAAA,EAAY,OAAO,QAAA;AACjC,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AAOA,EAAA,MAAM,qBAAA,EAAuB,KAAA,CAAM,OAAA,EAAS,EAAA,GAAK,SAAA,CAAU,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,EAAA,IAAM,WAAA;AAEnF,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAC,eAAA,EAAiB,CAAA,eAAA,EAAkB,WAAW,CAAA,CAAA;AAG/C,MAAA;AAYV,MAAA;AACC,QAAA;AAAC,UAAA;AAAA,UAAA;AACY,YAAA;AACT,cAAA;AACA,cAAA;AACwB,cAAA;AAGf,YAAA;AACC,YAAA;AAAA,UAAA;AACd,QAAA;AAE0B,QAAA;AACiB,UAAA;AAKG,UAAA;AAMO,UAAA;AAItC,UAAA;AASb,UAAA;AAAC,YAAA;AAAA,YAAA;AAEY,cAAA;AACT,gBAAA;AAC6B,gBAAA;AACD,gBAAA;AACjB,gBAAA;AAGF,cAAA;AACkC,cAAA;AAG7C,cAAA;AAAe,gCAAA;AACE,kCAAA;AAIb,kBAAA;AAAC,oBAAA;AAAA,oBAAA;AACY,sBAAA;AACT,wBAAA;AACkB,wBAAA;AAGT,sBAAA;AACC,sBAAA;AAAA,oBAAA;AACd,kBAAA;AAEJ,gBAAA;AAGe,gCAAA;AACG,kCAAA;AAEb,kBAAA;AAEL,gBAAA;AAAA,cAAA;AAAA,YAAA;AAnCK,YAAA;AAoCP,UAAA;AAEH,QAAA;AAEC,QAAA;AAAC,UAAA;AAAA,UAAA;AACW,YAAA;AACE,YAAA;AAAA,UAAA;AACd,QAAA;AAAA,MAAA;AAAA,IAAA;AAEJ,EAAA;AAEJ;AAEsB;AD7C2C;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-HFZ5FKRG.cjs","sourcesContent":[null,"import React from 'react';\nimport { Check, X } from 'lucide-react';\nimport type { StepperProps, StepStatus } from './Stepper.types';\n\nexport const Stepper: React.FC<StepperProps> = ({\n steps,\n activeStep = 0,\n orientation = 'horizontal',\n color = 'primary',\n showNumbers = true,\n extendStart = false,\n extendEnd = false,\n className = '',\n}) => {\n const getStatus = (index: number, explicitStatus?: StepStatus): StepStatus => {\n if (explicitStatus) return explicitStatus;\n if (index < activeStep) return 'completed';\n if (index === activeStep) return 'active';\n return 'pending';\n };\n\n // `extendStart`'s connector has no real preceding step to take its color\n // from, so it mirrors the first step's own status instead - colored only\n // once that step is actually completed. `extendEnd`'s connector *does*\n // have a real preceding step (the last one) and colors via the adjacent-\n // sibling rule in Stepper.scss, same as a between-step connector.\n const isFirstStepCompleted = steps.length > 0 && getStatus(0, steps[0].status) === 'completed';\n\n return (\n <div\n className={['eidos-stepper', `eidos-stepper--${orientation}`, className]\n .filter(Boolean)\n .join(' ')}\n aria-label=\"Progress steps\"\n >\n {/*\n `extendStart`/`extendEnd` render as standalone connectors, siblings\n of the steps rather than nested inside one - nesting one inside (say)\n the first step's own dot-row would make it share that step's fixed\n flex slot with its regular trailing connector, silently shrinking\n the real Account-Profile gap to make room. As an extra sibling, it\n gets its own independent share of the row instead, so every existing\n gap shrinks by the same small, uniform amount rather than one\n specific connector taking the whole hit.\n */}\n {extendStart && (\n <div\n className={[\n 'eidos-stepper-connector',\n 'eidos-stepper-connector--extend',\n isFirstStepCompleted && `eidos-stepper-connector--${color}`,\n ]\n .filter(Boolean)\n .join(' ')}\n aria-hidden=\"true\"\n />\n )}\n {steps.map((step, index) => {\n const status = getStatus(index, step.status);\n // The last step only skips its own trailing connector when there's\n // truly nothing after it - if `extendEnd` adds a connector past it,\n // it needs one too, exactly like every other step, so there's no\n // blank gap between its dot and the extend connector.\n const isLast = index === steps.length - 1 && !extendEnd;\n // That trailing connector and the standalone extend connector right\n // after it both carry the usual margin meant for the gap before a\n // *dot* - stacked together with no dot between them, that reads as\n // an unwanted extra gap. Only the extend connector's own side of\n // that junction is zeroed in Stepper.scss; this is the other side.\n const joinsExtendEnd = index === steps.length - 1 && extendEnd;\n\n const dotContent = step.icon ? (\n step.icon\n ) : status === 'completed' ? (\n <Check aria-hidden=\"true\" />\n ) : status === 'error' ? (\n <X aria-hidden=\"true\" />\n ) : showNumbers ? (\n <span>{index + 1}</span>\n ) : null;\n\n return (\n <div\n key={index}\n className={[\n 'eidos-stepper-step',\n `eidos-stepper-step--${status}`,\n `eidos-stepper-step--${color}`,\n !isLast && 'eidos-stepper-step--has-connector',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-current={status === 'active' ? 'step' : undefined}\n >\n {/* Dot + connector wrapper */}\n <div className=\"eidos-stepper-dot-row\">\n <div className=\"eidos-stepper-dot\" aria-hidden=\"true\">\n {dotContent}\n </div>\n {!isLast && (\n <div\n className={[\n 'eidos-stepper-connector',\n joinsExtendEnd && 'eidos-stepper-connector--joins-extend',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-hidden=\"true\"\n />\n )}\n </div>\n\n {/* Labels */}\n <div className=\"eidos-stepper-label-group\">\n <span className=\"eidos-stepper-label\">{step.label}</span>\n {step.description && (\n <span className=\"eidos-stepper-description\">{step.description}</span>\n )}\n </div>\n </div>\n );\n })}\n {extendEnd && (\n <div\n className=\"eidos-stepper-connector eidos-stepper-connector--extend\"\n aria-hidden=\"true\"\n />\n )}\n </div>\n );\n};\n\nStepper.displayName = 'Stepper';\n"]}
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkCDV2OAS3cjs = require('./chunk-CDV2OAS3.cjs');
3
+ var _chunkG5IGADJIcjs = require('./chunk-G5IGADJI.cjs');
4
4
 
5
5
 
6
- var _chunkKV2FG7ANcjs = require('./chunk-KV2FG7AN.cjs');
6
+ var _chunkFRUOA2QUcjs = require('./chunk-FRUOA2QU.cjs');
7
7
 
8
8
 
9
- var _chunkTBMVUI7Scjs = require('./chunk-TBMVUI7S.cjs');
9
+ var _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
10
10
 
11
11
  // src/components/Select/Select.component.tsx
12
12
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -265,7 +265,7 @@ var Select = _react2.default.forwardRef(
265
265
  "aria-selected": isSelected,
266
266
  "aria-disabled": option.disabled,
267
267
  children: [
268
- option.icon && _chunkTBMVUI7Scjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
268
+ option.icon && _chunkGOR642KKcjs.renderIcon.call(void 0, option.icon, "eidos-select-option-icon"),
269
269
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-select-option-label", children: option.label }),
270
270
  isSelected && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "eidos-select-option-check-icon" })
271
271
  ]
@@ -288,7 +288,7 @@ var Select = _react2.default.forwardRef(
288
288
  "aria-controls": `${id || "select"}-options`,
289
289
  "aria-activedescendant": focusedIndex >= 0 ? `${id || "select"}-option-${focusedIndex}` : void 0,
290
290
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
291
- _chunkCDV2OAS3cjs.Input,
291
+ _chunkG5IGADJIcjs.Input,
292
292
  {
293
293
  ref: inputRef,
294
294
  value: selectedValues.size > 0 ? displayValue : "",
@@ -314,7 +314,7 @@ var Select = _react2.default.forwardRef(
314
314
  ref,
315
315
  className: `${"eidos-select-container"} ${fullWidth ? "eidos-select-container--fullWidth" : ""} ${className}`,
316
316
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
317
- _chunkKV2FG7ANcjs.Dropdown,
317
+ _chunkFRUOA2QUcjs.Dropdown,
318
318
  {
319
319
  defaultOpen: autoOpen,
320
320
  trigger: triggerElement,
@@ -339,4 +339,4 @@ Select.displayName = "Select";
339
339
 
340
340
 
341
341
  exports.Select = Select;
342
- //# sourceMappingURL=chunk-QGZF5MOS.cjs.map
342
+ //# sourceMappingURL=chunk-HLNKIAE5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-HLNKIAE5.cjs","../src/components/Select/Select.component.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-HLNKIAE5.cjs","sourcesContent":[null,"import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { Input } from '../Input/Input.component';\nimport { Dropdown } from '../Dropdown/Dropdown.component';\nimport type { SelectProps, SelectOption } from './Select.types';\nimport { renderIcon } from '../../utils';\n\nexport const Select = React.forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n value,\n defaultValue,\n onChange,\n className = '',\n multiple = false,\n placeholder = 'Select an option...',\n disabled = false,\n inputProps = {},\n name,\n id,\n required = false,\n fullWidth = false,\n minWidth,\n maxWidth,\n minHeight,\n maxHeight = '300px',\n autoWidth = true,\n clearable = true,\n autoOpen = false,\n dropdownProps = {},\n },\n ref,\n ) => {\n const isControlled = value !== undefined;\n\n // Lazy initializer: seed from defaultValue in uncontrolled mode.\n const [selectedValues, setSelectedValues] = useState<Set<string>>(() => {\n if (defaultValue !== undefined) {\n const vals = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n return new Set(vals.filter((v) => v !== ''));\n }\n return new Set();\n });\n const [menuKey, setMenuKey] = useState(0);\n const [focusedIndex, setFocusedIndex] = useState(-1);\n const [isOpen, setIsOpen] = useState(false);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\n\n // Kept in sync every render so the mount-only callback ref below can\n // read the latest values without needing them in its dependency array\n // (see `handleOptionsMount`).\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n useEffect(() => {\n if (value !== undefined) {\n const values = Array.isArray(value) ? value : [value];\n\n const validValues = values.filter((v) => v !== '');\n setSelectedValues(new Set(validValues));\n }\n }, [value]);\n\n useEffect(() => {\n setFocusedIndex(-1);\n }, [options]);\n\n useEffect(() => {\n optionRefs.current = optionRefs.current.slice(0, options.length);\n }, [options.length]);\n\n const handleOptionSelect = useCallback(\n (option: SelectOption) => {\n if (option.disabled) return;\n\n const newSelectedValues = new Set(selectedValues);\n\n if (multiple) {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.delete(option.value);\n } else {\n newSelectedValues.add(option.value);\n }\n } else {\n if (newSelectedValues.has(option.value)) {\n newSelectedValues.clear();\n } else {\n newSelectedValues.clear();\n newSelectedValues.add(option.value);\n }\n }\n\n // In uncontrolled mode, own the state directly.\n // In controlled mode, let the parent drive via value prop + useEffect sync.\n if (!isControlled) {\n setSelectedValues(newSelectedValues);\n }\n\n if (onChange) {\n const newValue = multiple\n ? Array.from(newSelectedValues)\n : Array.from(newSelectedValues)[0] || '';\n onChange(newValue);\n }\n\n if (!multiple) {\n setIsOpen(false);\n setMenuKey((prev) => prev + 1);\n }\n },\n [multiple, onChange, selectedValues, isControlled],\n );\n\n const handleClear = useCallback(\n (e?: React.MouseEvent) => {\n if (e) {\n e.stopPropagation();\n }\n if (!isControlled) {\n setSelectedValues(new Set());\n }\n\n setIsOpen(false);\n setMenuKey((prev) => prev + 1);\n if (onChange) {\n onChange(multiple ? [] : '');\n }\n },\n [multiple, onChange, isControlled],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev < options.length - 1 ? prev + 1 : 0;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(options.length - 1);\n } else {\n setFocusedIndex((prev) => {\n const nextIndex = prev > 0 ? prev - 1 : options.length - 1;\n\n setTimeout(() => {\n optionRefs.current[nextIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }, 0);\n return nextIndex;\n });\n }\n break;\n\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else if (focusedIndex >= 0 && focusedIndex < options.length) {\n const focusedOption = options[focusedIndex];\n handleOptionSelect(focusedOption);\n }\n break;\n\n case 'Escape':\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n setFocusedIndex(-1);\n setMenuKey((prev) => prev + 1);\n }\n break;\n\n case 'Home':\n e.preventDefault();\n if (isOpen) {\n setFocusedIndex(0);\n optionRefs.current[0]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n case 'End':\n e.preventDefault();\n if (isOpen) {\n const lastIndex = options.length - 1;\n setFocusedIndex(lastIndex);\n optionRefs.current[lastIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n break;\n\n default:\n if (isOpen && e.key.length === 1 && /[a-zA-Z0-9]/.test(e.key)) {\n const searchChar = e.key.toLowerCase();\n const foundIndex = options.findIndex(\n (option, index) =>\n index > focusedIndex && option.label.toLowerCase().startsWith(searchChar),\n );\n\n if (foundIndex !== -1) {\n setFocusedIndex(foundIndex);\n optionRefs.current[foundIndex]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n } else {\n const foundFromStart = options.findIndex((option) =>\n option.label.toLowerCase().startsWith(searchChar),\n );\n if (foundFromStart !== -1) {\n setFocusedIndex(foundFromStart);\n optionRefs.current[foundFromStart]?.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }\n }\n break;\n }\n },\n [disabled, isOpen, options, focusedIndex, handleOptionSelect],\n );\n\n // Scrolls the first selected option into view. Attached as the options\n // list's own ref below with an empty dependency array, so its identity\n // never changes and React only invokes it on genuine DOM mount/unmount -\n // i.e. exactly when the dropdown opens/closes (Dropdown unmounts its\n // `content` entirely while closed), not on every re-render while open.\n const handleOptionsMount = useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n const idx = optionsRef.current.findIndex((option) =>\n selectedValuesRef.current.has(option.value),\n );\n if (idx === -1) return;\n optionRefs.current[idx]?.scrollIntoView({ block: 'nearest' });\n }, []);\n\n // Past this many selections the full comma-joined label list becomes\n // unreadable in the trigger, so we switch to a compact \"N selected\" label.\n const COMPACT_LABEL_THRESHOLD = 2;\n\n const displayValue = useMemo(() => {\n if (selectedValues.size === 0) return '';\n\n if (multiple && selectedValues.size > COMPACT_LABEL_THRESHOLD) {\n return `${selectedValues.size} selected`;\n }\n\n const selectedOptions = options.filter((option) => selectedValues.has(option.value));\n const text = selectedOptions.map((option) => option.label).join(', ');\n return text;\n }, [options, selectedValues, multiple]);\n\n const selectContent = useMemo(\n () => (\n <div className={'eidos-select-options'} ref={handleOptionsMount}>\n {options.map((option, index) => {\n const isSelected = selectedValues.has(option.value);\n const isFocused = index === focusedIndex;\n return (\n <div\n key={option.id}\n ref={(el) => {\n optionRefs.current[index] = el;\n }}\n className={`\n\t\t\t\t\t\t\t\t\t\t${'eidos-select-option'}\n\t\t\t\t\t\t\t\t\t\t${isSelected ? 'eidos-select-option--selected' : ''}\n\t\t\t\t\t\t\t\t\t\t${option.disabled ? 'eidos-select-option--disabled' : ''}\n\t\t\t\t\t\t\t\t\t\t${isFocused ? 'eidos-select-option--focused' : ''}\n\t\t\t\t\t\t\t\t\t`.trim()}\n onClick={() => handleOptionSelect(option)}\n onMouseEnter={() => setFocusedIndex(index)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n >\n {option.icon && renderIcon(option.icon, 'eidos-select-option-icon')}\n <span className={'eidos-select-option-label'}>{option.label}</span>\n {isSelected && <Check className={'eidos-select-option-check-icon'} />}\n </div>\n );\n })}\n </div>\n ),\n [options, selectedValues, focusedIndex, handleOptionSelect, handleOptionsMount],\n );\n\n const triggerElement = (\n <div\n ref={triggerRef}\n className={`eidos-select-trigger ${fullWidth ? 'eidos-select-trigger--fullWidth' : ''}`}\n onKeyDown={handleKeyDown}\n tabIndex={disabled ? -1 : undefined}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={`${id || 'select'}-options`}\n aria-activedescendant={\n focusedIndex >= 0 ? `${id || 'select'}-option-${focusedIndex}` : undefined\n }\n >\n <Input\n ref={inputRef}\n value={selectedValues.size > 0 ? displayValue : ''}\n placeholder={selectedValues.size === 0 ? placeholder : ''}\n posIcon={selectedValues.size > 0 && clearable ? X : undefined}\n posIconButton={selectedValues.size > 0 && clearable}\n onPosIconClick={selectedValues.size > 0 && clearable ? handleClear : undefined}\n disabled={disabled}\n readOnly={true}\n isSelect={true}\n name={name}\n id={id}\n required={required}\n fullWidth={fullWidth}\n {...inputProps}\n />\n </div>\n );\n\n return (\n <div\n ref={ref}\n className={`${'eidos-select-container'} ${\n fullWidth ? 'eidos-select-container--fullWidth' : ''\n } ${className}`}\n >\n <Dropdown\n key={menuKey}\n defaultOpen={autoOpen}\n trigger={triggerElement}\n content={\n <div id={`${id || 'select'}-options`} role=\"listbox\" aria-multiselectable={multiple}>\n {selectContent}\n </div>\n }\n minWidth={minWidth}\n maxWidth={maxWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n autoWidth={autoWidth}\n fullWidth={fullWidth}\n triggerRef={triggerRef as React.RefObject<HTMLElement | null>}\n {...dropdownProps}\n />\n </div>\n );\n },\n);\n\nSelect.displayName = 'Select';\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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 _chunkCDV2OAS3cjs = require('./chunk-CDV2OAS3.cjs');
3
+ var _chunkG5IGADJIcjs = require('./chunk-G5IGADJI.cjs');
4
4
 
5
5
 
6
- var _chunkKV2FG7ANcjs = require('./chunk-KV2FG7AN.cjs');
6
+ var _chunkFRUOA2QUcjs = require('./chunk-FRUOA2QU.cjs');
7
7
 
8
8
  // src/components/Combobox/Combobox.component.tsx
9
9
  var _react = require('react');
@@ -173,10 +173,10 @@ var Combobox = ({
173
173
  [setInputValue, onSearch, openDropdown]
174
174
  );
175
175
  const handleBlur = _react.useCallback.call(void 0, () => {
176
- const current = inputValueRef.current;
177
- const committed = committedValueRef.current;
178
176
  setTimeout(() => {
179
177
  if (_optionalChain([containerRef, 'access', _10 => _10.current, 'optionalAccess', _11 => _11.contains, 'call', _12 => _12(document.activeElement)])) return;
178
+ const current = inputValueRef.current;
179
+ const committed = committedValueRef.current;
180
180
  isOpenRef.current = false;
181
181
  setIsOpen(false);
182
182
  setFocusedIndex(-1);
@@ -383,7 +383,7 @@ var Combobox = ({
383
383
  children: [
384
384
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { ref: comboboxTriggerRef, className: "eidos-combobox-trigger", children: [
385
385
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
386
- _chunkCDV2OAS3cjs.Input,
386
+ _chunkG5IGADJIcjs.Input,
387
387
  {
388
388
  ref: inputRef,
389
389
  value: inputValue,
@@ -407,7 +407,7 @@ var Combobox = ({
407
407
  }
408
408
  ),
409
409
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
410
- _chunkKV2FG7ANcjs.Dropdown,
410
+ _chunkFRUOA2QUcjs.Dropdown,
411
411
  {
412
412
  trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
413
413
  "span",
@@ -451,4 +451,4 @@ Combobox.displayName = "Combobox";
451
451
 
452
452
 
453
453
  exports.Combobox = Combobox;
454
- //# sourceMappingURL=chunk-GI7WPGP2.cjs.map
454
+ //# sourceMappingURL=chunk-HNUTV3HR.cjs.map