eidos-ui 1.0.0 → 1.0.2

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 (509) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +227 -175
  3. package/dist/accordion/index.cjs +2 -2
  4. package/dist/accordion/index.cjs.map +1 -1
  5. package/dist/accordion/index.js +1 -1
  6. package/dist/alert/index.cjs +5 -5
  7. package/dist/alert/index.cjs.map +1 -1
  8. package/dist/alert/index.js +4 -4
  9. package/dist/avatar/index.cjs +2 -2
  10. package/dist/avatar/index.cjs.map +1 -1
  11. package/dist/avatar/index.js +1 -1
  12. package/dist/badge/index.cjs.map +1 -1
  13. package/dist/breadcrumb/index.cjs +2 -2
  14. package/dist/breadcrumb/index.cjs.map +1 -1
  15. package/dist/breadcrumb/index.js +1 -1
  16. package/dist/button/index.cjs +4 -4
  17. package/dist/button/index.cjs.map +1 -1
  18. package/dist/button/index.js +3 -3
  19. package/dist/button-group/index.cjs +2 -2
  20. package/dist/button-group/index.cjs.map +1 -1
  21. package/dist/button-group/index.js +1 -1
  22. package/dist/card/index.cjs +2 -2
  23. package/dist/card/index.cjs.map +1 -1
  24. package/dist/card/index.js +1 -1
  25. package/dist/checkbox/index.cjs +2 -2
  26. package/dist/checkbox/index.cjs.map +1 -1
  27. package/dist/checkbox/index.js +1 -1
  28. package/dist/chip/index.cjs +4 -4
  29. package/dist/chip/index.cjs.map +1 -1
  30. package/dist/chip/index.js +3 -3
  31. package/dist/{chunk-OHUVWPFJ.js → chunk-2BC4M4QZ.js} +1 -1
  32. package/dist/chunk-2BC4M4QZ.js.map +1 -0
  33. package/dist/{chunk-OT3VZLN4.js → chunk-2BXCIWL7.js} +3 -3
  34. package/dist/chunk-2BXCIWL7.js.map +1 -0
  35. package/dist/{chunk-6QFT3BUD.cjs → chunk-2ROKOO22.cjs} +1 -1
  36. package/dist/chunk-2ROKOO22.cjs.map +1 -0
  37. package/dist/{chunk-AOV32YBE.js → chunk-2RXQMQYW.js} +1 -1
  38. package/dist/chunk-2RXQMQYW.js.map +1 -0
  39. package/dist/{chunk-VYV45YOK.cjs → chunk-2U7UJOOB.cjs} +17 -17
  40. package/dist/chunk-2U7UJOOB.cjs.map +1 -0
  41. package/dist/{chunk-UTENJWSE.cjs → chunk-366R4GKR.cjs} +1 -1
  42. package/dist/chunk-366R4GKR.cjs.map +1 -0
  43. package/dist/{chunk-TQCNQKWF.cjs → chunk-3CXULV4G.cjs} +1 -1
  44. package/dist/chunk-3CXULV4G.cjs.map +1 -0
  45. package/dist/{chunk-PEPYVWGY.cjs → chunk-3EPND5M2.cjs} +3 -3
  46. package/dist/chunk-3EPND5M2.cjs.map +1 -0
  47. package/dist/chunk-3ETWFS2N.cjs.map +1 -1
  48. package/dist/{chunk-GL4DHGQE.js → chunk-3HMKE2GJ.js} +5 -5
  49. package/dist/chunk-3HMKE2GJ.js.map +1 -0
  50. package/dist/{chunk-QYHTMEI5.js → chunk-3LBWAUCR.js} +1 -1
  51. package/dist/chunk-3LBWAUCR.js.map +1 -0
  52. package/dist/{chunk-E2B33QB7.js → chunk-3LHQUOGP.js} +4 -4
  53. package/dist/chunk-3LHQUOGP.js.map +1 -0
  54. package/dist/chunk-3RUIKBH4.cjs.map +1 -1
  55. package/dist/{chunk-DK4S3EHG.js → chunk-3TUCQAYL.js} +1 -1
  56. package/dist/chunk-3TUCQAYL.js.map +1 -0
  57. package/dist/{chunk-BBOUUHLO.js → chunk-3VRMTWUS.js} +5 -5
  58. package/dist/chunk-3VRMTWUS.js.map +1 -0
  59. package/dist/{chunk-SXF3TCYA.js → chunk-4BKTBV2I.js} +1 -1
  60. package/dist/chunk-4BKTBV2I.js.map +1 -0
  61. package/dist/{chunk-P74HNSNJ.cjs → chunk-4BQM5F76.cjs} +3 -3
  62. package/dist/chunk-4BQM5F76.cjs.map +1 -0
  63. package/dist/{chunk-Z7S4UQKY.js → chunk-4LM33LDV.js} +2 -2
  64. package/dist/chunk-4LM33LDV.js.map +1 -0
  65. package/dist/{chunk-GRH57M3E.js → chunk-4M3LZLOH.js} +3 -3
  66. package/dist/chunk-4M3LZLOH.js.map +1 -0
  67. package/dist/{chunk-M56IGNH7.cjs → chunk-4UJ7LG4W.cjs} +3 -3
  68. package/dist/chunk-4UJ7LG4W.cjs.map +1 -0
  69. package/dist/{chunk-P6ZBENAG.js → chunk-56B6RLOE.js} +3 -3
  70. package/dist/chunk-56B6RLOE.js.map +1 -0
  71. package/dist/{chunk-XSGUFMT4.js → chunk-5CLC3FJO.js} +1 -1
  72. package/dist/chunk-5CLC3FJO.js.map +1 -0
  73. package/dist/{chunk-VLC2OZV3.cjs → chunk-5O73AALP.cjs} +1 -1
  74. package/dist/chunk-5O73AALP.cjs.map +1 -0
  75. package/dist/{chunk-F54MVGKO.js → chunk-5WROPW7Z.js} +4 -4
  76. package/dist/chunk-5WROPW7Z.js.map +1 -0
  77. package/dist/{chunk-H56YUMFB.cjs → chunk-6A2ZKVST.cjs} +5 -5
  78. package/dist/chunk-6A2ZKVST.cjs.map +1 -0
  79. package/dist/{chunk-CJUZDUXW.cjs → chunk-6RGJAQCU.cjs} +5 -5
  80. package/dist/chunk-6RGJAQCU.cjs.map +1 -0
  81. package/dist/{chunk-P2BTQ33C.cjs → chunk-6U2H26A4.cjs} +4 -4
  82. package/dist/chunk-6U2H26A4.cjs.map +1 -0
  83. package/dist/{chunk-6USUVU6J.js → chunk-6ZAT5CGB.js} +1 -1
  84. package/dist/chunk-6ZAT5CGB.js.map +1 -0
  85. package/dist/{chunk-YKECQKOV.cjs → chunk-7AHZTHXR.cjs} +9 -9
  86. package/dist/chunk-7AHZTHXR.cjs.map +1 -0
  87. package/dist/{chunk-QYK4ECSZ.js → chunk-7HEUWGYW.js} +1 -1
  88. package/dist/chunk-7HEUWGYW.js.map +1 -0
  89. package/dist/{chunk-KF64C4QI.js → chunk-A3NE2C7C.js} +2 -2
  90. package/dist/chunk-A3NE2C7C.js.map +1 -0
  91. package/dist/{chunk-LTOHGCU4.cjs → chunk-A7Z2QAFZ.cjs} +7 -7
  92. package/dist/chunk-A7Z2QAFZ.cjs.map +1 -0
  93. package/dist/{chunk-ICHPPNFV.js → chunk-ALGX5X4N.js} +5 -5
  94. package/dist/chunk-ALGX5X4N.js.map +1 -0
  95. package/dist/{chunk-FNUOTM44.cjs → chunk-AYMD4D4M.cjs} +3 -3
  96. package/dist/chunk-AYMD4D4M.cjs.map +1 -0
  97. package/dist/{chunk-HQ4KZRFH.js → chunk-BOB5JJ7F.js} +3 -3
  98. package/dist/chunk-BOB5JJ7F.js.map +1 -0
  99. package/dist/{chunk-6GAIQ2IY.cjs → chunk-CBLWP43O.cjs} +47 -47
  100. package/dist/chunk-CBLWP43O.cjs.map +1 -0
  101. package/dist/{chunk-BTPCSBGP.js → chunk-CJVC3A4O.js} +2 -2
  102. package/dist/chunk-CJVC3A4O.js.map +1 -0
  103. package/dist/{chunk-ZBGTVTQJ.js → chunk-CMOBXLNA.js} +1 -1
  104. package/dist/chunk-CMOBXLNA.js.map +1 -0
  105. package/dist/{chunk-POX6JZLO.cjs → chunk-DKZTDYH5.cjs} +5 -5
  106. package/dist/chunk-DKZTDYH5.cjs.map +1 -0
  107. package/dist/{chunk-S25WB7KJ.js → chunk-DRXPTACG.js} +1 -1
  108. package/dist/chunk-DRXPTACG.js.map +1 -0
  109. package/dist/chunk-DZUJEN5N.cjs.map +1 -1
  110. package/dist/chunk-EACNRR3C.cjs.map +1 -1
  111. package/dist/{chunk-7IOOFKG3.js → chunk-EF4Y6Q35.js} +1 -1
  112. package/dist/chunk-EF4Y6Q35.js.map +1 -0
  113. package/dist/chunk-EQ6BNPTL.cjs.map +1 -1
  114. package/dist/{chunk-VZ43OLU6.cjs → chunk-EQEV7GPT.cjs} +7 -7
  115. package/dist/chunk-EQEV7GPT.cjs.map +1 -0
  116. package/dist/{chunk-ICJ3SV5I.cjs → chunk-FKXKBJUI.cjs} +1 -1
  117. package/dist/chunk-FKXKBJUI.cjs.map +1 -0
  118. package/dist/{chunk-BFYSYUA6.cjs → chunk-FMPXSF3H.cjs} +11 -11
  119. package/dist/chunk-FMPXSF3H.cjs.map +1 -0
  120. package/dist/chunk-FQZ6F7FQ.cjs.map +1 -1
  121. package/dist/{chunk-KV2FG7AN.cjs → chunk-FRUOA2QU.cjs} +1 -1
  122. package/dist/chunk-FRUOA2QU.cjs.map +1 -0
  123. package/dist/{chunk-CDV2OAS3.cjs → chunk-G5IGADJI.cjs} +7 -7
  124. package/dist/chunk-G5IGADJI.cjs.map +1 -0
  125. package/dist/{chunk-TBMVUI7S.cjs → chunk-GOR642KK.cjs} +1 -1
  126. package/dist/chunk-GOR642KK.cjs.map +1 -0
  127. package/dist/{chunk-XJBMEDQ5.js → chunk-H6CWTMAH.js} +1 -1
  128. package/dist/chunk-H6CWTMAH.js.map +1 -0
  129. package/dist/{chunk-2ZWBN3LK.cjs → chunk-HFZ5FKRG.cjs} +1 -1
  130. package/dist/chunk-HFZ5FKRG.cjs.map +1 -0
  131. package/dist/{chunk-QGZF5MOS.cjs → chunk-HLNKIAE5.cjs} +7 -7
  132. package/dist/chunk-HLNKIAE5.cjs.map +1 -0
  133. package/dist/chunk-I44YNYI6.cjs.map +1 -1
  134. package/dist/chunk-I6UOIS4J.cjs.map +1 -1
  135. package/dist/{chunk-LEZ4HSBD.cjs → chunk-IC2M4N7R.cjs} +34 -34
  136. package/dist/chunk-IC2M4N7R.cjs.map +1 -0
  137. package/dist/{chunk-G2FANEA2.cjs → chunk-IJ4DXG7D.cjs} +1 -1
  138. package/dist/chunk-IJ4DXG7D.cjs.map +1 -0
  139. package/dist/{chunk-SOGUWOSQ.cjs → chunk-IJYYHBZC.cjs} +3 -3
  140. package/dist/chunk-IJYYHBZC.cjs.map +1 -0
  141. package/dist/{chunk-SAFSEXMU.cjs → chunk-ISABZ2VX.cjs} +8 -8
  142. package/dist/chunk-ISABZ2VX.cjs.map +1 -0
  143. package/dist/{chunk-VTAABT55.js → chunk-IV4LM3MB.js} +6 -6
  144. package/dist/chunk-IV4LM3MB.js.map +1 -0
  145. package/dist/{chunk-KO2MKZDW.cjs → chunk-IXZMKIV5.cjs} +1 -1
  146. package/dist/chunk-IXZMKIV5.cjs.map +1 -0
  147. package/dist/{chunk-7KGV6YCG.cjs → chunk-IYWAZEFI.cjs} +1 -1
  148. package/dist/chunk-IYWAZEFI.cjs.map +1 -0
  149. package/dist/{chunk-E3XATJ63.js → chunk-IZBJW37N.js} +6 -6
  150. package/dist/chunk-IZBJW37N.js.map +1 -0
  151. package/dist/{chunk-HO7P6IJO.js → chunk-JC4WLVBG.js} +2 -2
  152. package/dist/chunk-JC4WLVBG.js.map +1 -0
  153. package/dist/{chunk-O6B4KB4D.js → chunk-JMD3P4CY.js} +5 -5
  154. package/dist/chunk-JMD3P4CY.js.map +1 -0
  155. package/dist/{chunk-T56K5IKQ.js → chunk-JV7Z3D3U.js} +2 -2
  156. package/dist/chunk-JV7Z3D3U.js.map +1 -0
  157. package/dist/{chunk-DFADZZ3K.js → chunk-K7IFNKMN.js} +3 -3
  158. package/dist/chunk-K7IFNKMN.js.map +1 -0
  159. package/dist/{chunk-C7F2VFAI.cjs → chunk-KIXFSXIN.cjs} +1 -1
  160. package/dist/chunk-KIXFSXIN.cjs.map +1 -0
  161. package/dist/{chunk-V5JNYS77.cjs → chunk-KV3V2CPH.cjs} +1 -1
  162. package/dist/chunk-KV3V2CPH.cjs.map +1 -0
  163. package/dist/{chunk-5TGBNYZK.cjs → chunk-KVIL4EP4.cjs} +1 -1
  164. package/dist/chunk-KVIL4EP4.cjs.map +1 -0
  165. package/dist/{chunk-PWIA4XQD.js → chunk-LUSLBNSG.js} +1 -1
  166. package/dist/chunk-LUSLBNSG.js.map +1 -0
  167. package/dist/{chunk-73EKJU4G.js → chunk-LYH3EKKQ.js} +1 -1
  168. package/dist/chunk-LYH3EKKQ.js.map +1 -0
  169. package/dist/{chunk-D7PGZ3M3.cjs → chunk-MW2S7PZ7.cjs} +5 -5
  170. package/dist/chunk-MW2S7PZ7.cjs.map +1 -0
  171. package/dist/{chunk-LQ3C3OR2.js → chunk-MZZ4SAFY.js} +1 -1
  172. package/dist/chunk-MZZ4SAFY.js.map +1 -0
  173. package/dist/{chunk-KKOZX64Z.js → chunk-NEQXEVHM.js} +1 -1
  174. package/dist/chunk-NEQXEVHM.js.map +1 -0
  175. package/dist/{chunk-NDLMU6HJ.js → chunk-NFIK3KMT.js} +9 -9
  176. package/dist/chunk-NFIK3KMT.js.map +1 -0
  177. package/dist/{chunk-3YPTYI7R.js → chunk-NQ4L6PYW.js} +1 -1
  178. package/dist/chunk-NQ4L6PYW.js.map +1 -0
  179. package/dist/{chunk-JFA5ABVE.js → chunk-NSITXZBU.js} +1 -1
  180. package/dist/chunk-NSITXZBU.js.map +1 -0
  181. package/dist/{chunk-2YQE26EK.js → chunk-O3I3RBZJ.js} +1 -1
  182. package/dist/chunk-O3I3RBZJ.js.map +1 -0
  183. package/dist/{chunk-O5ZPSZNY.cjs → chunk-OGKD5PLS.cjs} +6 -6
  184. package/dist/chunk-OGKD5PLS.cjs.map +1 -0
  185. package/dist/{chunk-7R7IFWGB.cjs → chunk-OZZHOEN5.cjs} +1 -1
  186. package/dist/chunk-OZZHOEN5.cjs.map +1 -0
  187. package/dist/{chunk-6P4WYB3B.js → chunk-P2GCAVUZ.js} +2 -2
  188. package/dist/chunk-P2GCAVUZ.js.map +1 -0
  189. package/dist/{chunk-L3UPSLJ5.cjs → chunk-PA4IT2XQ.cjs} +19 -19
  190. package/dist/chunk-PA4IT2XQ.cjs.map +1 -0
  191. package/dist/{chunk-N7HX5635.cjs → chunk-PJC7NZUV.cjs} +3 -3
  192. package/dist/chunk-PJC7NZUV.cjs.map +1 -0
  193. package/dist/{chunk-QP2A5ZMK.cjs → chunk-PTBBY4ZX.cjs} +1 -1
  194. package/dist/chunk-PTBBY4ZX.cjs.map +1 -0
  195. package/dist/{chunk-VFYG7GAH.js → chunk-PY2376XI.js} +2 -2
  196. package/dist/chunk-PY2376XI.js.map +1 -0
  197. package/dist/{chunk-R5UNLPQZ.cjs → chunk-Q3GNKF74.cjs} +1 -1
  198. package/dist/chunk-Q3GNKF74.cjs.map +1 -0
  199. package/dist/{chunk-YLKESEHQ.cjs → chunk-QF2RAUPB.cjs} +1 -1
  200. package/dist/chunk-QF2RAUPB.cjs.map +1 -0
  201. package/dist/{chunk-2HTBZGBP.cjs → chunk-QQIALSTX.cjs} +1 -1
  202. package/dist/chunk-QQIALSTX.cjs.map +1 -0
  203. package/dist/{chunk-6HGDQ4BM.js → chunk-S2EICHZK.js} +13 -13
  204. package/dist/chunk-S2EICHZK.js.map +1 -0
  205. package/dist/{chunk-5QG2I3FK.cjs → chunk-S77GR5YQ.cjs} +3 -3
  206. package/dist/chunk-S77GR5YQ.cjs.map +1 -0
  207. package/dist/{chunk-YCUT6NQ4.js → chunk-S7TWEVC3.js} +2 -2
  208. package/dist/chunk-S7TWEVC3.js.map +1 -0
  209. package/dist/{chunk-2JWY36LD.cjs → chunk-SDEKANNL.cjs} +1 -1
  210. package/dist/chunk-SDEKANNL.cjs.map +1 -0
  211. package/dist/{chunk-RSBQNIJZ.js → chunk-SENVA467.js} +1 -1
  212. package/dist/chunk-SENVA467.js.map +1 -0
  213. package/dist/chunk-SJDTFR3I.cjs.map +1 -1
  214. package/dist/chunk-SWPZ3HFY.cjs.map +1 -1
  215. package/dist/{chunk-R36SGSJX.cjs → chunk-TROYIUDH.cjs} +1 -1
  216. package/dist/chunk-TROYIUDH.cjs.map +1 -0
  217. package/dist/{chunk-3KAR5KCS.cjs → chunk-UGMONQGH.cjs} +11 -11
  218. package/dist/chunk-UGMONQGH.cjs.map +1 -0
  219. package/dist/{chunk-CKH36D7H.js → chunk-UTUPJOBY.js} +1 -1
  220. package/dist/chunk-UTUPJOBY.js.map +1 -0
  221. package/dist/{chunk-63N2KZZX.cjs → chunk-V2S6XWIQ.cjs} +1 -1
  222. package/dist/chunk-V2S6XWIQ.cjs.map +1 -0
  223. package/dist/{chunk-G36S5CWN.cjs → chunk-V5RS3JZN.cjs} +1 -1
  224. package/dist/chunk-V5RS3JZN.cjs.map +1 -0
  225. package/dist/chunk-VW32UTUE.cjs.map +1 -1
  226. package/dist/{chunk-4NUZP66U.js → chunk-VZYLJSV5.js} +3 -3
  227. package/dist/chunk-VZYLJSV5.js.map +1 -0
  228. package/dist/{chunk-GOVOQZYN.js → chunk-W2F6WDUX.js} +1 -1
  229. package/dist/chunk-W2F6WDUX.js.map +1 -0
  230. package/dist/{chunk-XMRMCWSQ.js → chunk-W3X3V72Q.js} +3 -3
  231. package/dist/chunk-W3X3V72Q.js.map +1 -0
  232. package/dist/{chunk-AUFCW7QU.cjs → chunk-W6IKHJ76.cjs} +3 -3
  233. package/dist/chunk-W6IKHJ76.cjs.map +1 -0
  234. package/dist/{chunk-A35Y5MRJ.js → chunk-WE5FTQGD.js} +3 -3
  235. package/dist/chunk-WE5FTQGD.js.map +1 -0
  236. package/dist/{chunk-FO5FNTJX.js → chunk-WIE7HDIM.js} +3 -3
  237. package/dist/chunk-WIE7HDIM.js.map +1 -0
  238. package/dist/{chunk-YZOVF7JV.cjs → chunk-WPTMMOA6.cjs} +9 -9
  239. package/dist/chunk-WPTMMOA6.cjs.map +1 -0
  240. package/dist/{chunk-HUNMRKGE.js → chunk-WTXASLBB.js} +2 -2
  241. package/dist/chunk-WTXASLBB.js.map +1 -0
  242. package/dist/chunk-XJAXKENE.cjs.map +1 -1
  243. package/dist/{chunk-TCX3QKF3.js → chunk-XJBWFDDE.js} +1 -1
  244. package/dist/chunk-XJBWFDDE.js.map +1 -0
  245. package/dist/{chunk-IYQX7PBO.cjs → chunk-XKQMEVOD.cjs} +1 -1
  246. package/dist/chunk-XKQMEVOD.cjs.map +1 -0
  247. package/dist/{chunk-KQKJVFYF.js → chunk-YQLCPKGV.js} +1 -1
  248. package/dist/chunk-YQLCPKGV.js.map +1 -0
  249. package/dist/{chunk-GI7WPGP2.cjs → chunk-YRK56AOP.cjs} +5 -5
  250. package/dist/chunk-YRK56AOP.cjs.map +1 -0
  251. package/dist/{chunk-H523JFY2.js → chunk-YV57RSPD.js} +1 -1
  252. package/dist/chunk-YV57RSPD.js.map +1 -0
  253. package/dist/{chunk-JORQYNJD.js → chunk-Z4ZY7L7W.js} +3 -3
  254. package/dist/chunk-Z4ZY7L7W.js.map +1 -0
  255. package/dist/{chunk-R5QPUQSI.cjs → chunk-Z5U4NJTW.cjs} +1 -1
  256. package/dist/chunk-Z5U4NJTW.cjs.map +1 -0
  257. package/dist/{chunk-5D3LIJYW.cjs → chunk-ZBKJ3EMK.cjs} +5 -5
  258. package/dist/chunk-ZBKJ3EMK.cjs.map +1 -0
  259. package/dist/{chunk-K5TKNT6I.cjs → chunk-ZMDZGL5A.cjs} +1 -1
  260. package/dist/chunk-ZMDZGL5A.cjs.map +1 -0
  261. package/dist/{chunk-OVYIBDGE.js → chunk-ZZSPQFMX.js} +1 -1
  262. package/dist/chunk-ZZSPQFMX.js.map +1 -0
  263. package/dist/color-picker/index.cjs +3 -3
  264. package/dist/color-picker/index.cjs.map +1 -1
  265. package/dist/color-picker/index.js +2 -2
  266. package/dist/combobox/index.cjs +6 -6
  267. package/dist/combobox/index.cjs.map +1 -1
  268. package/dist/combobox/index.js +5 -5
  269. package/dist/command-palette/index.cjs +3 -3
  270. package/dist/command-palette/index.cjs.map +1 -1
  271. package/dist/command-palette/index.js +2 -2
  272. package/dist/context-menu/index.cjs +7 -7
  273. package/dist/context-menu/index.cjs.map +1 -1
  274. package/dist/context-menu/index.js +6 -6
  275. package/dist/data-grid/index.cjs +17 -17
  276. package/dist/data-grid/index.cjs.map +1 -1
  277. package/dist/data-grid/index.js +16 -16
  278. package/dist/date-picker/index.cjs +8 -8
  279. package/dist/date-picker/index.cjs.map +1 -1
  280. package/dist/date-picker/index.js +7 -7
  281. package/dist/divider/index.cjs +2 -2
  282. package/dist/divider/index.cjs.map +1 -1
  283. package/dist/divider/index.js +1 -1
  284. package/dist/drawer/index.cjs +5 -5
  285. package/dist/drawer/index.cjs.map +1 -1
  286. package/dist/drawer/index.js +4 -4
  287. package/dist/dropdown/index.cjs +2 -2
  288. package/dist/dropdown/index.cjs.map +1 -1
  289. package/dist/dropdown/index.js +1 -1
  290. package/dist/empty-state/index.cjs +2 -2
  291. package/dist/empty-state/index.cjs.map +1 -1
  292. package/dist/empty-state/index.js +1 -1
  293. package/dist/file-upload/index.cjs +2 -2
  294. package/dist/file-upload/index.cjs.map +1 -1
  295. package/dist/file-upload/index.js +1 -1
  296. package/dist/footer/index.cjs +2 -2
  297. package/dist/footer/index.cjs.map +1 -1
  298. package/dist/footer/index.js +1 -1
  299. package/dist/header/index.cjs +5 -5
  300. package/dist/header/index.cjs.map +1 -1
  301. package/dist/header/index.js +4 -4
  302. package/dist/index.cjs +56 -56
  303. package/dist/index.cjs.map +1 -1
  304. package/dist/index.js +55 -55
  305. package/dist/inline-edit/index.cjs +5 -5
  306. package/dist/inline-edit/index.cjs.map +1 -1
  307. package/dist/inline-edit/index.js +4 -4
  308. package/dist/input/index.cjs +4 -4
  309. package/dist/input/index.cjs.map +1 -1
  310. package/dist/input/index.js +3 -3
  311. package/dist/kbd/index.cjs +2 -2
  312. package/dist/kbd/index.cjs.map +1 -1
  313. package/dist/kbd/index.js +1 -1
  314. package/dist/menu/index.cjs +6 -6
  315. package/dist/menu/index.cjs.map +1 -1
  316. package/dist/menu/index.js +5 -5
  317. package/dist/modal/index.cjs +5 -5
  318. package/dist/modal/index.cjs.map +1 -1
  319. package/dist/modal/index.js +4 -4
  320. package/dist/navigation/index.cjs +6 -6
  321. package/dist/navigation/index.cjs.map +1 -1
  322. package/dist/navigation/index.js +5 -5
  323. package/dist/number-input/index.cjs +2 -2
  324. package/dist/number-input/index.cjs.map +1 -1
  325. package/dist/number-input/index.js +1 -1
  326. package/dist/o-t-p-input/index.cjs +2 -2
  327. package/dist/o-t-p-input/index.cjs.map +1 -1
  328. package/dist/o-t-p-input/index.js +1 -1
  329. package/dist/page-layout/index.cjs +15 -15
  330. package/dist/page-layout/index.cjs.map +1 -1
  331. package/dist/page-layout/index.js +14 -14
  332. package/dist/pagination/index.cjs +8 -8
  333. package/dist/pagination/index.cjs.map +1 -1
  334. package/dist/pagination/index.js +7 -7
  335. package/dist/pill/index.cjs.map +1 -1
  336. package/dist/popover/index.cjs +2 -2
  337. package/dist/popover/index.cjs.map +1 -1
  338. package/dist/popover/index.js +1 -1
  339. package/dist/progress/index.cjs +2 -2
  340. package/dist/progress/index.cjs.map +1 -1
  341. package/dist/progress/index.js +1 -1
  342. package/dist/radio/index.cjs +2 -2
  343. package/dist/radio/index.cjs.map +1 -1
  344. package/dist/radio/index.js +1 -1
  345. package/dist/segmented-control/index.cjs +4 -4
  346. package/dist/segmented-control/index.cjs.map +1 -1
  347. package/dist/segmented-control/index.js +3 -3
  348. package/dist/select/index.cjs +6 -6
  349. package/dist/select/index.cjs.map +1 -1
  350. package/dist/select/index.js +5 -5
  351. package/dist/skeleton/index.cjs +2 -2
  352. package/dist/skeleton/index.cjs.map +1 -1
  353. package/dist/skeleton/index.js +1 -1
  354. package/dist/slider/index.cjs +2 -2
  355. package/dist/slider/index.cjs.map +1 -1
  356. package/dist/slider/index.js +1 -1
  357. package/dist/snackbar/index.cjs +5 -5
  358. package/dist/snackbar/index.cjs.map +1 -1
  359. package/dist/snackbar/index.js +4 -4
  360. package/dist/spinner/index.cjs +2 -2
  361. package/dist/spinner/index.cjs.map +1 -1
  362. package/dist/spinner/index.js +1 -1
  363. package/dist/split-button/index.cjs +7 -7
  364. package/dist/split-button/index.cjs.map +1 -1
  365. package/dist/split-button/index.js +6 -6
  366. package/dist/stepper/index.cjs +2 -2
  367. package/dist/stepper/index.cjs.map +1 -1
  368. package/dist/stepper/index.js +1 -1
  369. package/dist/switch/index.cjs +2 -2
  370. package/dist/switch/index.cjs.map +1 -1
  371. package/dist/switch/index.js +1 -1
  372. package/dist/table/index.cjs +17 -17
  373. package/dist/table/index.cjs.map +1 -1
  374. package/dist/table/index.js +16 -16
  375. package/dist/tabs/index.cjs +3 -3
  376. package/dist/tabs/index.cjs.map +1 -1
  377. package/dist/tabs/index.js +2 -2
  378. package/dist/tag-input/index.cjs +6 -6
  379. package/dist/tag-input/index.cjs.map +1 -1
  380. package/dist/tag-input/index.js +5 -5
  381. package/dist/textarea/index.cjs +4 -4
  382. package/dist/textarea/index.cjs.map +1 -1
  383. package/dist/textarea/index.js +3 -3
  384. package/dist/timeline/index.cjs +2 -2
  385. package/dist/timeline/index.cjs.map +1 -1
  386. package/dist/timeline/index.js +1 -1
  387. package/dist/toolbar/index.cjs +11 -11
  388. package/dist/toolbar/index.cjs.map +1 -1
  389. package/dist/toolbar/index.js +10 -10
  390. package/dist/tooltip/index.cjs +2 -2
  391. package/dist/tooltip/index.cjs.map +1 -1
  392. package/dist/tooltip/index.js +1 -1
  393. package/dist/tree-view/index.cjs +2 -2
  394. package/dist/tree-view/index.cjs.map +1 -1
  395. package/dist/tree-view/index.js +1 -1
  396. package/dist/virtual-list/index.cjs +3 -3
  397. package/dist/virtual-list/index.cjs.map +1 -1
  398. package/dist/virtual-list/index.js +2 -2
  399. package/package.json +114 -110
  400. package/dist/chunk-2HTBZGBP.cjs.map +0 -1
  401. package/dist/chunk-2JWY36LD.cjs.map +0 -1
  402. package/dist/chunk-2YQE26EK.js.map +0 -1
  403. package/dist/chunk-2ZWBN3LK.cjs.map +0 -1
  404. package/dist/chunk-3KAR5KCS.cjs.map +0 -1
  405. package/dist/chunk-3YPTYI7R.js.map +0 -1
  406. package/dist/chunk-4NUZP66U.js.map +0 -1
  407. package/dist/chunk-5D3LIJYW.cjs.map +0 -1
  408. package/dist/chunk-5QG2I3FK.cjs.map +0 -1
  409. package/dist/chunk-5TGBNYZK.cjs.map +0 -1
  410. package/dist/chunk-63N2KZZX.cjs.map +0 -1
  411. package/dist/chunk-6GAIQ2IY.cjs.map +0 -1
  412. package/dist/chunk-6HGDQ4BM.js.map +0 -1
  413. package/dist/chunk-6P4WYB3B.js.map +0 -1
  414. package/dist/chunk-6QFT3BUD.cjs.map +0 -1
  415. package/dist/chunk-6USUVU6J.js.map +0 -1
  416. package/dist/chunk-73EKJU4G.js.map +0 -1
  417. package/dist/chunk-7IOOFKG3.js.map +0 -1
  418. package/dist/chunk-7KGV6YCG.cjs.map +0 -1
  419. package/dist/chunk-7R7IFWGB.cjs.map +0 -1
  420. package/dist/chunk-A35Y5MRJ.js.map +0 -1
  421. package/dist/chunk-AOV32YBE.js.map +0 -1
  422. package/dist/chunk-AUFCW7QU.cjs.map +0 -1
  423. package/dist/chunk-BBOUUHLO.js.map +0 -1
  424. package/dist/chunk-BFYSYUA6.cjs.map +0 -1
  425. package/dist/chunk-BTPCSBGP.js.map +0 -1
  426. package/dist/chunk-C7F2VFAI.cjs.map +0 -1
  427. package/dist/chunk-CDV2OAS3.cjs.map +0 -1
  428. package/dist/chunk-CJUZDUXW.cjs.map +0 -1
  429. package/dist/chunk-CKH36D7H.js.map +0 -1
  430. package/dist/chunk-D7PGZ3M3.cjs.map +0 -1
  431. package/dist/chunk-DFADZZ3K.js.map +0 -1
  432. package/dist/chunk-DK4S3EHG.js.map +0 -1
  433. package/dist/chunk-E2B33QB7.js.map +0 -1
  434. package/dist/chunk-E3XATJ63.js.map +0 -1
  435. package/dist/chunk-F54MVGKO.js.map +0 -1
  436. package/dist/chunk-FNUOTM44.cjs.map +0 -1
  437. package/dist/chunk-FO5FNTJX.js.map +0 -1
  438. package/dist/chunk-G2FANEA2.cjs.map +0 -1
  439. package/dist/chunk-G36S5CWN.cjs.map +0 -1
  440. package/dist/chunk-GI7WPGP2.cjs.map +0 -1
  441. package/dist/chunk-GL4DHGQE.js.map +0 -1
  442. package/dist/chunk-GOVOQZYN.js.map +0 -1
  443. package/dist/chunk-GRH57M3E.js.map +0 -1
  444. package/dist/chunk-H523JFY2.js.map +0 -1
  445. package/dist/chunk-H56YUMFB.cjs.map +0 -1
  446. package/dist/chunk-HO7P6IJO.js.map +0 -1
  447. package/dist/chunk-HQ4KZRFH.js.map +0 -1
  448. package/dist/chunk-HUNMRKGE.js.map +0 -1
  449. package/dist/chunk-ICHPPNFV.js.map +0 -1
  450. package/dist/chunk-ICJ3SV5I.cjs.map +0 -1
  451. package/dist/chunk-IYQX7PBO.cjs.map +0 -1
  452. package/dist/chunk-JFA5ABVE.js.map +0 -1
  453. package/dist/chunk-JORQYNJD.js.map +0 -1
  454. package/dist/chunk-K5TKNT6I.cjs.map +0 -1
  455. package/dist/chunk-KF64C4QI.js.map +0 -1
  456. package/dist/chunk-KKOZX64Z.js.map +0 -1
  457. package/dist/chunk-KO2MKZDW.cjs.map +0 -1
  458. package/dist/chunk-KQKJVFYF.js.map +0 -1
  459. package/dist/chunk-KV2FG7AN.cjs.map +0 -1
  460. package/dist/chunk-L3UPSLJ5.cjs.map +0 -1
  461. package/dist/chunk-LEZ4HSBD.cjs.map +0 -1
  462. package/dist/chunk-LQ3C3OR2.js.map +0 -1
  463. package/dist/chunk-LTOHGCU4.cjs.map +0 -1
  464. package/dist/chunk-M56IGNH7.cjs.map +0 -1
  465. package/dist/chunk-N7HX5635.cjs.map +0 -1
  466. package/dist/chunk-NDLMU6HJ.js.map +0 -1
  467. package/dist/chunk-O5ZPSZNY.cjs.map +0 -1
  468. package/dist/chunk-O6B4KB4D.js.map +0 -1
  469. package/dist/chunk-OHUVWPFJ.js.map +0 -1
  470. package/dist/chunk-OT3VZLN4.js.map +0 -1
  471. package/dist/chunk-OVYIBDGE.js.map +0 -1
  472. package/dist/chunk-P2BTQ33C.cjs.map +0 -1
  473. package/dist/chunk-P6ZBENAG.js.map +0 -1
  474. package/dist/chunk-P74HNSNJ.cjs.map +0 -1
  475. package/dist/chunk-PEPYVWGY.cjs.map +0 -1
  476. package/dist/chunk-POX6JZLO.cjs.map +0 -1
  477. package/dist/chunk-PWIA4XQD.js.map +0 -1
  478. package/dist/chunk-QGZF5MOS.cjs.map +0 -1
  479. package/dist/chunk-QP2A5ZMK.cjs.map +0 -1
  480. package/dist/chunk-QYHTMEI5.js.map +0 -1
  481. package/dist/chunk-QYK4ECSZ.js.map +0 -1
  482. package/dist/chunk-R36SGSJX.cjs.map +0 -1
  483. package/dist/chunk-R5QPUQSI.cjs.map +0 -1
  484. package/dist/chunk-R5UNLPQZ.cjs.map +0 -1
  485. package/dist/chunk-RSBQNIJZ.js.map +0 -1
  486. package/dist/chunk-S25WB7KJ.js.map +0 -1
  487. package/dist/chunk-SAFSEXMU.cjs.map +0 -1
  488. package/dist/chunk-SOGUWOSQ.cjs.map +0 -1
  489. package/dist/chunk-SXF3TCYA.js.map +0 -1
  490. package/dist/chunk-T56K5IKQ.js.map +0 -1
  491. package/dist/chunk-TBMVUI7S.cjs.map +0 -1
  492. package/dist/chunk-TCX3QKF3.js.map +0 -1
  493. package/dist/chunk-TQCNQKWF.cjs.map +0 -1
  494. package/dist/chunk-UTENJWSE.cjs.map +0 -1
  495. package/dist/chunk-V5JNYS77.cjs.map +0 -1
  496. package/dist/chunk-VFYG7GAH.js.map +0 -1
  497. package/dist/chunk-VLC2OZV3.cjs.map +0 -1
  498. package/dist/chunk-VTAABT55.js.map +0 -1
  499. package/dist/chunk-VYV45YOK.cjs.map +0 -1
  500. package/dist/chunk-VZ43OLU6.cjs.map +0 -1
  501. package/dist/chunk-XJBMEDQ5.js.map +0 -1
  502. package/dist/chunk-XMRMCWSQ.js.map +0 -1
  503. package/dist/chunk-XSGUFMT4.js.map +0 -1
  504. package/dist/chunk-YCUT6NQ4.js.map +0 -1
  505. package/dist/chunk-YKECQKOV.cjs.map +0 -1
  506. package/dist/chunk-YLKESEHQ.cjs.map +0 -1
  507. package/dist/chunk-YZOVF7JV.cjs.map +0 -1
  508. package/dist/chunk-Z7S4UQKY.js.map +0 -1
  509. package/dist/chunk-ZBGTVTQJ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-V5JNYS77.cjs","../src/components/EmptyState/EmptyState.component.tsx"],"names":[],"mappings":"AAAA;ACgBa,+CAAA;AAbN,IAAM,WAAA,EAAwC,CAAC;AAAA,EACpD,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,EAAO,IAAA;AAAA,EACP,UAAA,EAAY;AACd,CAAA,EAAA,mBACE,8BAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA,EAAW,CAAC,mBAAA,EAAqB,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA;AAI1D,IAAA;AAAuB,MAAA;AAET,sBAAA;AACC,wBAAA;AACe,QAAA;AAC/B,MAAA;AAE0B,MAAA;AAAmC,IAAA;AAAA,EAAA;AAC/D;AAGuB;ADHuC;AACA;AACA;AACA","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-V5JNYS77.cjs","sourcesContent":[null,"import React from 'react';\r\nimport type { EmptyStateProps } from './EmptyState.types';\r\n\r\nexport const EmptyState: React.FC<EmptyStateProps> = ({\r\n icon,\r\n title,\r\n description,\r\n action,\r\n size = 'md',\r\n className = '',\r\n}) => (\r\n <div\r\n className={['eidos-empty-state', `eidos-empty-state--${size}`, className]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n {icon && <div className=\"eidos-empty-state-icon\">{icon}</div>}\r\n\r\n <div className=\"eidos-empty-state-content\">\r\n <h3 className=\"eidos-empty-state-title\">{title}</h3>\r\n {description && <p className=\"eidos-empty-state-description\">{description}</p>}\r\n </div>\r\n\r\n {action && <div className=\"eidos-empty-state-action\">{action}</div>}\r\n </div>\r\n);\r\n\r\nEmptyState.displayName = 'EmptyState';\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/CommandPalette/CommandPalette.component.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { ArrowDown, ArrowUp, Command, CornerDownLeft, Search } from 'lucide-react';\r\nimport type { CommandItem, CommandPaletteProps } from './CommandPalette.types';\r\nimport { Kbd } from '../Kbd';\r\nimport './CommandPalette.scss';\r\n\r\n// ── Constants ──────────────────────────────────────────────────────────────────\r\n\r\n/** Must match the CSS transition duration in CommandPalette.scss */\r\nconst TRANSITION_MS = 200;\r\n\r\n// ── Pure helpers ───────────────────────────────────────────────────────────────\r\n\r\nfunction filterItems(items: CommandItem[], query: string): CommandItem[] {\r\n const q = query.trim().toLowerCase();\r\n if (!q) return items;\r\n return items.filter(({ label, description, keywords }) => {\r\n return (\r\n label.toLowerCase().includes(q) ||\r\n (description?.toLowerCase().includes(q) ?? false) ||\r\n (keywords?.some((k) => k.toLowerCase().includes(q)) ?? false)\r\n );\r\n });\r\n}\r\n\r\ninterface Group {\r\n label: string | null;\r\n items: CommandItem[];\r\n}\r\n\r\n/**\r\n * Groups items while preserving the order in which groups first appear.\r\n * Items with no `group` property are placed in a leading implicit section\r\n * (label: null) so that labelled groups always follow them.\r\n */\r\nfunction buildGroups(items: CommandItem[]): Group[] {\r\n const groups: Group[] = [];\r\n const groupMap = new Map<string, Group>();\r\n\r\n for (const item of items) {\r\n const key = item.group ?? '';\r\n let group = groupMap.get(key);\r\n if (!group) {\r\n group = { label: item.group ?? null, items: [] };\r\n groups.push(group);\r\n groupMap.set(key, group);\r\n }\r\n group.items.push(item);\r\n }\r\n\r\n return groups;\r\n}\r\n\r\n// ── Component ──────────────────────────────────────────────────────────────────\r\n\r\nexport const CommandPalette: React.FC<CommandPaletteProps> = ({\r\n open: openProp,\r\n defaultOpen = false,\r\n onClose,\r\n onOpen,\r\n shortcutKey = 'k',\r\n items,\r\n onSelect,\r\n placeholder = 'Search commands…',\r\n emptyText = 'No commands found',\r\n maxHeight = 360,\r\n className = '',\r\n footer,\r\n trigger,\r\n triggerLabel = 'Search',\r\n}) => {\r\n const dialogId = useId();\r\n const listId = `${dialogId}-list`;\r\n\r\n // ── Controlled / uncontrolled open state ───────────────────────────────────\r\n // Omitting `open` lets the palette own its state entirely, which combined\r\n // with the shortcut listener below means it needs zero external\r\n // useState/useEffect to work. Passing `open` (+ `onClose`, optionally\r\n // `onOpen`) keeps full external control for consumers who need it (syncing\r\n // with a URL, another piece of app state, etc).\r\n const isControlled = openProp !== undefined;\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\r\n const open = isControlled ? (openProp as boolean) : internalOpen;\r\n\r\n const close = useCallback(() => {\r\n if (!isControlled) setInternalOpen(false);\r\n onClose?.();\r\n }, [isControlled, onClose]);\r\n\r\n // Shared \"open\" path - uncontrolled flips the internal state directly;\r\n // controlled defers to `onOpen` since the palette can't change `open`\r\n // itself. Used by both the keyboard shortcut below and the inline\r\n // `trigger`'s click handler.\r\n const openPalette = useCallback(() => {\r\n if (isControlled) {\r\n onOpen?.();\r\n } else {\r\n setInternalOpen(true);\r\n }\r\n }, [isControlled, onOpen]);\r\n\r\n // Global keyboard shortcut - Cmd/Ctrl+<shortcutKey> opens the palette.\r\n useEffect(() => {\r\n if (!shortcutKey) return;\r\n\r\n const handler = (e: KeyboardEvent) => {\r\n if (!(e.metaKey || e.ctrlKey) || e.key.toLowerCase() !== shortcutKey.toLowerCase()) return;\r\n e.preventDefault();\r\n openPalette();\r\n };\r\n\r\n window.addEventListener('keydown', handler);\r\n return () => window.removeEventListener('keydown', handler);\r\n }, [shortcutKey, openPalette]);\r\n\r\n // ── Animation state machine (mirrors the Drawer pattern) ─────────────────\r\n // isMounted → portal exists in the DOM (controls render/null)\r\n // isVisible → CSS --visible modifier is applied (drives transitions)\r\n //\r\n // Opening: isMounted=true → double rAF → isVisible=true → CSS transitions fire\r\n // Closing: isVisible=false → CSS transitions reverse → after TRANSITION_MS → isMounted=false\r\n const [isMounted, setIsMounted] = useState(open);\r\n const [isVisible, setIsVisible] = useState(open);\r\n\r\n useEffect(() => {\r\n let raf1 = 0;\r\n let raf2 = 0;\r\n let timerId: ReturnType<typeof setTimeout>;\r\n\r\n if (open) {\r\n setIsMounted(true);\r\n // Double rAF: ensures the browser has painted the initial off-screen\r\n // state before the CSS transition begins (React 18 automatic batching\r\n // means a single rAF is not always sufficient).\r\n raf1 = requestAnimationFrame(() => {\r\n raf2 = requestAnimationFrame(() => setIsVisible(true));\r\n });\r\n } else {\r\n setIsVisible(false);\r\n timerId = setTimeout(() => setIsMounted(false), TRANSITION_MS);\r\n }\r\n\r\n return () => {\r\n cancelAnimationFrame(raf1);\r\n cancelAnimationFrame(raf2);\r\n clearTimeout(timerId);\r\n };\r\n }, [open]);\r\n\r\n // ── Search state ───────────────────────────────────────────────────────────\r\n const [query, setQuery] = useState('');\r\n const [focusedIndex, setFocusedIndex] = useState(0);\r\n\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const itemRefs = useRef<Map<string, HTMLDivElement>>(new Map());\r\n\r\n // Derived lists - memoised to stabilise scroll-effect deps\r\n const filtered = useMemo(() => filterItems(items, query), [items, query]);\r\n const navigable = useMemo(() => filtered.filter((item) => !item.disabled), [filtered]);\r\n const groups = useMemo(() => buildGroups(filtered), [filtered]);\r\n\r\n // Reset search query and selection when the palette is opened\r\n useEffect(() => {\r\n if (open) {\r\n setQuery('');\r\n setFocusedIndex(0);\r\n }\r\n }, [open]);\r\n\r\n // Auto-focus the search input after the entry animation begins\r\n useEffect(() => {\r\n if (isVisible) {\r\n inputRef.current?.focus();\r\n }\r\n }, [isVisible]);\r\n\r\n // Reset focused index to 0 whenever the filtered list changes\r\n useEffect(() => {\r\n setFocusedIndex(0);\r\n }, [query]);\r\n\r\n // Scroll the focused item into view during keyboard navigation\r\n useEffect(() => {\r\n const focusedItem = navigable[focusedIndex];\r\n if (!focusedItem) return;\r\n itemRefs.current.get(focusedItem.id)?.scrollIntoView({ block: 'nearest' });\r\n }, [focusedIndex, navigable]);\r\n\r\n // Body scroll lock (tied to open, not to isMounted, so it releases promptly\r\n // when the consumer decides to close - even before the exit animation ends)\r\n useEffect(() => {\r\n if (open) {\r\n document.body.style.overflow = 'hidden';\r\n }\r\n return () => {\r\n document.body.style.overflow = '';\r\n };\r\n }, [open]);\r\n\r\n // ── Interaction handlers ───────────────────────────────────────────────────\r\n\r\n const selectItem = useCallback(\r\n (item: CommandItem) => {\r\n if (item.disabled) return;\r\n item.action?.();\r\n onSelect?.(item);\r\n close();\r\n },\r\n [close, onSelect],\r\n );\r\n\r\n const handleKeyDown = useCallback(\r\n (e: React.KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'ArrowDown': {\r\n e.preventDefault();\r\n if (navigable.length === 0) return;\r\n setFocusedIndex((i) => (i + 1) % navigable.length);\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n e.preventDefault();\r\n if (navigable.length === 0) return;\r\n setFocusedIndex((i) => (i - 1 + navigable.length) % navigable.length);\r\n break;\r\n }\r\n case 'Enter': {\r\n e.preventDefault();\r\n const item = navigable[focusedIndex];\r\n if (item) selectItem(item);\r\n break;\r\n }\r\n case 'Escape': {\r\n e.preventDefault();\r\n close();\r\n break;\r\n }\r\n }\r\n },\r\n [focusedIndex, navigable, close, selectItem],\r\n );\r\n\r\n const handleBackdropClick = useCallback(\r\n (e: React.MouseEvent<HTMLDivElement>) => {\r\n // Only fire when the click lands directly on the backdrop element,\r\n // not on any child (the dialog itself or its contents).\r\n if (e.target === e.currentTarget) {\r\n close();\r\n }\r\n },\r\n [close],\r\n );\r\n\r\n // ── Render ─────────────────────────────────────────────────────────────────\r\n\r\n // The inline trigger (if any) must render regardless of `isMounted` - it's\r\n // what opens the palette in the first place, so it can't be gated behind\r\n // the portal's own mount state.\r\n const triggerNode =\r\n trigger === true ? (\r\n <button type=\"button\" className=\"eidos-cmd-trigger-default\" onClick={openPalette}>\r\n <span>{triggerLabel}</span>\r\n {shortcutKey && (\r\n <Kbd size=\"sm\" className=\"eidos-cmd-trigger-kbd\">\r\n <Command size={10} />\r\n {shortcutKey.toUpperCase()}\r\n </Kbd>\r\n )}\r\n </button>\r\n ) : trigger ? (\r\n <div className=\"eidos-cmd-trigger\" role=\"button\" tabIndex={0} onClick={openPalette}>\r\n {trigger}\r\n </div>\r\n ) : null;\r\n\r\n if (!isMounted) return triggerNode;\r\n\r\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\r\n\r\n return (\r\n <>\r\n {triggerNode}\r\n {createPortal(\r\n <div\r\n className={['eidos-cmd-backdrop', isVisible && 'eidos-cmd-backdrop--visible']\r\n .filter(Boolean)\r\n .join(' ')}\r\n onClick={handleBackdropClick}\r\n aria-hidden={!open}\r\n >\r\n <div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label=\"Command palette\"\r\n id={dialogId}\r\n className={['eidos-cmd-dialog', isVisible && 'eidos-cmd-dialog--visible', className]\r\n .filter(Boolean)\r\n .join(' ')}\r\n onKeyDown={handleKeyDown}\r\n >\r\n {/* ── Search ──────────────────────────────────────────────────────── */}\r\n <div className=\"eidos-cmd-search\">\r\n <Search className=\"eidos-cmd-search-icon\" size={18} aria-hidden=\"true\" />\r\n\r\n <input\r\n ref={inputRef}\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-expanded=\"true\"\r\n aria-controls={listId}\r\n aria-autocomplete=\"list\"\r\n aria-label={placeholder}\r\n className=\"eidos-cmd-input\"\r\n placeholder={placeholder}\r\n value={query}\r\n onChange={(e) => setQuery(e.target.value)}\r\n spellCheck={false}\r\n autoComplete=\"off\"\r\n />\r\n\r\n {/* Reminds users of the configured shortcut, if any */}\r\n {shortcutKey && (\r\n <div className=\"eidos-cmd-search-badge\" aria-hidden=\"true\">\r\n <Command size={11} />\r\n <span>{shortcutKey.toUpperCase()}</span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* ── Results list ─────────────────────────────────────────────────── */}\r\n <div\r\n id={listId}\r\n role=\"listbox\"\r\n aria-label=\"Commands\"\r\n className=\"eidos-cmd-list\"\r\n style={{ maxHeight: maxHeightValue }}\r\n >\r\n {filtered.length === 0 ? (\r\n <p className=\"eidos-cmd-empty\" role=\"status\">\r\n {emptyText}\r\n </p>\r\n ) : (\r\n groups.map((group) => (\r\n <div\r\n key={group.label ?? '__ungrouped__'}\r\n role=\"group\"\r\n aria-label={group.label ?? undefined}\r\n >\r\n {group.label && (\r\n <div className=\"eidos-cmd-group-label\" aria-hidden=\"true\">\r\n {group.label}\r\n </div>\r\n )}\r\n\r\n {group.items.map((item) => {\r\n const isFocused = navigable[focusedIndex]?.id === item.id;\r\n const Icon = item.icon;\r\n\r\n return (\r\n <div\r\n key={item.id}\r\n ref={(el) => {\r\n if (el) {\r\n itemRefs.current.set(item.id, el);\r\n } else {\r\n itemRefs.current.delete(item.id);\r\n }\r\n }}\r\n role=\"option\"\r\n aria-selected={isFocused}\r\n aria-disabled={item.disabled}\r\n className={[\r\n 'eidos-cmd-item',\r\n isFocused && 'eidos-cmd-item--focused',\r\n item.disabled && 'eidos-cmd-item--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n onClick={() => selectItem(item)}\r\n onMouseEnter={() => {\r\n if (!item.disabled) {\r\n const idx = navigable.findIndex((n) => n.id === item.id);\r\n if (idx !== -1) setFocusedIndex(idx);\r\n }\r\n }}\r\n >\r\n {Icon && (\r\n <span className=\"eidos-cmd-item-icon\" aria-hidden=\"true\">\r\n <Icon size={16} />\r\n </span>\r\n )}\r\n\r\n <div className=\"eidos-cmd-item-body\">\r\n <div className=\"eidos-cmd-item-label\">{item.label}</div>\r\n {item.description && (\r\n <div className=\"eidos-cmd-item-description\">{item.description}</div>\r\n )}\r\n </div>\r\n\r\n {item.shortcut && item.shortcut.length > 0 && (\r\n <div\r\n className=\"eidos-cmd-item-shortcut\"\r\n aria-label={`Shortcut: ${item.shortcut.join(' ')}`}\r\n >\r\n {item.shortcut.map((key, i) => (\r\n <kbd key={i} className=\"eidos-cmd-kbd\">\r\n {key}\r\n </kbd>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n ))\r\n )}\r\n </div>\r\n\r\n {/* ── Footer ───────────────────────────────────────────────────────── */}\r\n <div className=\"eidos-cmd-footer\">\r\n <div className=\"eidos-cmd-hints\" aria-hidden=\"true\">\r\n <span>\r\n <ArrowUp size={11} />\r\n <ArrowDown size={11} /> Navigate\r\n </span>\r\n <span>\r\n <CornerDownLeft size={11} /> Select\r\n </span>\r\n <span>Esc Close</span>\r\n </div>\r\n\r\n {footer && <div className=\"eidos-cmd-footer-slot\">{footer}</div>}\r\n </div>\r\n </div>\r\n </div>,\r\n document.body,\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nCommandPalette.displayName = 'CommandPalette';\r\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VLC2OZV3.cjs","../src/components/Breadcrumb/Breadcrumb.component.tsx"],"names":[],"mappings":"AAAA;ACwBc,+CAAA;AArBP,IAAM,WAAA,EAAwC,CAAC;AAAA,EACpD,KAAA;AAAA,EACA,UAAA,EAAY,GAAA;AAAA,EACZ,UAAA,EAAY;AACd,CAAA,EAAA,mBACE,6BAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,YAAA,EAAW,YAAA;AAAA,IACX,SAAA,EAAW,CAAC,sBAAA,EAAwB,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,IAEvE,QAAA,kBAAA,6BAAA,IAAC,EAAA,EAAG,SAAA,EAAU,kBAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,EAAA,GAAU;AAC1B,MAAA,MAAM,OAAA,EAAS,MAAA,IAAU,KAAA,CAAM,OAAA,EAAS,CAAA;AAExC,MAAA,uBACE,8BAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAW,CAAC,uBAAA,EAAyB,OAAA,GAAU,gCAAgC,CAAA,CAC5E,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAAA,UAEV,QAAA,EAAA;AAAA,YAAA,OAAA,kBACC,8BAAA,MAAC,EAAA,EAAK,cAAA,EAAa,MAAA,EAAO,SAAA,EAAU,0BAAA,EACjC,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,KAAA,mBAAQ,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,IAAA,CAAK,KAAA,CAAK,CAAA;AAAA,cAChE,IAAA,CAAK;AAAA,YAAA,EAAA,CACR,EAAA,EACE,IAAA,CAAK,KAAA,kBACP,8BAAA,GAAC,EAAA,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,SAAA,EAAU,uBAAA,EAClD,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,KAAA,mBAAQ,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,IAAA,CAAK,KAAA,CAAK,CAAA;AAAA,cAChE,IAAA,CAAK;AAAA,YAAA,EAAA,CACR,EAAA,kBAEA,8BAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,IAAA,CAAK,OAAA;AAAA,gBACd,SAAA,EAAU,qDAAA;AAAA,gBAET,QAAA,EAAA;AAAA,kBAAA,IAAA,CAAK,KAAA,mBAAQ,6BAAA,MAAC,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,IAAA,CAAK,KAAA,CAAK,CAAA;AAAA,kBAChE,IAAA,CAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,YACR,CAAA;AAAA,YAGD,CAAC,OAAA,mBACA,6BAAA,MAAC,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,4BAAA,EAChC,QAAA,EAAA,UAAA,CACH;AAAA,UAAA;AAAA,QAAA,CAAA;AAAA,QA7BG;AAAA,MA+BP,CAAA;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,EAAA;AACF,CAAA;AAGF,UAAA,CAAW,YAAA,EAAc,YAAA;ADXzB;AACA;AACE;AACF,gCAAC","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VLC2OZV3.cjs","sourcesContent":[null,"import React from 'react';\r\nimport type { BreadcrumbProps } from './Breadcrumb.types';\r\n\r\nexport const Breadcrumb: React.FC<BreadcrumbProps> = ({\r\n items,\r\n separator = '/',\r\n className = '',\r\n}) => (\r\n <nav\r\n aria-label=\"Breadcrumb\"\r\n className={['eidos-breadcrumb-nav', className].filter(Boolean).join(' ')}\r\n >\r\n <ol className=\"eidos-breadcrumb\">\r\n {items.map((item, index) => {\r\n const isLast = index === items.length - 1;\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={['eidos-breadcrumb-item', isLast && 'eidos-breadcrumb-item--current']\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n {isLast ? (\r\n <span aria-current=\"page\" className=\"eidos-breadcrumb-current\">\r\n {item.icon && <span className=\"eidos-breadcrumb-icon\">{item.icon}</span>}\r\n {item.label}\r\n </span>\r\n ) : item.href ? (\r\n <a href={item.href} onClick={item.onClick} className=\"eidos-breadcrumb-link\">\r\n {item.icon && <span className=\"eidos-breadcrumb-icon\">{item.icon}</span>}\r\n {item.label}\r\n </a>\r\n ) : (\r\n <button\r\n type=\"button\"\r\n onClick={item.onClick}\r\n className=\"eidos-breadcrumb-link eidos-breadcrumb-link--button\"\r\n >\r\n {item.icon && <span className=\"eidos-breadcrumb-icon\">{item.icon}</span>}\r\n {item.label}\r\n </button>\r\n )}\r\n\r\n {!isLast && (\r\n <span aria-hidden=\"true\" className=\"eidos-breadcrumb-separator\">\r\n {separator}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ol>\r\n </nav>\r\n);\r\n\r\nBreadcrumb.displayName = 'Breadcrumb';\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Toolbar/Toolbar.component.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { ToolbarProps } from './Toolbar.types';\r\nimport './Toolbar.scss';\r\nimport { IconButton } from '../Button';\r\nimport { Breadcrumb } from '../Breadcrumb';\r\nimport { Avatar } from '../Avatar';\r\nimport { Menu } from '../Menu';\r\nimport { CommandPalette } from '../CommandPalette';\r\n\r\nexport const Toolbar: React.FC<ToolbarProps> = ({\r\n breadcrumbs,\r\n actions,\r\n userMenu,\r\n cmdPaletteItems,\r\n className = '',\r\n}) => {\r\n const classes = ['eidos-toolbar', className].filter(Boolean).join(' ');\r\n\r\n return (\r\n <div className={classes}>\r\n {breadcrumbs && <Breadcrumb {...breadcrumbs} />}\r\n <div className=\"eidos-toolbar__content\">\r\n {cmdPaletteItems && cmdPaletteItems.length > 0 && (\r\n <CommandPalette trigger triggerLabel=\"Search\" items={cmdPaletteItems} />\r\n )}\r\n {actions && actions.length > 0 && (\r\n <div className=\"eidos-toolbar__actions\">\r\n {actions.map((action, index) => (\r\n <IconButton key={index} variant=\"text\" size=\"sm\" {...action} />\r\n ))}\r\n </div>\r\n )}\r\n <Menu\r\n trigger={<Avatar name=\"John Doe\" size=\"sm\" color=\"primary\" />}\r\n items={userMenu}\r\n minWidth={220}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBsB,cAChB,YADgB;AAXf,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AACd,MAAM;AACJ,QAAM,UAAU,CAAC,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAErE,SACE,qBAAC,SAAI,WAAW,SACb;AAAA,mBAAe,oBAAC,cAAY,GAAG,aAAa;AAAA,IAC7C,qBAAC,SAAI,WAAU,0BACZ;AAAA,yBAAmB,gBAAgB,SAAS,KAC3C,oBAAC,kBAAe,SAAO,MAAC,cAAa,UAAS,OAAO,iBAAiB;AAAA,MAEvE,WAAW,QAAQ,SAAS,KAC3B,oBAAC,SAAI,WAAU,0BACZ,kBAAQ,IAAI,CAAC,QAAQ,UACpB,oBAAC,cAAuB,SAAQ,QAAO,MAAK,MAAM,GAAG,UAApC,KAA4C,CAC9D,GACH;AAAA,MAEF;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,oBAAC,UAAO,MAAK,YAAW,MAAK,MAAK,OAAM,WAAU;AAAA,UAC3D,OAAO;AAAA,UACP,UAAU;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VYV45YOK.cjs","../node_modules/dayjs/dayjs.min.js","../node_modules/dayjs/plugin/utc.js","../node_modules/dayjs/plugin/timezone.js","../node_modules/dayjs/plugin/weekOfYear.js","../src/components/DatePicker/DatePicker.component.tsx","../src/components/DatePicker/Calendar.component.tsx","../src/components/DatePicker/TimeInput.component.tsx"],"names":["t","e","n","r","i","s","u","a","M","m","f","l","$","y","v","g","D","o","d","c","h","import_dayjs","dayjs","weekOfYear","useCallback","jsx","useState"],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VYV45YOK.cjs","sourcesContent":[null,"!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|YYYY|YY|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),Y=_.prototype;return O.prototype=Y,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){Y[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var r=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),r.call(this,t)};var o=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else o.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s;if(0===u)return this.utc(f);var r=this.clone();if(f)return r.$offset=u,r.$u=!1,r;var o=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(r=this.local().add(u+o,t)).$offset=u,r.$x.$localOffset=o,r};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,r){var o,a=function(t,n,i){void 0===i&&(i={});var r=new Date(t),o=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",r=t+\"|\"+i,o=e[r];return o||(o=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[r]=o),o}(n,i);return o.formatToParts(r)},u=function(e,n){for(var i=a(e,n),o=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(o[c]=parseInt(m,10))}var l=o[3],d=24===l?0:l,h=o[0]+\"-\"+o[1]+\"-\"+o[2]+\" \"+d+\":\"+o[4]+\":\"+o[5]+\":000\",v=+e;return(r.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){if(void 0===t&&(t=o),!this.isValid())return this;var n,i=this.utcOffset(),a=this.toDate(),f=a.toLocaleString(\"en-US\",{timeZone:t}),s=u(+a,t);if(!Number(s))n=this.utcOffset(0,e);else if(n=r(f,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||r.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=r(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},r.tz=function(t,e,n){var i=n&&e,a=n||e||o,f=u(+r(),a);if(\"string\"!=typeof t)return r(t).tz(a);var s=r.utc(t,i).valueOf();if(Number.isNaN(s)){var m=r(NaN);return m.$x.$timezone=a,m}var c=function(t,e,n){var i=t-60*e*1e3,r=u(i,n);if(e===r)return[i,e];var o=u(i-=60*(r-e)*1e3,n);return r===o?[i,r]:[t-60*Math.min(r,o)*1e3,Math.max(r,o)]}(s,f,a),l=c[0],d=c[1],h=r(l).utcOffset(d);return h.$x.$timezone=a,h},r.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},r.tz.setDefault=function(t){o=t}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekOfYear=t()}(this,(function(){\"use strict\";var e=\"week\",t=\"year\";return function(i,n,r){var f=n.prototype;f.week=function(i){if(void 0===i&&(i=null),null!==i)return this.add(7*(i-this.week()),\"day\");var n=this.$locale().yearStart||1;if(11===this.month()&&this.date()>25){var f=r(this).startOf(t).add(1,t).date(n),s=r(this).endOf(e);if(f.isBefore(s))return 1}var a=r(this).startOf(t).date(n).startOf(e).subtract(1,\"millisecond\"),o=this.diff(a,e,!0);return o<0?r(this).startOf(\"week\").week():Math.ceil(o)},f.weeks=function(e){return void 0===e&&(e=null),this.week(e)}}}));","import React, { useState, useCallback, useRef, useMemo } from 'react';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport utc from 'dayjs/plugin/utc';\r\nimport timezone from 'dayjs/plugin/timezone';\r\nimport { Calendar as CalendarIcon, X } from 'lucide-react';\r\nimport { Input } from '../Input/Input.component';\r\nimport { Dropdown } from '../Dropdown/Dropdown.component';\r\nimport { Calendar } from './Calendar.component';\r\nimport { TimeInput } from './TimeInput.component';\r\nimport type {\r\n DatePickerProps,\r\n DateSelectionMode,\r\n DateTimeValue,\r\n TimeValue,\r\n RangeTimeValue,\r\n} from './DatePicker.types';\r\n\r\n// Initialize dayjs plugins\r\ndayjs.extend(utc);\r\ndayjs.extend(timezone);\r\n\r\nexport const DatePicker = <T extends DateSelectionMode = 'single'>({\r\n mode,\r\n value,\r\n onChange,\r\n granularity = 'day',\r\n time = { enabled: false },\r\n calendar = { numberOfCalendars: 2 },\r\n format = {\r\n displayFormat: 'MMM DD, YYYY',\r\n inputFormat: 'YYYY-MM-DD',\r\n timeFormat: 'HH:mm',\r\n timezone: 'UTC',\r\n },\r\n placeholder = 'Select date...',\r\n disabled = false,\r\n required = false,\r\n name,\r\n id,\r\n inputProps = {},\r\n minDate,\r\n maxDate,\r\n disabledDates = [],\r\n disabledDaysOfWeek = [],\r\n className = '',\r\n fullWidth = false,\r\n minWidth,\r\n maxWidth,\r\n minHeight,\r\n maxHeight,\r\n autoWidth = false,\r\n}: DatePickerProps<T>) => {\r\n const [dropdownKey, setDropdownKey] = useState(0);\r\n // Two different, deliberately different, notions of \"timezone\" are in\r\n // play here, matching two genuinely different kinds of value:\r\n //\r\n // - Date-only (time.enabled === false): a pure calendar date has no\r\n // wall-clock moment attached to it, so there's nothing for a timezone\r\n // to sensibly represent. It's anchored to a fixed `pickerTimezone`\r\n // (default UTC) so the same calendar date always serializes to the\r\n // same ISO instant no matter which machine picks it - see\r\n // `composeDateOnly`.\r\n // - Date + time (time.enabled === true): this genuinely represents a\r\n // real-world instant, e.g. a meeting at a specific wall-clock time -\r\n // exactly the case a timezone exists to disambiguate. That instant\r\n // should be computed from *the picking user's own local offset*\r\n // (someone in UTC+3 typing \"15:00\" means 12:00 UTC), and later\r\n // displayed by converting that same UTC instant into *each viewer's\r\n // own* local offset (that same instant shows as \"12:00\" to a UTC+0\r\n // viewer). That's exactly plain, un-anchored dayjs/Date behavior with\r\n // no explicit timezone forcing at all, so this path intentionally\r\n // does not use `pickerTimezone` anywhere.\r\n const pickerTimezone = format.timezone || 'UTC';\r\n // Combines a calendar date (only its Y-M-D is read, so it's timezone-\r\n // agnostic going in) with a start/end-of-day boundary, anchored to\r\n // `pickerTimezone` - only ever used for date-only values.\r\n const composeDateOnly = useCallback(\r\n (date: Dayjs, boundary: 'start' | 'end' = 'start') => {\r\n const anchored = dayjs.tz(date.format('YYYY-MM-DD'), pickerTimezone);\r\n return boundary === 'end' ? anchored.endOf('day') : anchored.startOf('day');\r\n },\r\n [pickerTimezone],\r\n );\r\n // Combines a calendar date with a time-of-day using plain local\r\n // semantics (no timezone forcing) - only ever used for date+time values,\r\n // see the note above.\r\n const composeLocalDateTime = useCallback(\r\n (date: Dayjs, t: TimeValue): Dayjs =>\r\n date\r\n .hour(t.hours)\r\n .minute(t.minutes)\r\n .second(t.seconds || 0),\r\n [],\r\n );\r\n // Re-anchors an already-stored ISO instant's calendar day (read in the\r\n // browser's own local timezone, matching how it was written) onto a new\r\n // time-of-day - used when the user edits a TimeInput without re-picking\r\n // the date, so that edit actually changes the returned value instead of\r\n // only updating the separate `value.time` field alongside an unchanged\r\n // `value.date`. Deliberately local, not anchored to `pickerTimezone` -\r\n // see the note above.\r\n const recomposeIsoWithTime = useCallback(\r\n (isoString: string, t: TimeValue): string =>\r\n dayjs(isoString)\r\n .hour(t.hours)\r\n .minute(t.minutes)\r\n .second(t.seconds || 0)\r\n .toISOString(),\r\n [],\r\n );\r\n // Month granularity always shows a single year/month grid - side-by-side\r\n // \"next month\" calendars don't make sense once there are no day cells.\r\n const numberOfCalendars = granularity === 'month' ? 1 : calendar.numberOfCalendars || 2;\r\n const independentCalendars = calendar.independent ?? false;\r\n // One entry per visible calendar. In the default (non-independent) mode\r\n // these always stay consecutive months, kept in sync from a single shared\r\n // control (see `handleCalendarMonthChange`) - the array shape is the same\r\n // either way, only how a change to one entry propagates differs.\r\n const [calendarDates, setCalendarDates] = useState<Dayjs[]>(() =>\r\n Array.from({ length: numberOfCalendars }, (_, i) => dayjs().add(i, 'month')),\r\n );\r\n const handleCalendarMonthChange = useCallback(\r\n (index: number, newDate: Dayjs) => {\r\n if (!independentCalendars) {\r\n // Coupled: every calendar shifts together, re-anchored so `index`\r\n // lands on `newDate` - e.g. moving calendar 1 to November re-anchors\r\n // calendar 0 to October, same as before this was array-based.\r\n const anchor = newDate.subtract(index, 'month');\r\n setCalendarDates(\r\n Array.from({ length: numberOfCalendars }, (_, i) => anchor.add(i, 'month')),\r\n );\r\n return;\r\n }\r\n\r\n // Independent: only this calendar moves, clamped so it can never reach\r\n // or cross an immediate neighbor's month - two calendars both landing\r\n // on (or swapping past) the same month would be exactly the confusing\r\n // state independent mode exists to let users avoid, just self-inflicted\r\n // instead of automatic.\r\n setCalendarDates((prev) => {\r\n const next = [...prev];\r\n let clamped = newDate;\r\n const left = prev[index - 1];\r\n const right = prev[index + 1];\r\n if (left && !clamped.isAfter(left, 'month')) {\r\n clamped = left.add(1, 'month');\r\n }\r\n if (right && !clamped.isBefore(right, 'month')) {\r\n clamped = right.subtract(1, 'month');\r\n }\r\n next[index] = clamped;\r\n return next;\r\n });\r\n },\r\n [independentCalendars, numberOfCalendars],\r\n );\r\n const triggerRef = useRef<HTMLDivElement>(null);\r\n\r\n // Convert the string-based constraint props to the Dayjs objects Calendar\r\n // actually consumes for its `isBefore`/`isAfter`/`isSame` comparisons.\r\n const minDateObj = useMemo(() => (minDate ? dayjs(minDate) : undefined), [minDate]);\r\n const maxDateObj = useMemo(() => (maxDate ? dayjs(maxDate) : undefined), [maxDate]);\r\n const disabledDatesObj = useMemo(() => disabledDates.map((d) => dayjs(d)), [disabledDates]);\r\n\r\n // Default time values\r\n const defaultStartTime = useMemo<TimeValue>(() => ({ hours: 0, minutes: 0, seconds: 0 }), []);\r\n const defaultEndTime = useMemo<TimeValue>(() => ({ hours: 23, minutes: 59, seconds: 59 }), []);\r\n\r\n // Helper function to convert stored ISO strings back to the calendar date\r\n // they represent, for calendar-grid display (which day to highlight).\r\n const toLocalDateString = useCallback(\r\n (isoString: string | null): string | null => {\r\n if (!isoString) return null;\r\n const parsed = dayjs(isoString);\r\n // Date-only values were anchored to `pickerTimezone` when stored (see\r\n // `composeDateOnly`) - reading them back via the browser's ambient\r\n // timezone instead would recover the wrong calendar day for anyone\r\n // not in that same timezone. Date+time values were deliberately\r\n // never anchored (see the note above `pickerTimezone`), so they stay\r\n // on local interpretation, matching how they were written.\r\n return (time.enabled ? parsed : parsed.tz(pickerTimezone)).format('YYYY-MM-DD');\r\n },\r\n [time.enabled, pickerTimezone],\r\n );\r\n\r\n // Convert current value to calendar-compatible format\r\n const { selectedDates, rangeStart, rangeEnd } = useMemo(() => {\r\n if (!value?.date) {\r\n return { selectedDates: [], rangeStart: null, rangeEnd: null };\r\n }\r\n\r\n switch (mode) {\r\n case 'single': {\r\n const isoString = value.date as string | null;\r\n const localDateStr = toLocalDateString(isoString);\r\n return {\r\n selectedDates: localDateStr ? [dayjs(localDateStr)] : [],\r\n rangeStart: null,\r\n rangeEnd: null,\r\n };\r\n }\r\n case 'multiple': {\r\n const isoStrings = value.date as string[];\r\n const localDateStrings = isoStrings\r\n .map((d) => toLocalDateString(d))\r\n .filter(Boolean) as string[];\r\n return {\r\n selectedDates: localDateStrings.map((d) => dayjs(d)),\r\n rangeStart: null,\r\n rangeEnd: null,\r\n };\r\n }\r\n case 'range': {\r\n const range = value.date as { start: string | null; end: string | null };\r\n const startStr = toLocalDateString(range.start);\r\n const endStr = toLocalDateString(range.end);\r\n return {\r\n selectedDates: [],\r\n rangeStart: startStr ? dayjs(startStr) : null,\r\n rangeEnd: endStr ? dayjs(endStr) : null,\r\n };\r\n }\r\n default:\r\n return { selectedDates: [], rangeStart: null, rangeEnd: null };\r\n }\r\n }, [value, mode, toLocalDateString]);\r\n\r\n // Handle date selection from calendar - always return ISO strings. Uses\r\n // `composeDateOnly` (fixed `pickerTimezone` anchor) when time.enabled is\r\n // false, `composeLocalDateTime` (plain local semantics) when true - see\r\n // the note above `pickerTimezone` for why these need to differ.\r\n const handleDateSelect = useCallback(\r\n (selectedDate: Dayjs) => {\r\n // `granularity === 'month'` means the calendar only ever hands us a\r\n // day *within* the picked month (see Calendar's month grid) - the\r\n // stored/returned value is always that month's last day, while the\r\n // day-of-week boundary semantics below ('start' of day vs 'end' of\r\n // day) are unaffected.\r\n const effectiveDate = granularity === 'month' ? selectedDate.endOf('month') : selectedDate;\r\n const compareUnit = granularity === 'month' ? 'month' : 'day';\r\n\r\n switch (mode) {\r\n case 'single': {\r\n let dateWithTime: Dayjs;\r\n // Preserve whatever time the user already configured via\r\n // TimeInput rather than resetting to the default every time a\r\n // different date is picked.\r\n const activeTime = (value?.time as TimeValue) ?? defaultStartTime;\r\n if (time.enabled) {\r\n dateWithTime = composeLocalDateTime(effectiveDate, activeTime);\r\n } else {\r\n dateWithTime = composeDateOnly(effectiveDate, 'start');\r\n }\r\n\r\n const newValue: DateTimeValue<T> = {\r\n date: dateWithTime.toISOString() as DateTimeValue<T>['date'],\r\n time: time.enabled ? (activeTime as DateTimeValue<T>['time']) : undefined,\r\n };\r\n\r\n onChange?.(newValue);\r\n setDropdownKey((prev) => prev + 1); // Close dropdown\r\n break;\r\n }\r\n\r\n case 'multiple': {\r\n const currentDates = (value?.date as string[]) || [];\r\n const currentDayjs = currentDates.map((d) => dayjs(d));\r\n\r\n // Check if date is already selected\r\n const existingIndex = currentDayjs.findIndex((d) => d.isSame(effectiveDate, compareUnit));\r\n let newDates: Dayjs[];\r\n\r\n if (existingIndex >= 0) {\r\n // Remove if already selected\r\n newDates = currentDayjs.filter((_, index) => index !== existingIndex);\r\n } else {\r\n // Add new date, preserving the shared time already configured.\r\n const activeTime = (value?.time as TimeValue) ?? defaultStartTime;\r\n const dateWithTime = time.enabled\r\n ? composeLocalDateTime(effectiveDate, activeTime)\r\n : composeDateOnly(effectiveDate, 'start');\r\n newDates = [...currentDayjs, dateWithTime];\r\n }\r\n\r\n // Always return ISO strings\r\n const newValue: DateTimeValue<T> = {\r\n date: newDates.map((d) => d.toISOString()) as DateTimeValue<T>['date'],\r\n time: time.enabled\r\n ? (((value?.time as TimeValue) ?? defaultStartTime) as DateTimeValue<T>['time'])\r\n : undefined,\r\n };\r\n\r\n onChange?.(newValue);\r\n break;\r\n }\r\n\r\n case 'range': {\r\n const currentRange = (value?.date as { start: string | null; end: string | null }) || {\r\n start: null,\r\n end: null,\r\n };\r\n const currentRangeTime = (value?.time as RangeTimeValue) || {\r\n start: defaultStartTime,\r\n end: defaultEndTime,\r\n };\r\n\r\n if (!currentRange.start || (currentRange.start && currentRange.end)) {\r\n // Start new range, preserving the already-configured start time.\r\n const startWithTime = time.enabled\r\n ? composeLocalDateTime(effectiveDate, currentRangeTime.start)\r\n : composeDateOnly(effectiveDate, 'start');\r\n\r\n // Always return ISO string\r\n const newValue: DateTimeValue<T> = {\r\n date: { start: startWithTime.toISOString(), end: null } as DateTimeValue<T>['date'],\r\n time: time.enabled ? (currentRangeTime as DateTimeValue<T>['time']) : undefined,\r\n };\r\n\r\n onChange?.(newValue);\r\n } else {\r\n // Complete the range. Date-only starts were anchored to\r\n // `pickerTimezone` when stored (see `composeDateOnly`) -\r\n // re-read it the same way so the \"is end before start\"\r\n // comparison below lines up with the day it actually\r\n // represents. Date+time starts were never anchored, so\r\n // they stay on local interpretation, matching how they\r\n // were written.\r\n const start = time.enabled\r\n ? dayjs(currentRange.start)\r\n : dayjs(currentRange.start).tz(pickerTimezone);\r\n let end = effectiveDate;\r\n\r\n // Ensure end is after start\r\n if (end.isBefore(start, compareUnit)) {\r\n end = start;\r\n }\r\n\r\n end = time.enabled\r\n ? composeLocalDateTime(end, currentRangeTime.end)\r\n : composeDateOnly(end, 'end');\r\n\r\n // Always return ISO strings\r\n const newValue: DateTimeValue<T> = {\r\n date: {\r\n start: currentRange.start,\r\n end: end.toISOString(),\r\n } as DateTimeValue<T>['date'],\r\n time: time.enabled ? (currentRangeTime as DateTimeValue<T>['time']) : undefined,\r\n };\r\n\r\n onChange?.(newValue);\r\n setDropdownKey((prev) => prev + 1); // Close dropdown after completing range\r\n }\r\n break;\r\n }\r\n }\r\n },\r\n [\r\n mode,\r\n time,\r\n value,\r\n onChange,\r\n defaultStartTime,\r\n defaultEndTime,\r\n composeDateOnly,\r\n composeLocalDateTime,\r\n pickerTimezone,\r\n granularity,\r\n ],\r\n );\r\n\r\n // Format display value\r\n const displayValue = useMemo(() => {\r\n if (!value?.date) return '';\r\n\r\n const displayFmt = format.displayFormat || (granularity === 'month' ? 'MMM YYYY' : 'MMM DD, YYYY');\r\n // Date-only values were anchored to `pickerTimezone` when stored (see\r\n // `composeDateOnly`) - display them in that same timezone rather than\r\n // the viewer's ambient one, so the trigger shows the actual calendar\r\n // date that was picked. Date+time values were deliberately never\r\n // anchored (see the note above `pickerTimezone`) - the viewer's own\r\n // local timezone is exactly what should convert that instant for\r\n // display, e.g. a UTC+3-scheduled 15:00 meeting showing as 12:00 to a\r\n // UTC+0 viewer.\r\n const parseDateOnlyAware = (iso: string) =>\r\n time.enabled ? dayjs(iso) : dayjs(iso).tz(pickerTimezone);\r\n\r\n switch (mode) {\r\n case 'single': {\r\n const date = parseDateOnlyAware(value.date as string);\r\n let result = date.format(displayFmt);\r\n if (time.enabled) {\r\n const timeStr = time.includeSeconds ? date.format('HH:mm:ss') : date.format('HH:mm');\r\n result += ` ${timeStr}`;\r\n }\r\n return result;\r\n }\r\n\r\n case 'multiple': {\r\n const dates = value.date as string[];\r\n if (time.enabled) {\r\n const formattedDates = dates.map((d) => {\r\n const date = parseDateOnlyAware(d);\r\n const dateStr = date.format(displayFmt);\r\n const timeStr = time.includeSeconds ? date.format('HH:mm:ss') : date.format('HH:mm');\r\n return `${dateStr} ${timeStr}`;\r\n });\r\n return formattedDates.join(', ');\r\n } else {\r\n const formattedDates = dates.map((d) => parseDateOnlyAware(d).format(displayFmt));\r\n return formattedDates.join(', ');\r\n }\r\n }\r\n\r\n case 'range': {\r\n const rangeValue = value.date as { start: string | null; end: string | null };\r\n const parts: string[] = [];\r\n\r\n if (rangeValue.start) {\r\n const startDate = parseDateOnlyAware(rangeValue.start);\r\n let startStr = startDate.format(displayFmt);\r\n if (time.enabled) {\r\n const timeStr = time.includeSeconds\r\n ? startDate.format('HH:mm:ss')\r\n : startDate.format('HH:mm');\r\n startStr += ` ${timeStr}`;\r\n }\r\n parts.push(startStr);\r\n }\r\n\r\n if (rangeValue.end) {\r\n const endDate = parseDateOnlyAware(rangeValue.end);\r\n let endStr = endDate.format(displayFmt);\r\n if (time.enabled) {\r\n const timeStr = time.includeSeconds\r\n ? endDate.format('HH:mm:ss')\r\n : endDate.format('HH:mm');\r\n endStr += ` ${timeStr}`;\r\n }\r\n parts.push(endStr);\r\n }\r\n\r\n return parts.join(' - ');\r\n }\r\n\r\n default:\r\n return '';\r\n }\r\n }, [value, mode, time, format, pickerTimezone, granularity]);\r\n\r\n // Handle clear\r\n const handleClear = useCallback(\r\n (e?: React.MouseEvent) => {\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n const clearedValue = (() => {\r\n if (mode === 'multiple') {\r\n return {\r\n date: [] as unknown as DateTimeValue<T>['date'],\r\n time: time.enabled\r\n ? (defaultStartTime as unknown as DateTimeValue<T>['time'])\r\n : undefined,\r\n } as DateTimeValue<T>;\r\n } else if (mode === 'range') {\r\n return {\r\n date: { start: null, end: null } as unknown as DateTimeValue<T>['date'],\r\n time: time.enabled\r\n ? ({\r\n start: defaultStartTime,\r\n end: defaultEndTime,\r\n } as unknown as DateTimeValue<T>['time'])\r\n : undefined,\r\n } as DateTimeValue<T>;\r\n } else {\r\n return {\r\n date: null as unknown as DateTimeValue<T>['date'],\r\n time: time.enabled\r\n ? (defaultStartTime as unknown as DateTimeValue<T>['time'])\r\n : undefined,\r\n } as DateTimeValue<T>;\r\n }\r\n })();\r\n\r\n onChange?.(clearedValue);\r\n setDropdownKey((prev) => prev + 1); // Close dropdown\r\n },\r\n [mode, time, onChange, defaultStartTime, defaultEndTime],\r\n );\r\n\r\n // Create trigger element\r\n const triggerElement = (\r\n <div\r\n ref={triggerRef}\r\n className={`eidos-date-picker-trigger${fullWidth ? ' eidos-date-picker-trigger--fullWidth' : ''}`}\r\n >\r\n <Input\r\n value={displayValue}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n required={required}\r\n name={name}\r\n id={id}\r\n readOnly={true}\r\n preIcon={CalendarIcon}\r\n posIcon={displayValue ? X : undefined}\r\n posIconButton={!!displayValue}\r\n onPosIconClick={displayValue ? handleClear : undefined}\r\n {...inputProps}\r\n clearable={false}\r\n />\r\n </div>\r\n );\r\n\r\n // Create dropdown content with calendar(s) and time inputs\r\n const dropdownContent = (\r\n <div className={'eidos-date-picker-content'}>\r\n {/* Multiple calendars with container-level navigation */}\r\n <div className={'eidos-date-picker-calendars-wrapper'}>\r\n {Array.from({ length: numberOfCalendars }, (_, index) => {\r\n const calendarDate = calendarDates[index] ?? dayjs().add(index, 'month');\r\n return (\r\n <Calendar\r\n key={index}\r\n currentDate={calendarDate}\r\n selectedDates={selectedDates}\r\n rangeStart={rangeStart}\r\n rangeEnd={rangeEnd}\r\n mode={mode}\r\n granularity={granularity}\r\n onDateSelect={handleDateSelect}\r\n onMonthChange={(newDate) => handleCalendarMonthChange(index, newDate)}\r\n minDate={minDateObj}\r\n maxDate={maxDateObj}\r\n disabledDates={disabledDatesObj}\r\n disabledDaysOfWeek={disabledDaysOfWeek}\r\n showWeekNumbers={calendar.showWeekNumbers}\r\n firstDayOfWeek={calendar.firstDayOfWeek}\r\n // Non-independent: only the first calendar's control is\r\n // interactive, since it's the one every other calendar\r\n // actually follows. Independent: every calendar gets one.\r\n showNavigation={independentCalendars || index === 0}\r\n />\r\n );\r\n })}\r\n </div>\r\n\r\n {/* Time inputs */}\r\n {time.enabled && (\r\n <div className={'eidos-date-picker-time-container'}>\r\n {mode === 'single' && (\r\n <TimeInput\r\n value={(value?.time as TimeValue) || defaultStartTime}\r\n onChange={(newTime) => {\r\n // Recompose the actual returned value with the new\r\n // time, not just the separate `time` field - see\r\n // `recomposeIsoWithTime`.\r\n const currentIso = value?.date as string | null;\r\n const newValue = {\r\n ...value,\r\n date: (currentIso\r\n ? recomposeIsoWithTime(currentIso, newTime)\r\n : currentIso) as DateTimeValue<T>['date'],\r\n time: newTime,\r\n } as DateTimeValue<T>;\r\n onChange?.(newValue);\r\n }}\r\n includeSeconds={time.includeSeconds}\r\n disabled={disabled}\r\n label=\"Time\"\r\n />\r\n )}\r\n\r\n {mode === 'multiple' && (\r\n <TimeInput\r\n value={(value?.time as TimeValue) || defaultStartTime}\r\n onChange={(newTime) => {\r\n // Recompose every selected date with the new shared\r\n // time - see `recomposeIsoWithTime`.\r\n const currentDates = (value?.date as string[]) || [];\r\n const newValue = {\r\n ...value,\r\n date: currentDates.map((d) =>\r\n recomposeIsoWithTime(d, newTime),\r\n ) as DateTimeValue<T>['date'],\r\n time: newTime,\r\n } as DateTimeValue<T>;\r\n onChange?.(newValue);\r\n }}\r\n includeSeconds={time.includeSeconds}\r\n disabled={disabled}\r\n label=\"Time for all dates\"\r\n />\r\n )}\r\n\r\n {mode === 'range' && (\r\n <div className={'eidos-date-picker-range-time-inputs'}>\r\n <TimeInput\r\n value={(value?.time as RangeTimeValue)?.start || defaultStartTime}\r\n onChange={(newTime) => {\r\n const currentRangeTime = (value?.time as RangeTimeValue) || {\r\n start: defaultStartTime,\r\n end: defaultEndTime,\r\n };\r\n // Recompose just the start of the range with the new\r\n // time - see `recomposeIsoWithTime`.\r\n const currentRange = (value?.date as {\r\n start: string | null;\r\n end: string | null;\r\n }) || {\r\n start: null,\r\n end: null,\r\n };\r\n const newValue = {\r\n ...value,\r\n date: {\r\n ...currentRange,\r\n start: currentRange.start\r\n ? recomposeIsoWithTime(currentRange.start, newTime)\r\n : currentRange.start,\r\n } as DateTimeValue<T>['date'],\r\n time: {\r\n ...currentRangeTime,\r\n start: newTime,\r\n },\r\n } as DateTimeValue<T>;\r\n onChange?.(newValue);\r\n }}\r\n includeSeconds={time.includeSeconds}\r\n disabled={disabled}\r\n label=\"Start time\"\r\n />\r\n <TimeInput\r\n value={(value?.time as RangeTimeValue)?.end || defaultEndTime}\r\n onChange={(newTime) => {\r\n const currentRangeTime = (value?.time as RangeTimeValue) || {\r\n start: defaultStartTime,\r\n end: defaultEndTime,\r\n };\r\n // Recompose just the end of the range with the new\r\n // time - see `recomposeIsoWithTime`.\r\n const currentRange = (value?.date as {\r\n start: string | null;\r\n end: string | null;\r\n }) || {\r\n start: null,\r\n end: null,\r\n };\r\n const newValue = {\r\n ...value,\r\n date: {\r\n ...currentRange,\r\n end: currentRange.end\r\n ? recomposeIsoWithTime(currentRange.end, newTime)\r\n : currentRange.end,\r\n } as DateTimeValue<T>['date'],\r\n time: {\r\n ...currentRangeTime,\r\n end: newTime,\r\n },\r\n } as DateTimeValue<T>;\r\n onChange?.(newValue);\r\n }}\r\n includeSeconds={time.includeSeconds}\r\n disabled={disabled}\r\n label=\"End time\"\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n return (\r\n <div\r\n className={`eidos-date-picker-container${fullWidth ? ' eidos-date-picker-container--fullWidth' : ''} ${className}`.trim()}\r\n >\r\n <Dropdown\r\n key={dropdownKey}\r\n trigger={triggerElement}\r\n content={dropdownContent}\r\n placement=\"bottom\"\r\n minWidth={minWidth}\r\n maxWidth={maxWidth || 'none'}\r\n minHeight={minHeight}\r\n maxHeight={maxHeight || 'none'}\r\n autoWidth={autoWidth}\r\n triggerRef={triggerRef as React.RefObject<HTMLElement | null>}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nDatePicker.displayName = 'DatePicker';\r\n","import React, { useMemo, useCallback } from 'react';\r\nimport dayjs, { Dayjs } from 'dayjs';\r\nimport weekOfYear from 'dayjs/plugin/weekOfYear';\r\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\r\n\r\n// Initialize dayjs plugins\r\ndayjs.extend(weekOfYear);\r\nimport { Select } from '../Select/Select.component';\r\nimport type { CalendarProps } from './DatePicker.types';\r\nimport { Button } from '../Button/Button.component';\r\n\r\nexport const Calendar: React.FC<CalendarProps> = ({\r\n currentDate,\r\n selectedDates,\r\n rangeStart,\r\n rangeEnd,\r\n // mode, // TODO: Use this for different selection behaviors\r\n granularity = 'day',\r\n onDateSelect,\r\n onMonthChange,\r\n minDate,\r\n maxDate,\r\n disabledDates = [],\r\n disabledDaysOfWeek = [],\r\n showWeekNumbers = false,\r\n firstDayOfWeek = 1, // Monday\r\n showNavigation = true,\r\n}) => {\r\n // Generate month options (12 months)\r\n const monthOptions = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, i) => ({\r\n id: i.toString(),\r\n label: dayjs().month(i).format('MMMM'),\r\n value: i.toString(),\r\n }));\r\n }, []);\r\n\r\n // Generate year options (current year ± 50 years)\r\n const yearOptions = useMemo(() => {\r\n const currentYear = dayjs().year();\r\n const years = [];\r\n for (let year = currentYear - 50; year <= currentYear + 50; year++) {\r\n years.push({\r\n id: year.toString(),\r\n label: year.toString(),\r\n value: year.toString(),\r\n });\r\n }\r\n return years;\r\n }, []);\r\n\r\n // Handle month selection\r\n const handleMonthSelect = useCallback(\r\n (value: string | string[]) => {\r\n if (typeof value === 'string') {\r\n const newDate = currentDate.month(parseInt(value));\r\n onMonthChange(newDate);\r\n }\r\n },\r\n [currentDate, onMonthChange],\r\n );\r\n\r\n // Handle year selection\r\n const handleYearSelect = useCallback(\r\n (value: string | string[]) => {\r\n if (typeof value === 'string') {\r\n const newDate = currentDate.year(parseInt(value));\r\n onMonthChange(newDate);\r\n }\r\n },\r\n [currentDate, onMonthChange],\r\n );\r\n\r\n // Handle navigation arrows\r\n const handlePrevMonth = useCallback(() => {\r\n onMonthChange(currentDate.subtract(1, 'month'));\r\n }, [currentDate, onMonthChange]);\r\n\r\n const handleNextMonth = useCallback(() => {\r\n onMonthChange(currentDate.add(1, 'month'));\r\n }, [currentDate, onMonthChange]);\r\n\r\n const handlePrevYear = useCallback(() => {\r\n onMonthChange(currentDate.subtract(1, 'year'));\r\n }, [currentDate, onMonthChange]);\r\n\r\n const handleNextYear = useCallback(() => {\r\n onMonthChange(currentDate.add(1, 'year'));\r\n }, [currentDate, onMonthChange]);\r\n\r\n // Generate the 12 months of `currentDate`'s year - used instead of\r\n // `calendarDays` when `granularity === 'month'`.\r\n const monthCells = useMemo(() => {\r\n return Array.from({ length: 12 }, (_, i) => {\r\n const monthDate = currentDate.month(i).startOf('month');\r\n const isToday = monthDate.isSame(dayjs(), 'month');\r\n const isSelected = selectedDates.some((date) => date.isSame(monthDate, 'month'));\r\n const isDisabled =\r\n (minDate && monthDate.endOf('month').isBefore(minDate, 'month')) ||\r\n (maxDate && monthDate.isAfter(maxDate, 'month'));\r\n\r\n const isRangeStart = rangeStart?.isSame(monthDate, 'month') || false;\r\n const isRangeEnd = rangeEnd?.isSame(monthDate, 'month') || false;\r\n const isInRange =\r\n rangeStart &&\r\n rangeEnd &&\r\n monthDate.isAfter(rangeStart, 'month') &&\r\n monthDate.isBefore(rangeEnd, 'month');\r\n\r\n return {\r\n date: monthDate,\r\n isToday,\r\n isSelected,\r\n isDisabled,\r\n isRangeStart,\r\n isRangeEnd,\r\n isInRange,\r\n };\r\n });\r\n }, [currentDate, selectedDates, rangeStart, rangeEnd, minDate, maxDate]);\r\n\r\n // Generate calendar days\r\n const calendarDays = useMemo(() => {\r\n const startOfMonth = currentDate.startOf('month');\r\n\r\n // Get the first day of the week for the first day of the month\r\n let startOfCalendar = startOfMonth.startOf('week');\r\n if (firstDayOfWeek === 1) {\r\n // Monday\r\n startOfCalendar =\r\n startOfMonth.day() === 0\r\n ? startOfMonth.subtract(6, 'day')\r\n : startOfMonth.startOf('week').add(1, 'day');\r\n }\r\n\r\n // Generate 42 days (6 weeks * 7 days)\r\n const days = [];\r\n let current = startOfCalendar;\r\n\r\n for (let i = 0; i < 42; i++) {\r\n const isCurrentMonth = current.month() === currentDate.month();\r\n const isToday = current.isSame(dayjs(), 'day');\r\n const isSelected = selectedDates.some((date) => date.isSame(current, 'day'));\r\n const isDisabled =\r\n (minDate && current.isBefore(minDate, 'day')) ||\r\n (maxDate && current.isAfter(maxDate, 'day')) ||\r\n disabledDates.some((date) => date.isSame(current, 'day')) ||\r\n disabledDaysOfWeek.includes(current.day());\r\n\r\n // Range logic\r\n const isRangeStart = rangeStart?.isSame(current, 'day') || false;\r\n const isRangeEnd = rangeEnd?.isSame(current, 'day') || false;\r\n const isInRange =\r\n rangeStart &&\r\n rangeEnd &&\r\n current.isAfter(rangeStart, 'day') &&\r\n current.isBefore(rangeEnd, 'day');\r\n\r\n days.push({\r\n date: current,\r\n isCurrentMonth,\r\n isToday,\r\n isSelected,\r\n isDisabled,\r\n isRangeStart,\r\n isRangeEnd,\r\n isInRange,\r\n });\r\n\r\n current = current.add(1, 'day');\r\n }\r\n\r\n return days;\r\n }, [\r\n currentDate,\r\n selectedDates,\r\n rangeStart,\r\n rangeEnd,\r\n minDate,\r\n maxDate,\r\n disabledDates,\r\n disabledDaysOfWeek,\r\n firstDayOfWeek,\r\n ]);\r\n\r\n // Generate weekday headers\r\n const weekDays = useMemo(() => {\r\n const days = [];\r\n let start =\r\n firstDayOfWeek === 0 ? dayjs().startOf('week') : dayjs().startOf('week').add(1, 'day');\r\n\r\n for (let i = 0; i < 7; i++) {\r\n days.push(start.format('dd'));\r\n start = start.add(1, 'day');\r\n }\r\n return days;\r\n }, [firstDayOfWeek]);\r\n\r\n // Handle date click\r\n const handleDateClick = useCallback(\r\n (date: Dayjs) => {\r\n onDateSelect(date);\r\n },\r\n [onDateSelect],\r\n );\r\n\r\n return (\r\n <div className={'eidos-calendar'}>\r\n {/* Header with navigation - only interactive when this calendar actually\r\n\t\t\t navigates independently of its neighbors (see `showNavigation` doc).\r\n\t\t\t Showing editable, interactive controls that silently move a sibling\r\n\t\t\t calendar instead of themselves is exactly the confusing behavior this\r\n\t\t\t is meant to avoid; a plain label is honest about what will happen. */}\r\n <div className={'eidos-calendar-header'}>\r\n {showNavigation ? (\r\n granularity === 'month' ? (\r\n <>\r\n <Button variant=\"text\" icon={ChevronLeft} onClick={handlePrevYear} />\r\n\r\n <div className={'eidos-calendar-selectors'}>\r\n <Select\r\n options={yearOptions}\r\n value={currentDate.year().toString()}\r\n onChange={handleYearSelect}\r\n clearable={false}\r\n dropdownProps={{\r\n dropdownGroup: 'calendar-navigation',\r\n }}\r\n />\r\n </div>\r\n\r\n <Button variant=\"text\" icon={ChevronRight} onClick={handleNextYear} />\r\n </>\r\n ) : (\r\n <>\r\n <Button variant=\"text\" icon={ChevronLeft} onClick={handlePrevMonth} />\r\n\r\n <div className={'eidos-calendar-selectors'}>\r\n <Select\r\n options={monthOptions}\r\n value={currentDate.month().toString()}\r\n onChange={handleMonthSelect}\r\n clearable={false}\r\n dropdownProps={{\r\n dropdownGroup: 'calendar-navigation',\r\n }}\r\n />\r\n <Select\r\n options={yearOptions}\r\n value={currentDate.year().toString()}\r\n onChange={handleYearSelect}\r\n clearable={false}\r\n dropdownProps={{\r\n dropdownGroup: 'calendar-navigation',\r\n }}\r\n />\r\n </div>\r\n\r\n <Button variant=\"text\" icon={ChevronRight} onClick={handleNextMonth} />\r\n </>\r\n )\r\n ) : (\r\n <div className={'eidos-calendar-label'}>\r\n {currentDate.format(granularity === 'month' ? 'YYYY' : 'MMMM YYYY')}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Calendar grid */}\r\n {granularity === 'month' ? (\r\n <div className={'eidos-calendar-month-cells'}>\r\n {monthCells.map((month, index) => (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n className={`eidos-calendar-date-cell eidos-calendar-month-cell ${month.isToday ? 'eidos-calendar-today' : ''} ${month.isSelected ? 'eidos-calendar-selected' : ''} ${month.isDisabled ? 'eidos-calendar-disabled' : ''} ${month.isRangeStart ? 'eidos-calendar-range-start' : ''} ${month.isRangeEnd ? 'eidos-calendar-range-end' : ''} ${month.isInRange ? 'eidos-calendar-in-range' : ''}`.trim()}\r\n onClick={() => !month.isDisabled && handleDateClick(month.date)}\r\n disabled={month.isDisabled}\r\n >\r\n {month.date.format('MMM')}\r\n </button>\r\n ))}\r\n </div>\r\n ) : (\r\n <div className={'eidos-calendar-grid'}>\r\n {/* Week numbers column (optional) */}\r\n {showWeekNumbers && (\r\n <div className={'eidos-calendar-week-numbers-column'}>\r\n <div className={'eidos-calendar-week-number-header'}></div>\r\n {Array.from({ length: 6 }, (_, weekIndex) => {\r\n const weekStart = calendarDays[weekIndex * 7].date;\r\n return (\r\n <div key={weekIndex} className={'eidos-calendar-week-number'}>\r\n {weekStart.format('W')}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n\r\n {/* Main calendar content */}\r\n <div className={'eidos-calendar-content'}>\r\n {/* Weekday headers */}\r\n <div className={'eidos-calendar-week-days'}>\r\n {weekDays.map((day, index) => (\r\n <div key={index} className={'eidos-calendar-week-day'}>\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Date cells */}\r\n <div className={'eidos-calendar-date-cells'}>\r\n {calendarDays.map((day, index) => (\r\n <button\r\n key={index}\r\n type=\"button\"\r\n className={`eidos-calendar-date-cell ${!day.isCurrentMonth ? 'eidos-calendar-other-month' : ''} ${day.isToday ? 'eidos-calendar-today' : ''} ${day.isSelected ? 'eidos-calendar-selected' : ''} ${day.isDisabled ? 'eidos-calendar-disabled' : ''} ${day.isRangeStart ? 'eidos-calendar-range-start' : ''} ${day.isRangeEnd ? 'eidos-calendar-range-end' : ''} ${day.isInRange ? 'eidos-calendar-in-range' : ''}`.trim()}\r\n onClick={() => !day.isDisabled && handleDateClick(day.date)}\r\n disabled={day.isDisabled}\r\n >\r\n {day.date.date()}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React, { useState, useEffect, useCallback } from 'react';\r\nimport { Input } from '../Input/Input.component';\r\nimport type { TimeValue } from './DatePicker.types';\r\n\r\nexport interface TimeInputProps {\r\n value: TimeValue;\r\n onChange: (time: TimeValue) => void;\r\n includeSeconds?: boolean;\r\n disabled?: boolean;\r\n label?: string;\r\n}\r\n\r\nexport const TimeInput: React.FC<TimeInputProps> = ({\r\n value,\r\n onChange,\r\n includeSeconds = false,\r\n disabled = false,\r\n label = 'Time',\r\n}) => {\r\n const [hours, setHours] = useState(value.hours.toString().padStart(2, '0'));\r\n const [minutes, setMinutes] = useState(value.minutes.toString().padStart(2, '0'));\r\n const [seconds, setSeconds] = useState((value.seconds || 0).toString().padStart(2, '0'));\r\n\r\n // Update local state when value prop changes\r\n useEffect(() => {\r\n setHours(value.hours.toString().padStart(2, '0'));\r\n setMinutes(value.minutes.toString().padStart(2, '0'));\r\n setSeconds((value.seconds || 0).toString().padStart(2, '0'));\r\n }, [value]);\r\n\r\n const handleTimeChange = useCallback(\r\n (newHours: number, newMinutes: number, newSeconds: number) => {\r\n onChange({\r\n hours: newHours,\r\n minutes: newMinutes,\r\n seconds: newSeconds,\r\n });\r\n },\r\n [onChange],\r\n );\r\n\r\n const handleHoursChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newHours = Math.max(0, Math.min(23, parseInt(e.target.value) || 0));\r\n setHours(newHours.toString().padStart(2, '0'));\r\n handleTimeChange(newHours, value.minutes, value.seconds || 0);\r\n },\r\n [handleTimeChange, value.minutes, value.seconds],\r\n );\r\n\r\n const handleMinutesChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newMinutes = Math.max(0, Math.min(59, parseInt(e.target.value) || 0));\r\n setMinutes(newMinutes.toString().padStart(2, '0'));\r\n handleTimeChange(value.hours, newMinutes, value.seconds || 0);\r\n },\r\n [handleTimeChange, value.hours, value.seconds],\r\n );\r\n\r\n const handleSecondsChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const newSeconds = Math.max(0, Math.min(59, parseInt(e.target.value) || 0));\r\n setSeconds(newSeconds.toString().padStart(2, '0'));\r\n handleTimeChange(value.hours, value.minutes, newSeconds);\r\n },\r\n [handleTimeChange, value.hours, value.minutes],\r\n );\r\n\r\n return (\r\n <div className={'eidos-time-input'}>\r\n {label && <label className={'eidos-time-input-label'}>{label}</label>}\r\n <div className={'eidos-time-input-inputs'}>\r\n <div className={'eidos-time-input-input-group'}>\r\n <Input\r\n type=\"number\"\r\n value={hours}\r\n onChange={handleHoursChange}\r\n disabled={disabled}\r\n min={0}\r\n max={23}\r\n placeholder=\"HH\"\r\n size=\"sm\"\r\n className={'eidos-time-input-time-field'}\r\n />\r\n <span className={'eidos-time-input-separator'}>:</span>\r\n </div>\r\n <div className={'eidos-time-input-input-group'}>\r\n <Input\r\n type=\"number\"\r\n value={minutes}\r\n onChange={handleMinutesChange}\r\n disabled={disabled}\r\n min={0}\r\n max={59}\r\n placeholder=\"MM\"\r\n size=\"sm\"\r\n className={'eidos-time-input-time-field'}\r\n />\r\n {includeSeconds && <span className={'eidos-time-input-separator'}>:</span>}\r\n </div>\r\n {includeSeconds && (\r\n <div className={'eidos-time-input-input-group'}>\r\n <Input\r\n type=\"number\"\r\n value={seconds}\r\n onChange={handleSecondsChange}\r\n disabled={disabled}\r\n min={0}\r\n max={59}\r\n placeholder=\"SS\"\r\n size=\"sm\"\r\n className={'eidos-time-input-time-field'}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VZ43OLU6.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":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-VZ43OLU6.cjs","sourcesContent":[null,"import React, { useCallback } from 'react';\r\nimport { ChevronDown, LoaderCircle } from 'lucide-react';\r\nimport { Dropdown } from '../Dropdown/Dropdown.component';\r\nimport { MenuPanel } from '../Menu';\r\nimport type { MenuItem } from '../Menu';\r\nimport { renderIcon } from '../../utils';\r\nimport type { SplitButtonProps } from './SplitButton.types';\r\n\r\n/**\r\n * SplitButton - a two-part control with a primary action button on the left\r\n * and a chevron that opens a dropdown of secondary actions on the right.\r\n *\r\n * The primary button fires `onClick` directly; clicking the chevron opens the\r\n * dropdown. Visually the two parts share a single bordered unit.\r\n *\r\n * @example\r\n * ```tsx\r\n * <SplitButton\r\n * label=\"Save\"\r\n * onClick={() => save()}\r\n * options={[\r\n * { id: 'draft', label: 'Save as draft', onClick: saveDraft },\r\n * { id: 'template', label: 'Save as template', onClick: saveTemplate },\r\n * ]}\r\n * />\r\n * ```\r\n */\r\nexport const SplitButton: React.FC<SplitButtonProps> = ({\r\n label,\r\n onClick,\r\n options,\r\n variant = 'filled',\r\n color = 'primary',\r\n size = 'md',\r\n disabled = false,\r\n loading = false,\r\n preIcon,\r\n className = '',\r\n}) => {\r\n // Convert SplitButtonOption → MenuItemType so MenuPanel can render them.\r\n const menuItems: MenuItem[] = options.map((opt) => ({\r\n type: 'item' as const,\r\n id: opt.id,\r\n label: opt.label,\r\n icon: opt.icon,\r\n disabled: opt.disabled,\r\n onClick: opt.onClick,\r\n }));\r\n\r\n const handleItemClick = useCallback(() => {\r\n // Close the dropdown by dispatching a mousedown outside it.\r\n setTimeout(() => {\r\n document.dispatchEvent(\r\n new MouseEvent('mousedown', { bubbles: true, cancelable: true, view: window }),\r\n );\r\n }, 10);\r\n }, []);\r\n\r\n const baseClass = `eidos-button eidos-button--${variant} eidos-button--${color} eidos-button--${size}`;\r\n const disabledOrLoading = disabled || loading;\r\n\r\n const chevronTrigger = (\r\n <button\r\n type=\"button\"\r\n className={`${baseClass} eidos-split-button__chevron`}\r\n disabled={disabledOrLoading}\r\n aria-label=\"More options\"\r\n >\r\n <ChevronDown className=\"eidos-split-button__chevron-icon\" aria-hidden=\"true\" />\r\n </button>\r\n );\r\n\r\n return (\r\n <div\r\n className={[\r\n 'eidos-split-button',\r\n `eidos-split-button--${variant}`,\r\n `eidos-split-button--${color}`,\r\n `eidos-split-button--${size}`,\r\n disabledOrLoading && 'eidos-split-button--disabled',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n >\r\n {/* Primary action */}\r\n <button\r\n type=\"button\"\r\n className={`${baseClass} eidos-split-button__primary`}\r\n disabled={disabledOrLoading}\r\n onClick={onClick}\r\n >\r\n {loading ? (\r\n <LoaderCircle className=\"eidos-split-button__spinner\" aria-hidden=\"true\" />\r\n ) : (\r\n preIcon && renderIcon(preIcon, 'eidos-split-button__pre-icon')\r\n )}\r\n <span className=\"eidos-split-button__label\">{label}</span>\r\n </button>\r\n\r\n {/* Secondary actions dropdown */}\r\n <Dropdown\r\n trigger={chevronTrigger}\r\n content={<MenuPanel items={menuItems} onItemClick={handleItemClick} />}\r\n placement=\"bottom\"\r\n align=\"end\"\r\n disabled={disabledOrLoading}\r\n />\r\n </div>\r\n );\r\n};\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Checkbox/Checkbox.component.tsx"],"sourcesContent":["import React, { forwardRef, useId, useRef, useState, useEffect, useCallback } from 'react';\r\nimport { Check, Minus, CircleAlert } from 'lucide-react';\r\nimport type { CheckboxProps } from './Checkbox.types';\r\n\r\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\r\n (\r\n {\r\n label,\r\n error,\r\n indeterminate = false,\r\n color = 'primary',\r\n size = 'md',\r\n className = '',\r\n disabled = false,\r\n id,\r\n checked,\r\n defaultChecked,\r\n onChange,\r\n onClick,\r\n ...inputProps\r\n },\r\n ref,\r\n ) => {\r\n const generatedId = useId();\r\n const checkboxId = id || `checkbox-${generatedId}`;\r\n\r\n // Internal ref needed to imperatively set `indeterminate` (not a standard HTML attribute)\r\n const internalRef = useRef<HTMLInputElement>(null);\r\n\r\n // Track checked state for the visual control:\r\n // - controlled mode: `checked` prop drives everything\r\n // - uncontrolled mode: local state mirrors the native input\r\n const isControlled = checked !== undefined;\r\n const [localChecked, setLocalChecked] = useState<boolean>(defaultChecked ?? false);\r\n\r\n // `??` correctly handles `false` (falsy but defined): only falls back when `checked` is undefined\r\n const isChecked = checked ?? localChecked;\r\n\r\n // Imperatively set the indeterminate property – it has no HTML attribute equivalent\r\n useEffect(() => {\r\n if (internalRef.current) {\r\n internalRef.current.indeterminate = indeterminate;\r\n }\r\n }, [indeterminate]);\r\n\r\n // Merge the forwarded ref with our internal ref so callers can still access the input.\r\n // useCallback(_, [ref]) prevents the ref callback from being a new function identity\r\n // every render, which would cause React to detach/re-attach the ref unnecessarily.\r\n const mergedRef = useCallback(\r\n (node: HTMLInputElement | null) => {\r\n internalRef.current = node;\r\n if (typeof ref === 'function') {\r\n ref(node);\r\n } else if (ref) {\r\n (ref as React.MutableRefObject<HTMLInputElement | null>).current = node;\r\n }\r\n },\r\n [ref],\r\n );\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n if (!isControlled) {\r\n setLocalChecked(e.target.checked);\r\n }\r\n onChange?.(e);\r\n };\r\n\r\n // Clicking anywhere in the surrounding <label> (e.g. the custom\r\n // `.eidos-checkbox-control` box) fires a click on the clicked element\r\n // *and* a second, browser-synthesized click targeted at this input -\r\n // both bubble up. A consumer that wraps Checkbox in its own click\r\n // handler (e.g. DataGrid toggling a cell on click) would otherwise see\r\n // that handler fire twice per click and cancel itself out. Stopping\r\n // propagation here only cancels the synthesized click's bubbling; the\r\n // original click (whichever element the user actually clicked) still\r\n // bubbles normally. Still forwards to a caller-supplied `onClick`\r\n // first, so passing one through doesn't silently disable this fix.\r\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\r\n onClick?.(e);\r\n e.stopPropagation();\r\n };\r\n\r\n const wrapperClasses = [\r\n 'eidos-checkbox-wrapper',\r\n `eidos-checkbox-wrapper--${color}`,\r\n `eidos-checkbox-wrapper--${size}`,\r\n disabled && 'eidos-checkbox-wrapper--disabled',\r\n error && 'eidos-checkbox-wrapper--error',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const controlClasses = [\r\n 'eidos-checkbox-control',\r\n isChecked && 'eidos-checkbox-control--checked',\r\n indeterminate && 'eidos-checkbox-control--indeterminate',\r\n disabled && 'eidos-checkbox-control--disabled',\r\n error && !disabled && 'eidos-checkbox-control--error',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div className={['eidos-checkbox-container', className].filter(Boolean).join(' ')}>\r\n <label className={wrapperClasses}>\r\n <input\r\n ref={mergedRef}\r\n type=\"checkbox\"\r\n id={checkboxId}\r\n className=\"eidos-checkbox-input\"\r\n disabled={disabled}\r\n onChange={handleChange}\r\n onClick={handleClick}\r\n {...(isControlled ? { checked } : { defaultChecked })}\r\n {...inputProps}\r\n />\r\n <span className={controlClasses}>\r\n {isChecked && !indeterminate && <Check className=\"eidos-checkbox-icon\" />}\r\n {indeterminate && <Minus className=\"eidos-checkbox-icon\" />}\r\n </span>\r\n {label && <span className=\"eidos-checkbox-label\">{label}</span>}\r\n </label>\r\n\r\n {error && (\r\n <div className=\"eidos-checkbox-error-message\">\r\n <CircleAlert />\r\n <span>{error}</span>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nCheckbox.displayName = 'Checkbox';\r\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":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Combobox/Combobox.component.tsx"],"sourcesContent":["import React, { useState, useCallback, useRef, useEffect, useMemo, useId } from 'react';\r\nimport { Check, ChevronDown, X, Loader2, CircleAlert } from 'lucide-react';\r\nimport { Input } from '../Input/Input.component';\r\nimport { Dropdown } from '../Dropdown/Dropdown.component';\r\nimport type { ComboboxProps, ComboboxOption } from './Combobox.types';\r\nimport './Combobox.scss';\r\n\r\n// ─── Types ───────────────────────────────────────────────────────────────────\r\n\r\ntype OptionEntry =\r\n | { type: 'group'; group: string; key: string }\r\n | { type: 'option'; option: ComboboxOption; index: number; key: string };\r\n\r\n// ─── Component ───────────────────────────────────────────────────────────────\r\n\r\nexport const Combobox: React.FC<ComboboxProps> = ({\r\n options = [],\r\n value,\r\n defaultValue,\r\n onChange,\r\n onSearch,\r\n placeholder = 'Search or select…',\r\n loading = false,\r\n loadingText = 'Searching…',\r\n emptyText = 'No results found',\r\n allowFreeText = false,\r\n clearable = true,\r\n disabled = false,\r\n size = 'md',\r\n label,\r\n error,\r\n hint,\r\n fullWidth = false,\r\n className = '',\r\n maxHeight = '300px',\r\n renderOption,\r\n}) => {\r\n const uid = useId();\r\n\r\n // ─── Refs ─────────────────────────────────────────────────────────────────\r\n\r\n /** Entire combobox wrapper - used for click-outside detection */\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n /** The trigger wrapper div - passed to Dropdown as externalTriggerRef for width */\r\n const comboboxTriggerRef = useRef<HTMLDivElement>(null);\r\n\r\n /** The 0-height span that IS the Dropdown trigger element - programmatically clicked to open */\r\n const dropdownSpanRef = useRef<HTMLSpanElement>(null);\r\n\r\n /** Native input element */\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n /** Focusable option divs for scroll-into-view */\r\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\r\n\r\n /**\r\n * Synchronous open-state flag.\r\n * React state updates are async; reading this ref inside event handlers\r\n * gives us the true current value without waiting for a re-render.\r\n */\r\n const isOpenRef = useRef(false);\r\n\r\n // ─── State ────────────────────────────────────────────────────────────────\r\n\r\n const isControlled = value !== undefined;\r\n\r\n const getInitialInputValue = (): string => {\r\n const seed = isControlled ? value : defaultValue;\r\n if (!seed) return '';\r\n const match = options.find((o) => o.value === seed);\r\n return match ? match.label : allowFreeText ? seed : '';\r\n };\r\n\r\n const getInitialCommittedValue = (): string => {\r\n return isControlled ? (value ?? '') : (defaultValue ?? '');\r\n };\r\n\r\n const [inputValue, _setInputValue] = useState<string>(getInitialInputValue);\r\n const inputValueRef = useRef<string>(inputValue);\r\n const setInputValue = useCallback((v: string) => {\r\n inputValueRef.current = v;\r\n _setInputValue(v);\r\n }, []);\r\n\r\n const [committedValue, _setCommittedValue] = useState<string>(getInitialCommittedValue);\r\n const committedValueRef = useRef<string>(committedValue);\r\n const setCommittedValue = useCallback((v: string) => {\r\n committedValueRef.current = v;\r\n _setCommittedValue(v);\r\n }, []);\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [menuKey, setMenuKey] = useState(0);\r\n const [focusedIndex, setFocusedIndex] = useState(-1);\r\n\r\n // ─── Sync controlled value ────────────────────────────────────────────────\r\n\r\n useEffect(() => {\r\n if (!isControlled) return;\r\n const v = value ?? '';\r\n const match = options.find((o) => o.value === v);\r\n const label = match ? match.label : allowFreeText ? v : '';\r\n setInputValue(label);\r\n setCommittedValue(v);\r\n }, [value, isControlled, options, allowFreeText, setInputValue, setCommittedValue]);\r\n\r\n // ─── Derived: filtered options ────────────────────────────────────────────\r\n\r\n const filteredOptions = useMemo<ComboboxOption[]>(() => {\r\n const q = inputValue.toLowerCase();\r\n if (!q) return options;\r\n return options.filter((o) => o.label.toLowerCase().includes(q));\r\n }, [options, inputValue]);\r\n\r\n // Reset focused index when the filtered set changes\r\n useEffect(() => {\r\n setFocusedIndex(-1);\r\n }, [filteredOptions]);\r\n\r\n // Keep optionRefs array in sync with filteredOptions length\r\n useEffect(() => {\r\n optionRefs.current = optionRefs.current.slice(0, filteredOptions.length);\r\n }, [filteredOptions.length]);\r\n\r\n // ─── Derived: option entries (with group headers) ─────────────────────────\r\n\r\n const optionEntries = useMemo<OptionEntry[]>(() => {\r\n const entries: OptionEntry[] = [];\r\n const hasGroups = filteredOptions.some((o) => o.group);\r\n\r\n if (!hasGroups) {\r\n filteredOptions.forEach((option, index) => {\r\n entries.push({ type: 'option', option, index, key: option.id });\r\n });\r\n return entries;\r\n }\r\n\r\n // Build ordered group map while preserving insertion order\r\n const groupMap = new Map<string | null, ComboboxOption[]>();\r\n for (const option of filteredOptions) {\r\n const g = option.group ?? null;\r\n if (!groupMap.has(g)) groupMap.set(g, []);\r\n groupMap.get(g)!.push(option);\r\n }\r\n\r\n let optionIndex = 0;\r\n for (const [group, opts] of groupMap.entries()) {\r\n if (group !== null) {\r\n entries.push({ type: 'group', group, key: `group-${group}` });\r\n }\r\n for (const option of opts) {\r\n entries.push({ type: 'option', option, index: optionIndex++, key: option.id });\r\n }\r\n }\r\n\r\n return entries;\r\n }, [filteredOptions]);\r\n\r\n // ─── Open / Close helpers ─────────────────────────────────────────────────\r\n\r\n /**\r\n * Open the dropdown by programmatically clicking the 0-height span trigger.\r\n * The click bubbles to div.eidos-dropdown-trigger → Dropdown.handleTriggerClick → opens.\r\n *\r\n * We set isOpenRef AFTER the synthetic click so that the Dropdown's toggle\r\n * handler fires while isOpenRef is still false (allowing it to open).\r\n */\r\n const openDropdown = useCallback(() => {\r\n if (isOpenRef.current || disabled) return;\r\n dropdownSpanRef.current?.click(); // opens the Dropdown (bubbles to trigger)\r\n isOpenRef.current = true;\r\n setIsOpen(true);\r\n }, [disabled]);\r\n\r\n /**\r\n * Close the dropdown by remounting it (menuKey increment resets internal state).\r\n * Optionally revert inputValue to the last committed value.\r\n */\r\n const closeDropdown = useCallback(\r\n (revertInput = false) => {\r\n isOpenRef.current = false;\r\n setIsOpen(false);\r\n setFocusedIndex(-1);\r\n setMenuKey((prev) => prev + 1);\r\n\r\n if (revertInput) {\r\n const match = options.find((o) => o.value === committedValueRef.current);\r\n setInputValue(match ? match.label : allowFreeText ? committedValueRef.current : '');\r\n }\r\n },\r\n [options, allowFreeText, setInputValue],\r\n );\r\n\r\n // ─── Click-outside detection ──────────────────────────────────────────────\r\n\r\n useEffect(() => {\r\n const handleMouseDown = (e: MouseEvent) => {\r\n if (!isOpenRef.current) return;\r\n // defaultPrevented is set by the listbox's onMouseDown - means the user\r\n // clicked an option in the portal, not truly outside the combobox.\r\n if (e.defaultPrevented) return;\r\n if (containerRef.current?.contains(e.target as Node)) return;\r\n\r\n // Focus leaving to a non-focusable target: validate and close\r\n isOpenRef.current = false;\r\n setIsOpen(false);\r\n setFocusedIndex(-1);\r\n setMenuKey((prev) => prev + 1);\r\n\r\n const current = inputValueRef.current;\r\n const committed = committedValueRef.current;\r\n\r\n if (!allowFreeText) {\r\n const match = options.find((o) => o.label.toLowerCase() === current.toLowerCase());\r\n if (match) {\r\n if (match.value !== committed) {\r\n setCommittedValue(match.value);\r\n onChange?.(match.value);\r\n setInputValue(match.label);\r\n }\r\n } else {\r\n const revertMatch = options.find((o) => o.value === committed);\r\n setInputValue(revertMatch ? revertMatch.label : '');\r\n }\r\n } else {\r\n if (current !== committed) {\r\n setCommittedValue(current);\r\n onChange?.(current);\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleMouseDown);\r\n return () => document.removeEventListener('mousedown', handleMouseDown);\r\n }, [allowFreeText, options, onChange, setCommittedValue, setInputValue]);\r\n\r\n // ─── Input handlers ───────────────────────────────────────────────────────\r\n\r\n const handleFocus = useCallback(() => {\r\n openDropdown();\r\n }, [openDropdown]);\r\n\r\n const handleChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const query = e.target.value;\r\n setInputValue(query);\r\n onSearch?.(query);\r\n if (!isOpenRef.current) openDropdown();\r\n },\r\n [setInputValue, onSearch, openDropdown],\r\n );\r\n\r\n /**\r\n * On blur, validate the typed value against options.\r\n * A 0ms defer ensures a click on a posIcon button (X / chevron) inside the\r\n * Input completes its onClick before we run close logic, so we can check\r\n * document.activeElement reliably.\r\n */\r\n const handleBlur = useCallback(() => {\r\n const current = inputValueRef.current;\r\n const committed = committedValueRef.current;\r\n\r\n setTimeout(() => {\r\n // If focus came back inside the container (e.g., posIcon button clicked),\r\n // don't close or validate yet.\r\n if (containerRef.current?.contains(document.activeElement)) return;\r\n\r\n // Close\r\n isOpenRef.current = false;\r\n setIsOpen(false);\r\n setFocusedIndex(-1);\r\n setMenuKey((prev) => prev + 1);\r\n\r\n // Validate\r\n if (!allowFreeText) {\r\n const match = options.find((o) => o.label.toLowerCase() === current.toLowerCase());\r\n if (match) {\r\n if (match.value !== committed) {\r\n setCommittedValue(match.value);\r\n onChange?.(match.value);\r\n setInputValue(match.label);\r\n } else {\r\n // Normalize the display label (fix casing)\r\n setInputValue(match.label);\r\n }\r\n } else {\r\n // No match - revert to last committed value\r\n const revertMatch = options.find((o) => o.value === committed);\r\n setInputValue(revertMatch ? revertMatch.label : '');\r\n }\r\n } else {\r\n // allowFreeText: commit whatever the user typed\r\n if (current !== committed) {\r\n setCommittedValue(current);\r\n onChange?.(current);\r\n }\r\n }\r\n }, 0);\r\n }, [allowFreeText, options, onChange, setCommittedValue, setInputValue]);\r\n\r\n const handleKeyDown = useCallback(\r\n (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (disabled) return;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n if (!isOpenRef.current) {\r\n openDropdown();\r\n setFocusedIndex(0);\r\n } else {\r\n setFocusedIndex((prev) => {\r\n const next = prev < filteredOptions.length - 1 ? prev + 1 : 0;\r\n setTimeout(\r\n () =>\r\n optionRefs.current[next]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n }),\r\n 0,\r\n );\r\n return next;\r\n });\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n if (!isOpenRef.current) {\r\n openDropdown();\r\n setFocusedIndex(filteredOptions.length - 1);\r\n } else {\r\n setFocusedIndex((prev) => {\r\n const next = prev > 0 ? prev - 1 : filteredOptions.length - 1;\r\n setTimeout(\r\n () =>\r\n optionRefs.current[next]?.scrollIntoView({\r\n block: 'nearest',\r\n behavior: 'smooth',\r\n }),\r\n 0,\r\n );\r\n return next;\r\n });\r\n }\r\n break;\r\n\r\n case 'Enter':\r\n e.preventDefault();\r\n if (isOpenRef.current && focusedIndex >= 0 && focusedIndex < filteredOptions.length) {\r\n handleOptionSelect(filteredOptions[focusedIndex]);\r\n } else if (allowFreeText && inputValue.trim()) {\r\n const trimmed = inputValue.trim();\r\n setCommittedValue(trimmed);\r\n onChange?.(trimmed);\r\n closeDropdown();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n e.preventDefault();\r\n if (isOpenRef.current) {\r\n closeDropdown(true /* revert */);\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n [\r\n disabled,\r\n filteredOptions,\r\n focusedIndex,\r\n allowFreeText,\r\n inputValue,\r\n onChange,\r\n openDropdown,\r\n closeDropdown,\r\n setCommittedValue,\r\n ],\r\n );\r\n\r\n // ─── Option selection ─────────────────────────────────────────────────────\r\n\r\n const handleOptionSelect = useCallback(\r\n (option: ComboboxOption) => {\r\n if (option.disabled) return;\r\n setInputValue(option.label);\r\n setCommittedValue(option.value);\r\n onChange?.(option.value);\r\n closeDropdown();\r\n // Return focus to the input so the user can continue interacting\r\n inputRef.current?.focus();\r\n },\r\n [onChange, closeDropdown, setInputValue, setCommittedValue],\r\n );\r\n\r\n // ─── Clear ────────────────────────────────────────────────────────────────\r\n\r\n const handleClearClick = useCallback(() => {\r\n setInputValue('');\r\n setCommittedValue('');\r\n onChange?.('');\r\n // Re-focus input so the user can immediately start typing again\r\n inputRef.current?.focus();\r\n }, [onChange, setInputValue, setCommittedValue]);\r\n\r\n // ─── Chevron toggle ───────────────────────────────────────────────────────\r\n\r\n const handleChevronClick = useCallback(() => {\r\n if (isOpenRef.current) {\r\n closeDropdown();\r\n } else {\r\n openDropdown();\r\n }\r\n }, [closeDropdown, openDropdown]);\r\n\r\n // ─── Render: individual option ────────────────────────────────────────────\r\n\r\n const renderOptionItem = useCallback(\r\n (option: ComboboxOption, index: number): React.ReactNode => {\r\n const isSelected = option.value === committedValue;\r\n const isFocused = index === focusedIndex;\r\n\r\n const classes = [\r\n 'eidos-combobox-option',\r\n isSelected && 'eidos-combobox-option--selected',\r\n isFocused && 'eidos-combobox-option--focused',\r\n option.disabled && 'eidos-combobox-option--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div\r\n key={option.id}\r\n ref={(el) => {\r\n optionRefs.current[index] = el;\r\n }}\r\n className={classes}\r\n onClick={() => handleOptionSelect(option)}\r\n onMouseEnter={() => !option.disabled && setFocusedIndex(index)}\r\n role=\"option\"\r\n aria-selected={isSelected}\r\n aria-disabled={option.disabled}\r\n id={`${uid}-option-${index}`}\r\n >\r\n {renderOption ? (\r\n renderOption(option)\r\n ) : (\r\n <>\r\n <Check\r\n className={`eidos-combobox-option-icon${\r\n !isSelected ? ' eidos-combobox-option-icon--hidden' : ''\r\n }`}\r\n />\r\n <span className=\"eidos-combobox-option-label\">{option.label}</span>\r\n {option.description && (\r\n <span className=\"eidos-combobox-option-description\">{option.description}</span>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n );\r\n },\r\n [committedValue, focusedIndex, handleOptionSelect, renderOption, uid],\r\n );\r\n\r\n // ─── Render: dropdown content ─────────────────────────────────────────────\r\n\r\n const dropdownContent = useMemo(() => {\r\n if (loading) {\r\n return (\r\n <div className=\"eidos-combobox-loading\">\r\n <Loader2 className=\"eidos-combobox-loading-icon\" />\r\n <span>{loadingText}</span>\r\n </div>\r\n );\r\n }\r\n\r\n if (filteredOptions.length === 0) {\r\n return <div className=\"eidos-combobox-empty\">{emptyText}</div>;\r\n }\r\n\r\n return optionEntries.map((entry) => {\r\n if (entry.type === 'group') {\r\n return (\r\n <div key={entry.key} className=\"eidos-combobox-option-group-label\">\r\n {entry.group}\r\n </div>\r\n );\r\n }\r\n return renderOptionItem(entry.option, entry.index);\r\n });\r\n }, [loading, loadingText, filteredOptions.length, emptyText, optionEntries, renderOptionItem]);\r\n\r\n // ─── posIcon / posIconButton wiring ───────────────────────────────────────\r\n\r\n const hasClearableValue = clearable && !!inputValue;\r\n const posIcon = hasClearableValue ? X : ChevronDown;\r\n const posIconClick = hasClearableValue ? handleClearClick : handleChevronClick;\r\n\r\n // ─── CSS classes ──────────────────────────────────────────────────────────\r\n\r\n const containerClasses = [\r\n 'eidos-combobox',\r\n fullWidth && 'eidos-combobox--fullWidth',\r\n error && 'eidos-combobox--error',\r\n disabled && 'eidos-combobox--disabled',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const maxHeightValue = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\r\n\r\n // ─── Render ───────────────────────────────────────────────────────────────\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n className={containerClasses}\r\n aria-expanded={isOpen}\r\n aria-haspopup=\"listbox\"\r\n >\r\n <div ref={comboboxTriggerRef} className=\"eidos-combobox-trigger\">\r\n {/*\r\n The Input is a direct child of eidos-combobox-trigger.\r\n It is NOT inside the Dropdown trigger div, so clicking it\r\n never bubbles to Dropdown.handleTriggerClick and never\r\n accidentally toggles the dropdown closed mid-edit.\r\n */}\r\n <Input\r\n ref={inputRef}\r\n value={inputValue}\r\n onChange={handleChange}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n onKeyDown={handleKeyDown}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n size={size}\r\n fullWidth\r\n label={label}\r\n clearable={false} // we render our own clear via posIcon\r\n isSelect={false}\r\n posIcon={posIcon}\r\n posIconButton\r\n onPosIconClick={posIconClick}\r\n aria-autocomplete=\"list\"\r\n aria-controls={`${uid}-listbox`}\r\n aria-activedescendant={focusedIndex >= 0 ? `${uid}-option-${focusedIndex}` : undefined}\r\n />\r\n\r\n {/*\r\n The Dropdown trigger is a 0-height span placed AFTER the Input\r\n in the normal document flow. Its getBoundingClientRect sits at\r\n exactly the bottom edge of the Input, giving the Dropdown correct\r\n placement without any click-toggle collision with the Input above.\r\n closeOnClickOutside and closeOnEscape are disabled because we own\r\n those interactions in our mousedown listener and onKeyDown handler.\r\n */}\r\n <Dropdown\r\n key={menuKey}\r\n trigger={\r\n <span\r\n ref={dropdownSpanRef}\r\n className=\"eidos-combobox-dropdown-anchor\"\r\n aria-hidden=\"true\"\r\n />\r\n }\r\n content={\r\n <div\r\n id={`${uid}-listbox`}\r\n className=\"eidos-combobox-options\"\r\n role=\"listbox\"\r\n aria-label={label ?? 'Options'}\r\n // Prevent the input from blurring when the user clicks an option,\r\n // and mark this event so the click-outside handler ignores it.\r\n onMouseDown={(e) => e.preventDefault()}\r\n >\r\n {dropdownContent}\r\n </div>\r\n }\r\n triggerRef={comboboxTriggerRef as React.RefObject<HTMLElement | null>}\r\n maxHeight={maxHeightValue}\r\n autoWidth\r\n closeOnClickOutside={false}\r\n closeOnEscape={false}\r\n />\r\n </div>\r\n\r\n {hint && !error && <span className=\"eidos-combobox-hint\">{hint}</span>}\r\n {error && (\r\n <span className=\"eidos-combobox-error-message\">\r\n <CircleAlert className=\"eidos-combobox-error-icon\" />\r\n {error}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nCombobox.displayName = 'Combobox';\r\n"],"mappings":"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","names":["label"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/renderIcon.tsx"],"sourcesContent":["import React from 'react';\r\nimport { icons } from 'lucide-react';\r\n\r\nexport type IconType = React.ComponentType<{ className?: string }> | string;\r\n\r\n/**\r\n * Helper function to render icons dynamically\r\n * Supports both React components (Lucide, MUI, etc.) and string-based icon names\r\n *\r\n * @param icon - Icon component or string name (e.g., \"heart\" or \"arrow-right\")\r\n * @param className - Optional CSS class name to apply to the icon\r\n * @returns React node representing the icon, or null if no icon provided\r\n *\r\n * @example\r\n * // Component-based icon\r\n * import { Heart } from 'lucide-react';\r\n * renderIcon(Heart, 'my-icon-class');\r\n *\r\n * @example\r\n * // String-based Lucide icon (kebab-case converted to PascalCase)\r\n * renderIcon('heart', 'my-icon-class');\r\n * renderIcon('arrow-right', 'my-icon-class');\r\n *\r\n * @example\r\n * // String-based CSS class (for Font Awesome, Remixicon, etc.)\r\n * renderIcon('fas fa-heart', 'my-icon-class');\r\n */\r\nexport const renderIcon = (icon: IconType | undefined, className?: string): React.ReactNode => {\r\n if (!icon) return null;\r\n\r\n if (typeof icon === 'string') {\r\n // Convert kebab-case to PascalCase for Lucide icons\r\n const iconName = icon\r\n .split('-')\r\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join('');\r\n\r\n // Try to find the icon in lucide-react\r\n const LucideIcon = icons[iconName as keyof typeof icons] as\r\n React.ComponentType<{ className?: string }> | undefined;\r\n\r\n if (LucideIcon) {\r\n return <LucideIcon className={className} aria-hidden=\"true\" />;\r\n }\r\n\r\n // Fallback: render as a CSS class (for Font Awesome, Remixicon, etc.)\r\n return <i className={`${icon} ${className || ''}`} aria-hidden=\"true\" />;\r\n }\r\n\r\n // It's a React component\r\n const IconComponent = icon;\r\n return <IconComponent className={className} aria-hidden=\"true\" />;\r\n};\r\n"],"mappings":";AACA,SAAS,aAAa;AAyCT;AAfN,IAAM,aAAa,CAAC,MAA4B,cAAwC;AAC7F,MAAI,CAAC,KAAM,QAAO;AAElB,MAAI,OAAO,SAAS,UAAU;AAE5B,UAAM,WAAW,KACd,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,EAAE;AAGV,UAAM,aAAa,MAAM,QAA8B;AAGvD,QAAI,YAAY;AACd,aAAO,oBAAC,cAAW,WAAsB,eAAY,QAAO;AAAA,IAC9D;AAGA,WAAO,oBAAC,OAAE,WAAW,GAAG,IAAI,IAAI,aAAa,EAAE,IAAI,eAAY,QAAO;AAAA,EACxE;AAGA,QAAM,gBAAgB;AACtB,SAAO,oBAAC,iBAAc,WAAsB,eAAY,QAAO;AACjE;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ContextMenu/ContextMenu.component.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { MenuPanel } from '../Menu';\r\nimport type { MenuItem } from '../Menu';\r\nimport type { ContextMenuProps } from './ContextMenu.types';\r\n\r\ninterface MenuPosition {\r\n x: number;\r\n y: number;\r\n}\r\n\r\n/**\r\n * ContextMenu - wraps any content and attaches a right-click (or long-press)\r\n * triggered menu positioned at the cursor.\r\n *\r\n * The browser's native context menu is suppressed when `disabled` is false.\r\n * The menu closes on: click outside, item selection, Escape, and scroll.\r\n *\r\n * @example\r\n * ```tsx\r\n * <ContextMenu\r\n * items={[\r\n * { type: 'item', id: 'copy', label: 'Copy', icon: Copy, onClick: () => copy() },\r\n * { type: 'item', id: 'cut', label: 'Cut', icon: Scissors, onClick: () => cut() },\r\n * { type: 'separator', id: 'sep1' },\r\n * { type: 'item', id: 'delete', label: 'Delete', icon: Trash2, onClick: () => remove(), disabled: true },\r\n * ]}\r\n * >\r\n * <div className=\"canvas-area\">...</div>\r\n * </ContextMenu>\r\n * ```\r\n */\r\nexport const ContextMenu: React.FC<ContextMenuProps> = ({\r\n items,\r\n children,\r\n disabled = false,\r\n className = '',\r\n}) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [position, setPosition] = useState<MenuPosition>({ x: 0, y: 0 });\r\n const [isPositioned, setIsPositioned] = useState(false);\r\n const menuRef = useRef<HTMLDivElement>(null);\r\n\r\n const close = useCallback(() => {\r\n setIsOpen(false);\r\n setIsPositioned(false);\r\n }, []);\r\n\r\n // Measure the menu panel after it renders and clamp to viewport edges.\r\n useEffect(() => {\r\n if (!isOpen || !menuRef.current) return;\r\n\r\n const menu = menuRef.current;\r\n const { width, height } = menu.getBoundingClientRect();\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n const GAP = 4; // px clearance from viewport edge\r\n\r\n const clampedX = Math.min(position.x, vw - width - GAP);\r\n const clampedY = Math.min(position.y, vh - height - GAP);\r\n\r\n menu.style.left = `${Math.max(GAP, clampedX)}px`;\r\n menu.style.top = `${Math.max(GAP, clampedY)}px`;\r\n setIsPositioned(true);\r\n }, [isOpen, position]);\r\n\r\n // Close on click outside.\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleMouseDown = (e: MouseEvent) => {\r\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\r\n close();\r\n }\r\n };\r\n\r\n document.addEventListener('mousedown', handleMouseDown);\r\n return () => document.removeEventListener('mousedown', handleMouseDown);\r\n }, [isOpen, close]);\r\n\r\n // Close on Escape or scroll.\r\n useEffect(() => {\r\n if (!isOpen) return;\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') close();\r\n };\r\n\r\n const handleScroll = () => close();\r\n\r\n document.addEventListener('keydown', handleKeyDown);\r\n window.addEventListener('scroll', handleScroll, true); // capture: catches nested scrollers\r\n return () => {\r\n document.removeEventListener('keydown', handleKeyDown);\r\n window.removeEventListener('scroll', handleScroll, true);\r\n };\r\n }, [isOpen, close]);\r\n\r\n const handleContextMenu = (e: React.MouseEvent) => {\r\n if (disabled) return;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsOpen(true);\r\n setIsPositioned(false);\r\n setPosition({ x: e.clientX, y: e.clientY });\r\n };\r\n\r\n const handleItemClick = useCallback(\r\n (_item: MenuItem) => {\r\n close();\r\n },\r\n [close],\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n className={['eidos-context-menu-target', className].filter(Boolean).join(' ')}\r\n onContextMenu={handleContextMenu}\r\n >\r\n {children}\r\n </div>\r\n\r\n {isOpen &&\r\n createPortal(\r\n <div\r\n ref={menuRef}\r\n className={[\r\n 'eidos-context-menu-panel',\r\n isPositioned && 'eidos-context-menu-panel--positioned',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n style={{\r\n top: position.y,\r\n left: position.x,\r\n }}\r\n >\r\n <MenuPanel items={items} onItemClick={handleItemClick} />\r\n </div>,\r\n document.body,\r\n )}\r\n </>\r\n );\r\n};\r\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-YKECQKOV.cjs","../src/components/Navigation/Navigation.component.tsx"],"names":[],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-YKECQKOV.cjs","sourcesContent":[null,"import React, { useCallback, useEffect, useState } from 'react';\r\nimport { SquareChevronLeft, SquareChevronRight } from 'lucide-react';\r\nimport type { NavigationLogo, NavigationProps } from './Navigation.types';\r\nimport { Avatar } from '../Avatar';\r\nimport { IconButton } from '../Button';\r\nimport { Tooltip } from '../Tooltip';\r\nimport { renderIcon } from '../../utils';\r\nimport './Navigation.scss';\r\n\r\n/**\r\n * Renders a custom brand logo, guaranteeing correct aspect-ratio rendering\r\n * regardless of whether the source image is vertical, horizontal, or square\r\n * - and regardless of how much width is actually available, expanded or\r\n * collapsed. Deliberately no JS sizing/measurement at all: a fixed `height`,\r\n * `width: auto` (derived from the image's own intrinsic ratio), a `max-width`\r\n * expressed as `min(72px, 100%)` (see `.eidos-navigation__brand-logo` in\r\n * Navigation.scss) so it never renders wider than whatever space its\r\n * container - the rail, expanded or collapsed - actually has, and\r\n * `object-fit: contain` so it's letterboxed rather than distorted if that\r\n * ever clamps it below its natural width-at-32px-tall. Centering is handled\r\n * separately, at the row level - see `&__brand--logo-only` in Navigation.scss.\r\n */\r\nconst NavigationBrandLogo: React.FC<{ logo: NavigationLogo }> = ({ logo }) => (\r\n <img src={logo.src} alt={logo.alt} className=\"eidos-navigation__brand-logo\" />\r\n);\r\n\r\nexport const Navigation: React.FC<NavigationProps> = ({\r\n brand,\r\n items,\r\n footer,\r\n collapsed: collapsedProp,\r\n defaultCollapsed = false,\r\n onCollapsedChange,\r\n collapseBelow = 768,\r\n collapsible = true,\r\n className = '',\r\n}) => {\r\n // ── Controlled / uncontrolled collapsed state ─────────────────────────────\r\n // Mirrors CommandPalette's `open`/`defaultOpen` pattern - omitting\r\n // `collapsed` lets Navigation own its state entirely, while passing it\r\n // (+ `onCollapsedChange`) keeps full external control for consumers who\r\n // need to persist the preference or drive it from a responsive breakpoint.\r\n const isControlled = collapsedProp !== undefined;\r\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\r\n const collapsed = isControlled ? collapsedProp : internalCollapsed;\r\n\r\n // Shared by the manual toggle button and `collapseBelow` below - uncontrolled\r\n // flips the internal state directly, controlled defers to `onCollapsedChange`\r\n // since Navigation can't change `collapsed` itself.\r\n const applyCollapsed = useCallback(\r\n (next: boolean) => {\r\n if (!isControlled) setInternalCollapsed(next);\r\n onCollapsedChange?.(next);\r\n },\r\n [isControlled, onCollapsedChange],\r\n );\r\n\r\n const toggleCollapsed = useCallback(() => {\r\n applyCollapsed(!collapsed);\r\n }, [applyCollapsed, collapsed]);\r\n\r\n // Auto-collapse/expand at a viewport breakpoint. `matchMedia`'s `change`\r\n // event only fires exactly at the crossing point, not on every resize\r\n // tick, so a manual toggle in between crossings is left alone until the\r\n // viewport actually crosses the breakpoint again.\r\n useEffect(() => {\r\n if (collapseBelow === undefined) return;\r\n if (typeof window === 'undefined' || !window.matchMedia) return;\r\n\r\n const query = window.matchMedia(`(max-width: ${collapseBelow}px)`);\r\n\r\n applyCollapsed(query.matches);\r\n\r\n const handleChange = (e: MediaQueryListEvent) => applyCollapsed(e.matches);\r\n query.addEventListener('change', handleChange);\r\n return () => query.removeEventListener('change', handleChange);\r\n }, [collapseBelow, applyCollapsed]);\r\n\r\n const classes = ['eidos-navigation', collapsed && 'eidos-navigation--collapsed', className]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n // A `logo` brand has no `name` text alongside it (see the discriminated\r\n // union in Navigation.types.ts), so there's never a second, variable-width\r\n // sibling competing for space - unlike the `name` variant, it's always\r\n // safe to just center it outright, in both expanded and collapsed states,\r\n // with nothing further to compute. See `&__brand--logo-only` in\r\n // Navigation.scss.\r\n const brandClasses = [\r\n 'eidos-navigation__brand',\r\n brand.logo && 'eidos-navigation__brand--logo-only',\r\n brand.onClick && 'eidos-navigation__brand--clickable',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const brandAccessibleName = brand.logo ? brand.logo.alt : brand.name;\r\n\r\n return (\r\n <nav className={classes} aria-label=\"Main\">\r\n <div\r\n className={brandClasses}\r\n onClick={brand.onClick}\r\n role={brand.onClick ? 'button' : undefined}\r\n tabIndex={brand.onClick ? 0 : undefined}\r\n // Only a real interactive control (role=\"button\") reliably exposes\r\n // `aria-label` as its accessible name - a plain, non-interactive div\r\n // doesn't, so the visible (if currently faded) text remains the only\r\n // way assistive tech gets the brand name in that case.\r\n aria-label={brand.onClick ? brandAccessibleName : undefined}\r\n onKeyDown={\r\n brand.onClick\r\n ? (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n brand.onClick?.();\r\n }\r\n }\r\n : undefined\r\n }\r\n >\r\n {brand.logo ? (\r\n <NavigationBrandLogo logo={brand.logo} />\r\n ) : (\r\n <>\r\n <Avatar name={brand.name} shape=\"square\" size=\"sm\" />\r\n {/* Only redundant with the wrapper's own `aria-label` when\r\n `brand.onClick` is set (see the note on it above) - otherwise\r\n this is the only accessible text for the brand at all. */}\r\n <span\r\n className=\"eidos-navigation__brand-name\"\r\n aria-hidden={brand.onClick ? true : undefined}\r\n >\r\n {brand.name}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n <ul className=\"eidos-navigation__items\">\r\n {items.map((item) => (\r\n <li key={item.id} className=\"eidos-navigation__item-wrapper\">\r\n {/* Always wrapped (disabled rather than omitted while expanded)\r\n so the button underneath is never unmounted/remounted across\r\n a collapse toggle - that would otherwise reset its own CSS\r\n transitions (gap, padding, justify-content) partway through\r\n the rail's width animation, snapping instead of easing. */}\r\n <Tooltip message={item.label} placement=\"right\" disabled={!collapsed}>\r\n <button\r\n type=\"button\"\r\n className={[\r\n 'eidos-navigation__item',\r\n item.active && 'eidos-navigation__item--active',\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n disabled={item.disabled}\r\n onClick={item.onClick}\r\n aria-current={item.active ? 'page' : undefined}\r\n // The label fades out visually while collapsed (see\r\n // `.eidos-navigation__item-label` in Navigation.scss) but\r\n // isn't removed from the DOM, so it's given directly as the\r\n // accessible name here instead of relying on the (also\r\n // fading) visible text, and hidden from assistive tech below\r\n // to avoid it being announced twice alongside the `Tooltip`.\r\n aria-label={collapsed ? item.label : undefined}\r\n >\r\n {item.icon && renderIcon(item.icon, 'eidos-navigation__item-icon')}\r\n <span className=\"eidos-navigation__item-label\" aria-hidden={collapsed || undefined}>\r\n {item.label}\r\n </span>\r\n </button>\r\n </Tooltip>\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n {footer && <div className=\"eidos-navigation__footer\">{footer}</div>}\r\n\r\n {/* Floats half in/half out of the rail's right edge (see `&__toggle`\r\n in Navigation.scss) rather than sitting in its own row - a\r\n dedicated row reserved space in the flex column even when there\r\n were too few items to need it.\r\n\r\n The positioning has to live on this wrapping `<span>`, not on the\r\n `IconButton` itself: its `tooltip` prop makes `Button` wrap it in\r\n `Tooltip`'s own `.eidos-tooltip-trigger` div, which - not the\r\n button - is the actual flex child of `.eidos-navigation`. Removing\r\n only the inner button from flow left that outer wrapper still\r\n in-flow, still consuming space and still getting `gap` applied\r\n around it, which is exactly why a gap remained. */}\r\n {collapsible && (\r\n <span className=\"eidos-navigation__toggle\">\r\n <IconButton\r\n icon={collapsed ? SquareChevronRight : SquareChevronLeft}\r\n variant=\"text\"\r\n color=\"secondary\"\r\n size=\"sm\"\r\n tooltip={collapsed ? 'Expand navigation' : 'Collapse navigation'}\r\n aria-label={collapsed ? 'Expand navigation' : 'Collapse navigation'}\r\n onClick={toggleCollapsed}\r\n />\r\n </span>\r\n )}\r\n </nav>\r\n );\r\n};\r\n\r\nNavigation.displayName = 'Navigation';\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-YLKESEHQ.cjs","../src/components/NumberInput/NumberInput.component.tsx"],"names":[],"mappings":"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","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/chunk-YLKESEHQ.cjs","sourcesContent":[null,"import React, { forwardRef, useState, useEffect, useId } from 'react';\r\nimport { Minus, Plus } from 'lucide-react';\r\nimport type { NumberInputProps } from './NumberInput.types';\r\n\r\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\r\n (\r\n {\r\n value,\r\n defaultValue = 0,\r\n onChange,\r\n min,\r\n max,\r\n step = 1,\r\n precision = 0,\r\n placeholder,\r\n disabled = false,\r\n readOnly = false,\r\n label,\r\n helperText,\r\n error = false,\r\n errorMessage,\r\n size = 'md',\r\n fullWidth = false,\r\n allowTyping = true,\r\n className = '',\r\n id,\r\n name,\r\n },\r\n ref,\r\n ) => {\r\n const generatedId = useId();\r\n const inputId = id || `number-input-${generatedId}`;\r\n\r\n // Controlled / uncontrolled bridge\r\n const isControlled = value !== undefined;\r\n const [localValue, setLocalValue] = useState<number>(defaultValue);\r\n\r\n // Intermediate text while the user is actively typing\r\n const [inputText, setInputText] = useState<string>(defaultValue.toFixed(precision));\r\n const [isFocused, setIsFocused] = useState(false);\r\n\r\n const currentValue = isControlled ? value! : localValue;\r\n\r\n // When min/max props change (e.g. via Storybook controls), clamp the\r\n // uncontrolled localValue so the display never shows an out-of-range value.\r\n useEffect(() => {\r\n if (isControlled) return;\r\n setLocalValue((prev) => {\r\n let result = prev;\r\n if (min !== undefined) result = Math.max(min, result);\r\n if (max !== undefined) result = Math.min(max, result);\r\n return parseFloat(result.toFixed(precision));\r\n });\r\n }, [min, max, precision, isControlled]);\r\n\r\n // Clamp to [min, max] and apply precision rounding\r\n const clampValue = (raw: number): number => {\r\n let result = raw;\r\n if (min !== undefined) result = Math.max(min, result);\r\n if (max !== undefined) result = Math.min(max, result);\r\n return parseFloat(result.toFixed(precision));\r\n };\r\n\r\n const commitValue = (newVal: number) => {\r\n const clamped = clampValue(newVal);\r\n if (!isControlled) setLocalValue(clamped);\r\n onChange?.(clamped);\r\n };\r\n\r\n // ── Stepper buttons ────────────────────────────────────────────────────\r\n const handleDecrement = () => {\r\n if (disabled || readOnly) return;\r\n commitValue(currentValue - step);\r\n };\r\n\r\n const handleIncrement = () => {\r\n if (disabled || readOnly) return;\r\n commitValue(currentValue + step);\r\n };\r\n\r\n // ── Typing mode handlers ───────────────────────────────────────────────\r\n const handleTextFocus = () => {\r\n setInputText(currentValue.toFixed(precision));\r\n setIsFocused(true);\r\n };\r\n\r\n const handleTextChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setInputText(e.target.value);\r\n };\r\n\r\n const handleTextBlur = () => {\r\n setIsFocused(false);\r\n const parsed = parseFloat(inputText);\r\n if (!isNaN(parsed)) {\r\n const clamped = clampValue(parsed);\r\n if (!isControlled) setLocalValue(clamped);\r\n onChange?.(clamped);\r\n setInputText(clamped.toFixed(precision));\r\n } else {\r\n // Revert to the last known-good value\r\n setInputText(currentValue.toFixed(precision));\r\n }\r\n };\r\n\r\n // ArrowUp / ArrowDown keyboard support for both display modes\r\n const handleDisplayKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n handleIncrement();\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n handleDecrement();\r\n }\r\n };\r\n\r\n // ── Display value ──────────────────────────────────────────────────────\r\n // Show intermediate inputText while focused in typing mode;\r\n // otherwise always derive from the real (controlled/uncontrolled) value.\r\n const formattedValue = currentValue.toFixed(precision);\r\n const displayedText = allowTyping && isFocused ? inputText : formattedValue;\r\n\r\n // ── Disabled states for buttons ────────────────────────────────────────\r\n const isDecrementDisabled = disabled || readOnly || (min !== undefined && currentValue <= min);\r\n const isIncrementDisabled = disabled || readOnly || (max !== undefined && currentValue >= max);\r\n\r\n // ── CSS classes ────────────────────────────────────────────────────────\r\n const rootClasses = [\r\n 'eidos-number-input',\r\n `eidos-number-input--${size}`,\r\n fullWidth && 'eidos-number-input--fullWidth',\r\n error && 'eidos-number-input--error',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const controlClasses = [\r\n 'eidos-number-input-control',\r\n disabled && 'eidos-number-input-control--disabled',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div className={rootClasses}>\r\n {label && (\r\n <label htmlFor={allowTyping ? inputId : undefined} className=\"eidos-number-input-label\">\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div\r\n className={controlClasses}\r\n role={allowTyping ? undefined : 'spinbutton'}\r\n aria-valuemin={allowTyping ? undefined : min}\r\n aria-valuemax={allowTyping ? undefined : max}\r\n aria-valuenow={allowTyping ? undefined : currentValue}\r\n aria-label={allowTyping ? undefined : (label ?? 'Number input')}\r\n aria-disabled={disabled || undefined}\r\n tabIndex={!allowTyping && !disabled ? 0 : undefined}\r\n onKeyDown={!allowTyping ? handleDisplayKeyDown : undefined}\r\n >\r\n <button\r\n type=\"button\"\r\n className=\"eidos-number-input-btn\"\r\n onClick={handleDecrement}\r\n disabled={isDecrementDisabled}\r\n aria-label=\"Decrease\"\r\n >\r\n <Minus />\r\n </button>\r\n\r\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\r\n\r\n {allowTyping ? (\r\n <input\r\n id={inputId}\r\n type=\"text\"\r\n className=\"eidos-number-input-display\"\r\n value={displayedText}\r\n onChange={handleTextChange}\r\n onFocus={handleTextFocus}\r\n onBlur={handleTextBlur}\r\n onKeyDown={handleDisplayKeyDown}\r\n placeholder={placeholder}\r\n disabled={disabled}\r\n readOnly={readOnly}\r\n inputMode=\"decimal\"\r\n role=\"spinbutton\"\r\n aria-valuemin={min}\r\n aria-valuemax={max}\r\n aria-valuenow={currentValue}\r\n aria-label={label ?? 'Number input'}\r\n />\r\n ) : (\r\n <span className=\"eidos-number-input-display\" aria-hidden=\"true\">\r\n {placeholder && formattedValue === (0).toFixed(precision) && !isFocused\r\n ? placeholder\r\n : formattedValue}\r\n </span>\r\n )}\r\n\r\n <div className=\"eidos-number-input-divider\" aria-hidden=\"true\" />\r\n\r\n <button\r\n type=\"button\"\r\n className=\"eidos-number-input-btn\"\r\n onClick={handleIncrement}\r\n disabled={isIncrementDisabled}\r\n aria-label=\"Increase\"\r\n >\r\n <Plus />\r\n </button>\r\n </div>\r\n\r\n {/* Hidden native <input type=\"number\"> for form integration */}\r\n <input\r\n ref={ref}\r\n type=\"number\"\r\n name={name}\r\n value={currentValue}\r\n onChange={() => {}}\r\n className=\"eidos-number-input-hidden\"\r\n tabIndex={-1}\r\n aria-hidden=\"true\"\r\n disabled={disabled}\r\n readOnly={readOnly}\r\n min={min}\r\n max={max}\r\n step={step}\r\n />\r\n\r\n {helperText && !error && <span className=\"eidos-number-input-helper\">{helperText}</span>}\r\n\r\n {error && errorMessage && (\r\n <span className=\"eidos-number-input-error\" role=\"alert\">\r\n {errorMessage}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nNumberInput.displayName = 'NumberInput';\r\n"]}