eidos-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +175 -0
  3. package/dist/Breadcrumb.types-DaykU-C8.d.cts +20 -0
  4. package/dist/Breadcrumb.types-DaykU-C8.d.ts +20 -0
  5. package/dist/Button.types-BH0CPyPx.d.ts +33 -0
  6. package/dist/Button.types-DZRCVqyN.d.cts +33 -0
  7. package/dist/CommandPalette.types-DRMMS_ev.d.cts +73 -0
  8. package/dist/CommandPalette.types-DRMMS_ev.d.ts +73 -0
  9. package/dist/Footer.types-Dv2TPN2J.d.cts +24 -0
  10. package/dist/Footer.types-Dv2TPN2J.d.ts +24 -0
  11. package/dist/Header.types-BZi80bWz.d.cts +17 -0
  12. package/dist/Header.types-DJt-q01P.d.ts +17 -0
  13. package/dist/Input.types-DFZNyJGF.d.cts +45 -0
  14. package/dist/Input.types-XrJTI0JC.d.ts +45 -0
  15. package/dist/Menu.types-DNIpjSAK.d.ts +49 -0
  16. package/dist/Menu.types-DwcuCZM7.d.cts +49 -0
  17. package/dist/Navigation.types-Ctu5mlTa.d.cts +94 -0
  18. package/dist/Navigation.types-DVcLJnrB.d.ts +94 -0
  19. package/dist/Table.types-Bv9l7qxd.d.ts +103 -0
  20. package/dist/Table.types-DQ0ReOLj.d.cts +103 -0
  21. package/dist/Toolbar.types-BGD57Uhm.d.ts +22 -0
  22. package/dist/Toolbar.types-tQkLmPIu.d.cts +22 -0
  23. package/dist/accordion/index.cjs +10 -0
  24. package/dist/accordion/index.cjs.map +1 -0
  25. package/dist/accordion/index.d.cts +39 -0
  26. package/dist/accordion/index.d.ts +39 -0
  27. package/dist/accordion/index.js +10 -0
  28. package/dist/accordion/index.js.map +1 -0
  29. package/dist/alert/index.cjs +12 -0
  30. package/dist/alert/index.cjs.map +1 -0
  31. package/dist/alert/index.d.cts +29 -0
  32. package/dist/alert/index.d.ts +29 -0
  33. package/dist/alert/index.js +12 -0
  34. package/dist/alert/index.js.map +1 -0
  35. package/dist/avatar/index.cjs +10 -0
  36. package/dist/avatar/index.cjs.map +1 -0
  37. package/dist/avatar/index.d.cts +26 -0
  38. package/dist/avatar/index.d.ts +26 -0
  39. package/dist/avatar/index.js +10 -0
  40. package/dist/avatar/index.js.map +1 -0
  41. package/dist/badge/index.cjs +8 -0
  42. package/dist/badge/index.cjs.map +1 -0
  43. package/dist/badge/index.d.cts +27 -0
  44. package/dist/badge/index.d.ts +27 -0
  45. package/dist/badge/index.js +8 -0
  46. package/dist/badge/index.js.map +1 -0
  47. package/dist/breadcrumb/index.cjs +8 -0
  48. package/dist/breadcrumb/index.cjs.map +1 -0
  49. package/dist/breadcrumb/index.d.cts +7 -0
  50. package/dist/breadcrumb/index.d.ts +7 -0
  51. package/dist/breadcrumb/index.js +8 -0
  52. package/dist/breadcrumb/index.js.map +1 -0
  53. package/dist/button/index.cjs +14 -0
  54. package/dist/button/index.cjs.map +1 -0
  55. package/dist/button/index.d.cts +21 -0
  56. package/dist/button/index.d.ts +21 -0
  57. package/dist/button/index.js +14 -0
  58. package/dist/button/index.js.map +1 -0
  59. package/dist/button-group/index.cjs +8 -0
  60. package/dist/button-group/index.cjs.map +1 -0
  61. package/dist/button-group/index.d.cts +46 -0
  62. package/dist/button-group/index.d.ts +46 -0
  63. package/dist/button-group/index.js +8 -0
  64. package/dist/button-group/index.js.map +1 -0
  65. package/dist/card/index.cjs +8 -0
  66. package/dist/card/index.cjs.map +1 -0
  67. package/dist/card/index.d.cts +18 -0
  68. package/dist/card/index.d.ts +18 -0
  69. package/dist/card/index.js +8 -0
  70. package/dist/card/index.js.map +1 -0
  71. package/dist/checkbox/index.cjs +9 -0
  72. package/dist/checkbox/index.cjs.map +1 -0
  73. package/dist/checkbox/index.d.cts +16 -0
  74. package/dist/checkbox/index.d.ts +16 -0
  75. package/dist/checkbox/index.js +9 -0
  76. package/dist/checkbox/index.js.map +1 -0
  77. package/dist/chip/index.cjs +11 -0
  78. package/dist/chip/index.cjs.map +1 -0
  79. package/dist/chip/index.d.cts +27 -0
  80. package/dist/chip/index.d.ts +27 -0
  81. package/dist/chip/index.js +11 -0
  82. package/dist/chip/index.js.map +1 -0
  83. package/dist/chunk-2HTBZGBP.cjs +113 -0
  84. package/dist/chunk-2HTBZGBP.cjs.map +1 -0
  85. package/dist/chunk-2JWY36LD.cjs +112 -0
  86. package/dist/chunk-2JWY36LD.cjs.map +1 -0
  87. package/dist/chunk-2YQE26EK.js +54 -0
  88. package/dist/chunk-2YQE26EK.js.map +1 -0
  89. package/dist/chunk-2ZWBN3LK.cjs +92 -0
  90. package/dist/chunk-2ZWBN3LK.cjs.map +1 -0
  91. package/dist/chunk-3ETWFS2N.cjs +40 -0
  92. package/dist/chunk-3ETWFS2N.cjs.map +1 -0
  93. package/dist/chunk-3KAR5KCS.cjs +47 -0
  94. package/dist/chunk-3KAR5KCS.cjs.map +1 -0
  95. package/dist/chunk-3RUIKBH4.cjs +1 -0
  96. package/dist/chunk-3RUIKBH4.cjs.map +1 -0
  97. package/dist/chunk-3SKI6FXB.js +40 -0
  98. package/dist/chunk-3SKI6FXB.js.map +1 -0
  99. package/dist/chunk-3YPTYI7R.js +194 -0
  100. package/dist/chunk-3YPTYI7R.js.map +1 -0
  101. package/dist/chunk-4NUZP66U.js +299 -0
  102. package/dist/chunk-4NUZP66U.js.map +1 -0
  103. package/dist/chunk-5D3LIJYW.cjs +299 -0
  104. package/dist/chunk-5D3LIJYW.cjs.map +1 -0
  105. package/dist/chunk-5QG2I3FK.cjs +169 -0
  106. package/dist/chunk-5QG2I3FK.cjs.map +1 -0
  107. package/dist/chunk-5TGBNYZK.cjs +11 -0
  108. package/dist/chunk-5TGBNYZK.cjs.map +1 -0
  109. package/dist/chunk-5WRI5ZAA.js +31 -0
  110. package/dist/chunk-5WRI5ZAA.js.map +1 -0
  111. package/dist/chunk-63N2KZZX.cjs +54 -0
  112. package/dist/chunk-63N2KZZX.cjs.map +1 -0
  113. package/dist/chunk-66R54X6R.js +1 -0
  114. package/dist/chunk-66R54X6R.js.map +1 -0
  115. package/dist/chunk-6NZXWKUE.js +1 -0
  116. package/dist/chunk-6NZXWKUE.js.map +1 -0
  117. package/dist/chunk-6P4WYB3B.js +169 -0
  118. package/dist/chunk-6P4WYB3B.js.map +1 -0
  119. package/dist/chunk-6QFT3BUD.cjs +28 -0
  120. package/dist/chunk-6QFT3BUD.cjs.map +1 -0
  121. package/dist/chunk-6USUVU6J.js +26 -0
  122. package/dist/chunk-6USUVU6J.js.map +1 -0
  123. package/dist/chunk-73EKJU4G.js +11 -0
  124. package/dist/chunk-73EKJU4G.js.map +1 -0
  125. package/dist/chunk-7IOOFKG3.js +26 -0
  126. package/dist/chunk-7IOOFKG3.js.map +1 -0
  127. package/dist/chunk-7KGV6YCG.cjs +54 -0
  128. package/dist/chunk-7KGV6YCG.cjs.map +1 -0
  129. package/dist/chunk-7NZTRSMT.js +1484 -0
  130. package/dist/chunk-7NZTRSMT.js.map +1 -0
  131. package/dist/chunk-7R7IFWGB.cjs +86 -0
  132. package/dist/chunk-7R7IFWGB.cjs.map +1 -0
  133. package/dist/chunk-A35Y5MRJ.js +235 -0
  134. package/dist/chunk-A35Y5MRJ.js.map +1 -0
  135. package/dist/chunk-AOV32YBE.js +113 -0
  136. package/dist/chunk-AOV32YBE.js.map +1 -0
  137. package/dist/chunk-AUFCW7QU.cjs +526 -0
  138. package/dist/chunk-AUFCW7QU.cjs.map +1 -0
  139. package/dist/chunk-BFYSYUA6.cjs +125 -0
  140. package/dist/chunk-BFYSYUA6.cjs.map +1 -0
  141. package/dist/chunk-BTPCSBGP.js +1622 -0
  142. package/dist/chunk-BTPCSBGP.js.map +1 -0
  143. package/dist/chunk-C7F2VFAI.cjs +259 -0
  144. package/dist/chunk-C7F2VFAI.cjs.map +1 -0
  145. package/dist/chunk-CDV2OAS3.cjs +235 -0
  146. package/dist/chunk-CDV2OAS3.cjs.map +1 -0
  147. package/dist/chunk-CJUZDUXW.cjs +79 -0
  148. package/dist/chunk-CJUZDUXW.cjs.map +1 -0
  149. package/dist/chunk-CKH36D7H.js +28 -0
  150. package/dist/chunk-CKH36D7H.js.map +1 -0
  151. package/dist/chunk-D7PGZ3M3.cjs +117 -0
  152. package/dist/chunk-D7PGZ3M3.cjs.map +1 -0
  153. package/dist/chunk-DFADZZ3K.js +126 -0
  154. package/dist/chunk-DFADZZ3K.js.map +1 -0
  155. package/dist/chunk-DI2VKKLW.js +1 -0
  156. package/dist/chunk-DI2VKKLW.js.map +1 -0
  157. package/dist/chunk-DK4S3EHG.js +29 -0
  158. package/dist/chunk-DK4S3EHG.js.map +1 -0
  159. package/dist/chunk-DZUJEN5N.cjs +31 -0
  160. package/dist/chunk-DZUJEN5N.cjs.map +1 -0
  161. package/dist/chunk-E2B33QB7.js +97 -0
  162. package/dist/chunk-E2B33QB7.js.map +1 -0
  163. package/dist/chunk-E3XATJ63.js +4418 -0
  164. package/dist/chunk-E3XATJ63.js.map +1 -0
  165. package/dist/chunk-EACNRR3C.cjs +1 -0
  166. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  167. package/dist/chunk-EQ6BNPTL.cjs +39 -0
  168. package/dist/chunk-EQ6BNPTL.cjs.map +1 -0
  169. package/dist/chunk-F54MVGKO.js +342 -0
  170. package/dist/chunk-F54MVGKO.js.map +1 -0
  171. package/dist/chunk-FNUOTM44.cjs +238 -0
  172. package/dist/chunk-FNUOTM44.cjs.map +1 -0
  173. package/dist/chunk-FO5FNTJX.js +69 -0
  174. package/dist/chunk-FO5FNTJX.js.map +1 -0
  175. package/dist/chunk-FQZ6F7FQ.cjs +1 -0
  176. package/dist/chunk-FQZ6F7FQ.cjs.map +1 -0
  177. package/dist/chunk-G2FANEA2.cjs +101 -0
  178. package/dist/chunk-G2FANEA2.cjs.map +1 -0
  179. package/dist/chunk-G36S5CWN.cjs +26 -0
  180. package/dist/chunk-G36S5CWN.cjs.map +1 -0
  181. package/dist/chunk-GI7WPGP2.cjs +454 -0
  182. package/dist/chunk-GI7WPGP2.cjs.map +1 -0
  183. package/dist/chunk-GL4DHGQE.js +1316 -0
  184. package/dist/chunk-GL4DHGQE.js.map +1 -0
  185. package/dist/chunk-GOVOQZYN.js +18 -0
  186. package/dist/chunk-GOVOQZYN.js.map +1 -0
  187. package/dist/chunk-GRH57M3E.js +88 -0
  188. package/dist/chunk-GRH57M3E.js.map +1 -0
  189. package/dist/chunk-H523JFY2.js +303 -0
  190. package/dist/chunk-H523JFY2.js.map +1 -0
  191. package/dist/chunk-H56YUMFB.cjs +1622 -0
  192. package/dist/chunk-H56YUMFB.cjs.map +1 -0
  193. package/dist/chunk-HO7P6IJO.js +238 -0
  194. package/dist/chunk-HO7P6IJO.js.map +1 -0
  195. package/dist/chunk-HPIBYEGE.cjs +1484 -0
  196. package/dist/chunk-HPIBYEGE.cjs.map +1 -0
  197. package/dist/chunk-HQ4KZRFH.js +67 -0
  198. package/dist/chunk-HQ4KZRFH.js.map +1 -0
  199. package/dist/chunk-HUNMRKGE.js +21 -0
  200. package/dist/chunk-HUNMRKGE.js.map +1 -0
  201. package/dist/chunk-I44YNYI6.cjs +1 -0
  202. package/dist/chunk-I44YNYI6.cjs.map +1 -0
  203. package/dist/chunk-I6UOIS4J.cjs +1 -0
  204. package/dist/chunk-I6UOIS4J.cjs.map +1 -0
  205. package/dist/chunk-ICJ3SV5I.cjs +183 -0
  206. package/dist/chunk-ICJ3SV5I.cjs.map +1 -0
  207. package/dist/chunk-IYQX7PBO.cjs +320 -0
  208. package/dist/chunk-IYQX7PBO.cjs.map +1 -0
  209. package/dist/chunk-JFA5ABVE.js +54 -0
  210. package/dist/chunk-JFA5ABVE.js.map +1 -0
  211. package/dist/chunk-JORQYNJD.js +79 -0
  212. package/dist/chunk-JORQYNJD.js.map +1 -0
  213. package/dist/chunk-K5TKNT6I.cjs +34 -0
  214. package/dist/chunk-K5TKNT6I.cjs.map +1 -0
  215. package/dist/chunk-KF64C4QI.js +138 -0
  216. package/dist/chunk-KF64C4QI.js.map +1 -0
  217. package/dist/chunk-KGXGTWUL.js +1 -0
  218. package/dist/chunk-KGXGTWUL.js.map +1 -0
  219. package/dist/chunk-KKOZX64Z.js +34 -0
  220. package/dist/chunk-KKOZX64Z.js.map +1 -0
  221. package/dist/chunk-KO2MKZDW.cjs +69 -0
  222. package/dist/chunk-KO2MKZDW.cjs.map +1 -0
  223. package/dist/chunk-KQKJVFYF.js +259 -0
  224. package/dist/chunk-KQKJVFYF.js.map +1 -0
  225. package/dist/chunk-KV2FG7AN.cjs +401 -0
  226. package/dist/chunk-KV2FG7AN.cjs.map +1 -0
  227. package/dist/chunk-L3UPSLJ5.cjs +4418 -0
  228. package/dist/chunk-L3UPSLJ5.cjs.map +1 -0
  229. package/dist/chunk-LEZ4HSBD.cjs +744 -0
  230. package/dist/chunk-LEZ4HSBD.cjs.map +1 -0
  231. package/dist/chunk-LQ3C3OR2.js +21 -0
  232. package/dist/chunk-LQ3C3OR2.js.map +1 -0
  233. package/dist/chunk-LTOHGCU4.cjs +69 -0
  234. package/dist/chunk-LTOHGCU4.cjs.map +1 -0
  235. package/dist/chunk-M56IGNH7.cjs +125 -0
  236. package/dist/chunk-M56IGNH7.cjs.map +1 -0
  237. package/dist/chunk-MOX6LYGC.js +125 -0
  238. package/dist/chunk-MOX6LYGC.js.map +1 -0
  239. package/dist/chunk-MSQXPGOD.cjs +125 -0
  240. package/dist/chunk-MSQXPGOD.cjs.map +1 -0
  241. package/dist/chunk-N5JDL4VE.js +1 -0
  242. package/dist/chunk-N5JDL4VE.js.map +1 -0
  243. package/dist/chunk-N7HX5635.cjs +138 -0
  244. package/dist/chunk-N7HX5635.cjs.map +1 -0
  245. package/dist/chunk-NDLMU6HJ.js +744 -0
  246. package/dist/chunk-NDLMU6HJ.js.map +1 -0
  247. package/dist/chunk-O5ZPSZNY.cjs +88 -0
  248. package/dist/chunk-O5ZPSZNY.cjs.map +1 -0
  249. package/dist/chunk-O6B4KB4D.js +125 -0
  250. package/dist/chunk-O6B4KB4D.js.map +1 -0
  251. package/dist/chunk-OHUVWPFJ.js +86 -0
  252. package/dist/chunk-OHUVWPFJ.js.map +1 -0
  253. package/dist/chunk-OT3VZLN4.js +117 -0
  254. package/dist/chunk-OT3VZLN4.js.map +1 -0
  255. package/dist/chunk-OVYIBDGE.js +183 -0
  256. package/dist/chunk-OVYIBDGE.js.map +1 -0
  257. package/dist/chunk-P2BTQ33C.cjs +126 -0
  258. package/dist/chunk-P2BTQ33C.cjs.map +1 -0
  259. package/dist/chunk-P6ZBENAG.js +211 -0
  260. package/dist/chunk-P6ZBENAG.js.map +1 -0
  261. package/dist/chunk-P74HNSNJ.cjs +106 -0
  262. package/dist/chunk-P74HNSNJ.cjs.map +1 -0
  263. package/dist/chunk-PEPYVWGY.cjs +327 -0
  264. package/dist/chunk-PEPYVWGY.cjs.map +1 -0
  265. package/dist/chunk-POX6JZLO.cjs +67 -0
  266. package/dist/chunk-POX6JZLO.cjs.map +1 -0
  267. package/dist/chunk-PWIA4XQD.js +320 -0
  268. package/dist/chunk-PWIA4XQD.js.map +1 -0
  269. package/dist/chunk-QGZF5MOS.cjs +342 -0
  270. package/dist/chunk-QGZF5MOS.cjs.map +1 -0
  271. package/dist/chunk-QP2A5ZMK.cjs +18 -0
  272. package/dist/chunk-QP2A5ZMK.cjs.map +1 -0
  273. package/dist/chunk-QYHTMEI5.js +92 -0
  274. package/dist/chunk-QYHTMEI5.js.map +1 -0
  275. package/dist/chunk-QYK4ECSZ.js +69 -0
  276. package/dist/chunk-QYK4ECSZ.js.map +1 -0
  277. package/dist/chunk-R36SGSJX.cjs +26 -0
  278. package/dist/chunk-R36SGSJX.cjs.map +1 -0
  279. package/dist/chunk-R5QPUQSI.cjs +303 -0
  280. package/dist/chunk-R5QPUQSI.cjs.map +1 -0
  281. package/dist/chunk-R5UNLPQZ.cjs +103 -0
  282. package/dist/chunk-R5UNLPQZ.cjs.map +1 -0
  283. package/dist/chunk-RSBQNIJZ.js +199 -0
  284. package/dist/chunk-RSBQNIJZ.js.map +1 -0
  285. package/dist/chunk-S25WB7KJ.js +50 -0
  286. package/dist/chunk-S25WB7KJ.js.map +1 -0
  287. package/dist/chunk-SAFSEXMU.cjs +211 -0
  288. package/dist/chunk-SAFSEXMU.cjs.map +1 -0
  289. package/dist/chunk-SJDTFR3I.cjs +1 -0
  290. package/dist/chunk-SJDTFR3I.cjs.map +1 -0
  291. package/dist/chunk-SOGUWOSQ.cjs +21 -0
  292. package/dist/chunk-SOGUWOSQ.cjs.map +1 -0
  293. package/dist/chunk-SWPZ3HFY.cjs +1 -0
  294. package/dist/chunk-SWPZ3HFY.cjs.map +1 -0
  295. package/dist/chunk-SXF3TCYA.js +401 -0
  296. package/dist/chunk-SXF3TCYA.js.map +1 -0
  297. package/dist/chunk-T56K5IKQ.js +526 -0
  298. package/dist/chunk-T56K5IKQ.js.map +1 -0
  299. package/dist/chunk-TBMVUI7S.cjs +21 -0
  300. package/dist/chunk-TBMVUI7S.cjs.map +1 -0
  301. package/dist/chunk-TCX3QKF3.js +103 -0
  302. package/dist/chunk-TCX3QKF3.js.map +1 -0
  303. package/dist/chunk-TH3ITGUM.js +1 -0
  304. package/dist/chunk-TH3ITGUM.js.map +1 -0
  305. package/dist/chunk-TPNCV7KA.js +1 -0
  306. package/dist/chunk-TPNCV7KA.js.map +1 -0
  307. package/dist/chunk-TQCNQKWF.cjs +194 -0
  308. package/dist/chunk-TQCNQKWF.cjs.map +1 -0
  309. package/dist/chunk-TZWNX7FF.js +1 -0
  310. package/dist/chunk-TZWNX7FF.js.map +1 -0
  311. package/dist/chunk-UEJSRMU2.js +39 -0
  312. package/dist/chunk-UEJSRMU2.js.map +1 -0
  313. package/dist/chunk-UTENJWSE.cjs +21 -0
  314. package/dist/chunk-UTENJWSE.cjs.map +1 -0
  315. package/dist/chunk-V5JNYS77.cjs +29 -0
  316. package/dist/chunk-V5JNYS77.cjs.map +1 -0
  317. package/dist/chunk-VFYG7GAH.js +327 -0
  318. package/dist/chunk-VFYG7GAH.js.map +1 -0
  319. package/dist/chunk-VGYJ4VKX.cjs +62 -0
  320. package/dist/chunk-VGYJ4VKX.cjs.map +1 -0
  321. package/dist/chunk-VLC2OZV3.cjs +50 -0
  322. package/dist/chunk-VLC2OZV3.cjs.map +1 -0
  323. package/dist/chunk-VTAABT55.js +47 -0
  324. package/dist/chunk-VTAABT55.js.map +1 -0
  325. package/dist/chunk-VW32UTUE.cjs +1 -0
  326. package/dist/chunk-VW32UTUE.cjs.map +1 -0
  327. package/dist/chunk-VYV45YOK.cjs +1316 -0
  328. package/dist/chunk-VYV45YOK.cjs.map +1 -0
  329. package/dist/chunk-VZ43OLU6.cjs +97 -0
  330. package/dist/chunk-VZ43OLU6.cjs.map +1 -0
  331. package/dist/chunk-XJAXKENE.cjs +1 -0
  332. package/dist/chunk-XJAXKENE.cjs.map +1 -0
  333. package/dist/chunk-XJBMEDQ5.js +101 -0
  334. package/dist/chunk-XJBMEDQ5.js.map +1 -0
  335. package/dist/chunk-XMRMCWSQ.js +454 -0
  336. package/dist/chunk-XMRMCWSQ.js.map +1 -0
  337. package/dist/chunk-XSGUFMT4.js +21 -0
  338. package/dist/chunk-XSGUFMT4.js.map +1 -0
  339. package/dist/chunk-XUZOU2EB.js +1 -0
  340. package/dist/chunk-XUZOU2EB.js.map +1 -0
  341. package/dist/chunk-YCUT6NQ4.js +106 -0
  342. package/dist/chunk-YCUT6NQ4.js.map +1 -0
  343. package/dist/chunk-YLKESEHQ.cjs +199 -0
  344. package/dist/chunk-YLKESEHQ.cjs.map +1 -0
  345. package/dist/chunk-YPK7RV3Y.js +62 -0
  346. package/dist/chunk-YPK7RV3Y.js.map +1 -0
  347. package/dist/chunk-Z7S4UQKY.js +125 -0
  348. package/dist/chunk-Z7S4UQKY.js.map +1 -0
  349. package/dist/chunk-ZBGTVTQJ.js +112 -0
  350. package/dist/chunk-ZBGTVTQJ.js.map +1 -0
  351. package/dist/color-picker/index.cjs +9 -0
  352. package/dist/color-picker/index.cjs.map +1 -0
  353. package/dist/color-picker/index.d.cts +40 -0
  354. package/dist/color-picker/index.d.ts +40 -0
  355. package/dist/color-picker/index.js +9 -0
  356. package/dist/color-picker/index.js.map +1 -0
  357. package/dist/combobox/index.cjs +12 -0
  358. package/dist/combobox/index.cjs.map +1 -0
  359. package/dist/combobox/index.d.cts +37 -0
  360. package/dist/combobox/index.d.ts +37 -0
  361. package/dist/combobox/index.js +12 -0
  362. package/dist/combobox/index.js.map +1 -0
  363. package/dist/command-palette/index.cjs +10 -0
  364. package/dist/command-palette/index.cjs.map +1 -0
  365. package/dist/command-palette/index.d.cts +7 -0
  366. package/dist/command-palette/index.d.ts +7 -0
  367. package/dist/command-palette/index.js +10 -0
  368. package/dist/command-palette/index.js.map +1 -0
  369. package/dist/context-menu/index.cjs +13 -0
  370. package/dist/context-menu/index.cjs.map +1 -0
  371. package/dist/context-menu/index.d.cts +38 -0
  372. package/dist/context-menu/index.d.ts +38 -0
  373. package/dist/context-menu/index.js +13 -0
  374. package/dist/context-menu/index.js.map +1 -0
  375. package/dist/data-grid/index.cjs +28 -0
  376. package/dist/data-grid/index.cjs.map +1 -0
  377. package/dist/data-grid/index.d.cts +217 -0
  378. package/dist/data-grid/index.d.ts +217 -0
  379. package/dist/data-grid/index.js +28 -0
  380. package/dist/data-grid/index.js.map +1 -0
  381. package/dist/date-picker/index.cjs +19 -0
  382. package/dist/date-picker/index.cjs.map +1 -0
  383. package/dist/date-picker/index.d.cts +106 -0
  384. package/dist/date-picker/index.d.ts +106 -0
  385. package/dist/date-picker/index.js +19 -0
  386. package/dist/date-picker/index.js.map +1 -0
  387. package/dist/divider/index.cjs +8 -0
  388. package/dist/divider/index.cjs.map +1 -0
  389. package/dist/divider/index.d.cts +9 -0
  390. package/dist/divider/index.d.ts +9 -0
  391. package/dist/divider/index.js +8 -0
  392. package/dist/divider/index.js.map +1 -0
  393. package/dist/drawer/index.cjs +13 -0
  394. package/dist/drawer/index.cjs.map +1 -0
  395. package/dist/drawer/index.d.cts +39 -0
  396. package/dist/drawer/index.d.ts +39 -0
  397. package/dist/drawer/index.js +13 -0
  398. package/dist/drawer/index.js.map +1 -0
  399. package/dist/dropdown/index.cjs +13 -0
  400. package/dist/dropdown/index.cjs.map +1 -0
  401. package/dist/dropdown/index.d.cts +66 -0
  402. package/dist/dropdown/index.d.ts +66 -0
  403. package/dist/dropdown/index.js +13 -0
  404. package/dist/dropdown/index.js.map +1 -0
  405. package/dist/empty-state/index.cjs +8 -0
  406. package/dist/empty-state/index.cjs.map +1 -0
  407. package/dist/empty-state/index.d.cts +20 -0
  408. package/dist/empty-state/index.d.ts +20 -0
  409. package/dist/empty-state/index.js +8 -0
  410. package/dist/empty-state/index.js.map +1 -0
  411. package/dist/file-upload/index.cjs +8 -0
  412. package/dist/file-upload/index.cjs.map +1 -0
  413. package/dist/file-upload/index.d.cts +27 -0
  414. package/dist/file-upload/index.d.ts +27 -0
  415. package/dist/file-upload/index.js +8 -0
  416. package/dist/file-upload/index.js.map +1 -0
  417. package/dist/footer/index.cjs +8 -0
  418. package/dist/footer/index.cjs.map +1 -0
  419. package/dist/footer/index.d.cts +7 -0
  420. package/dist/footer/index.d.ts +7 -0
  421. package/dist/footer/index.js +8 -0
  422. package/dist/footer/index.js.map +1 -0
  423. package/dist/header/index.cjs +13 -0
  424. package/dist/header/index.cjs.map +1 -0
  425. package/dist/header/index.d.cts +10 -0
  426. package/dist/header/index.d.ts +10 -0
  427. package/dist/header/index.js +13 -0
  428. package/dist/header/index.js.map +1 -0
  429. package/dist/index.cjs +269 -0
  430. package/dist/index.cjs.map +1 -0
  431. package/dist/index.css +8895 -0
  432. package/dist/index.css.d.ts +2 -0
  433. package/dist/index.d.cts +69 -0
  434. package/dist/index.d.ts +69 -0
  435. package/dist/index.js +269 -0
  436. package/dist/index.js.map +1 -0
  437. package/dist/inline-edit/index.cjs +11 -0
  438. package/dist/inline-edit/index.cjs.map +1 -0
  439. package/dist/inline-edit/index.d.cts +56 -0
  440. package/dist/inline-edit/index.d.ts +56 -0
  441. package/dist/inline-edit/index.js +11 -0
  442. package/dist/inline-edit/index.js.map +1 -0
  443. package/dist/input/index.cjs +11 -0
  444. package/dist/input/index.cjs.map +1 -0
  445. package/dist/input/index.d.cts +9 -0
  446. package/dist/input/index.d.ts +9 -0
  447. package/dist/input/index.js +11 -0
  448. package/dist/input/index.js.map +1 -0
  449. package/dist/kbd/index.cjs +9 -0
  450. package/dist/kbd/index.cjs.map +1 -0
  451. package/dist/kbd/index.d.cts +34 -0
  452. package/dist/kbd/index.d.ts +34 -0
  453. package/dist/kbd/index.js +9 -0
  454. package/dist/kbd/index.js.map +1 -0
  455. package/dist/menu/index.cjs +14 -0
  456. package/dist/menu/index.cjs.map +1 -0
  457. package/dist/menu/index.d.cts +14 -0
  458. package/dist/menu/index.d.ts +14 -0
  459. package/dist/menu/index.js +14 -0
  460. package/dist/menu/index.js.map +1 -0
  461. package/dist/modal/index.cjs +12 -0
  462. package/dist/modal/index.cjs.map +1 -0
  463. package/dist/modal/index.d.cts +34 -0
  464. package/dist/modal/index.d.ts +34 -0
  465. package/dist/modal/index.js +12 -0
  466. package/dist/modal/index.js.map +1 -0
  467. package/dist/navigation/index.cjs +14 -0
  468. package/dist/navigation/index.cjs.map +1 -0
  469. package/dist/navigation/index.d.cts +8 -0
  470. package/dist/navigation/index.d.ts +8 -0
  471. package/dist/navigation/index.js +14 -0
  472. package/dist/navigation/index.js.map +1 -0
  473. package/dist/number-input/index.cjs +8 -0
  474. package/dist/number-input/index.cjs.map +1 -0
  475. package/dist/number-input/index.d.cts +31 -0
  476. package/dist/number-input/index.d.ts +31 -0
  477. package/dist/number-input/index.js +8 -0
  478. package/dist/number-input/index.js.map +1 -0
  479. package/dist/o-t-p-input/index.cjs +8 -0
  480. package/dist/o-t-p-input/index.cjs.map +1 -0
  481. package/dist/o-t-p-input/index.d.cts +33 -0
  482. package/dist/o-t-p-input/index.d.ts +33 -0
  483. package/dist/o-t-p-input/index.js +8 -0
  484. package/dist/o-t-p-input/index.js.map +1 -0
  485. package/dist/page-layout/index.cjs +24 -0
  486. package/dist/page-layout/index.cjs.map +1 -0
  487. package/dist/page-layout/index.d.cts +28 -0
  488. package/dist/page-layout/index.d.ts +28 -0
  489. package/dist/page-layout/index.js +24 -0
  490. package/dist/page-layout/index.js.map +1 -0
  491. package/dist/pagination/index.cjs +17 -0
  492. package/dist/pagination/index.cjs.map +1 -0
  493. package/dist/pagination/index.d.cts +34 -0
  494. package/dist/pagination/index.d.ts +34 -0
  495. package/dist/pagination/index.js +17 -0
  496. package/dist/pagination/index.js.map +1 -0
  497. package/dist/pill/index.cjs +8 -0
  498. package/dist/pill/index.cjs.map +1 -0
  499. package/dist/pill/index.d.cts +20 -0
  500. package/dist/pill/index.d.ts +20 -0
  501. package/dist/pill/index.js +8 -0
  502. package/dist/pill/index.js.map +1 -0
  503. package/dist/popover/index.cjs +8 -0
  504. package/dist/popover/index.cjs.map +1 -0
  505. package/dist/popover/index.d.cts +35 -0
  506. package/dist/popover/index.d.ts +35 -0
  507. package/dist/popover/index.js +8 -0
  508. package/dist/popover/index.js.map +1 -0
  509. package/dist/progress/index.cjs +8 -0
  510. package/dist/progress/index.cjs.map +1 -0
  511. package/dist/progress/index.d.cts +18 -0
  512. package/dist/progress/index.d.ts +18 -0
  513. package/dist/progress/index.js +8 -0
  514. package/dist/progress/index.js.map +1 -0
  515. package/dist/radio/index.cjs +10 -0
  516. package/dist/radio/index.cjs.map +1 -0
  517. package/dist/radio/index.d.cts +33 -0
  518. package/dist/radio/index.d.ts +33 -0
  519. package/dist/radio/index.js +10 -0
  520. package/dist/radio/index.js.map +1 -0
  521. package/dist/renderIcon-C2lEMMzb.d.cts +30 -0
  522. package/dist/renderIcon-C2lEMMzb.d.ts +30 -0
  523. package/dist/segmented-control/index.cjs +11 -0
  524. package/dist/segmented-control/index.cjs.map +1 -0
  525. package/dist/segmented-control/index.d.cts +70 -0
  526. package/dist/segmented-control/index.d.ts +70 -0
  527. package/dist/segmented-control/index.js +11 -0
  528. package/dist/segmented-control/index.js.map +1 -0
  529. package/dist/select/index.cjs +13 -0
  530. package/dist/select/index.cjs.map +1 -0
  531. package/dist/select/index.d.cts +46 -0
  532. package/dist/select/index.d.ts +46 -0
  533. package/dist/select/index.js +13 -0
  534. package/dist/select/index.js.map +1 -0
  535. package/dist/sizes-DM6Rrrgq.d.cts +11 -0
  536. package/dist/sizes-DM6Rrrgq.d.ts +11 -0
  537. package/dist/skeleton/index.cjs +8 -0
  538. package/dist/skeleton/index.cjs.map +1 -0
  539. package/dist/skeleton/index.d.cts +14 -0
  540. package/dist/skeleton/index.d.ts +14 -0
  541. package/dist/skeleton/index.js +8 -0
  542. package/dist/skeleton/index.js.map +1 -0
  543. package/dist/slider/index.cjs +8 -0
  544. package/dist/slider/index.cjs.map +1 -0
  545. package/dist/slider/index.d.cts +37 -0
  546. package/dist/slider/index.d.ts +37 -0
  547. package/dist/slider/index.js +8 -0
  548. package/dist/slider/index.js.map +1 -0
  549. package/dist/snackbar/index.cjs +18 -0
  550. package/dist/snackbar/index.cjs.map +1 -0
  551. package/dist/snackbar/index.d.cts +68 -0
  552. package/dist/snackbar/index.d.ts +68 -0
  553. package/dist/snackbar/index.js +18 -0
  554. package/dist/snackbar/index.js.map +1 -0
  555. package/dist/spinner/index.cjs +9 -0
  556. package/dist/spinner/index.cjs.map +1 -0
  557. package/dist/spinner/index.d.cts +12 -0
  558. package/dist/spinner/index.d.ts +12 -0
  559. package/dist/spinner/index.js +9 -0
  560. package/dist/spinner/index.js.map +1 -0
  561. package/dist/split-button/index.cjs +13 -0
  562. package/dist/split-button/index.cjs.map +1 -0
  563. package/dist/split-button/index.d.cts +53 -0
  564. package/dist/split-button/index.d.ts +53 -0
  565. package/dist/split-button/index.js +13 -0
  566. package/dist/split-button/index.js.map +1 -0
  567. package/dist/stepper/index.cjs +8 -0
  568. package/dist/stepper/index.cjs.map +1 -0
  569. package/dist/stepper/index.d.cts +42 -0
  570. package/dist/stepper/index.d.ts +42 -0
  571. package/dist/stepper/index.js +8 -0
  572. package/dist/stepper/index.js.map +1 -0
  573. package/dist/switch/index.cjs +8 -0
  574. package/dist/switch/index.cjs.map +1 -0
  575. package/dist/switch/index.d.cts +15 -0
  576. package/dist/switch/index.d.ts +15 -0
  577. package/dist/switch/index.js +8 -0
  578. package/dist/switch/index.js.map +1 -0
  579. package/dist/table/index.cjs +33 -0
  580. package/dist/table/index.cjs.map +1 -0
  581. package/dist/table/index.d.cts +20 -0
  582. package/dist/table/index.d.ts +20 -0
  583. package/dist/table/index.js +33 -0
  584. package/dist/table/index.js.map +1 -0
  585. package/dist/tabs/index.cjs +13 -0
  586. package/dist/tabs/index.cjs.map +1 -0
  587. package/dist/tabs/index.d.cts +34 -0
  588. package/dist/tabs/index.d.ts +34 -0
  589. package/dist/tabs/index.js +13 -0
  590. package/dist/tabs/index.js.map +1 -0
  591. package/dist/tag-input/index.cjs +12 -0
  592. package/dist/tag-input/index.cjs.map +1 -0
  593. package/dist/tag-input/index.d.cts +36 -0
  594. package/dist/tag-input/index.d.ts +36 -0
  595. package/dist/tag-input/index.js +12 -0
  596. package/dist/tag-input/index.js.map +1 -0
  597. package/dist/textarea/index.cjs +10 -0
  598. package/dist/textarea/index.cjs.map +1 -0
  599. package/dist/textarea/index.d.cts +28 -0
  600. package/dist/textarea/index.d.ts +28 -0
  601. package/dist/textarea/index.js +10 -0
  602. package/dist/textarea/index.js.map +1 -0
  603. package/dist/timeline/index.cjs +8 -0
  604. package/dist/timeline/index.cjs.map +1 -0
  605. package/dist/timeline/index.d.cts +24 -0
  606. package/dist/timeline/index.d.ts +24 -0
  607. package/dist/timeline/index.js +8 -0
  608. package/dist/timeline/index.js.map +1 -0
  609. package/dist/toolbar/index.cjs +20 -0
  610. package/dist/toolbar/index.cjs.map +1 -0
  611. package/dist/toolbar/index.d.cts +13 -0
  612. package/dist/toolbar/index.d.ts +13 -0
  613. package/dist/toolbar/index.js +20 -0
  614. package/dist/toolbar/index.js.map +1 -0
  615. package/dist/tooltip/index.cjs +9 -0
  616. package/dist/tooltip/index.cjs.map +1 -0
  617. package/dist/tooltip/index.d.cts +25 -0
  618. package/dist/tooltip/index.d.ts +25 -0
  619. package/dist/tooltip/index.js +9 -0
  620. package/dist/tooltip/index.js.map +1 -0
  621. package/dist/tree-view/index.cjs +8 -0
  622. package/dist/tree-view/index.cjs.map +1 -0
  623. package/dist/tree-view/index.d.cts +36 -0
  624. package/dist/tree-view/index.d.ts +36 -0
  625. package/dist/tree-view/index.js +8 -0
  626. package/dist/tree-view/index.js.map +1 -0
  627. package/dist/virtual-list/index.cjs +9 -0
  628. package/dist/virtual-list/index.cjs.map +1 -0
  629. package/dist/virtual-list/index.d.cts +58 -0
  630. package/dist/virtual-list/index.d.ts +58 -0
  631. package/dist/virtual-list/index.js +9 -0
  632. package/dist/virtual-list/index.js.map +1 -0
  633. package/package.json +108 -0
@@ -0,0 +1 @@
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":[]}
@@ -0,0 +1,199 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/components/NumberInput/NumberInput.component.tsx
2
+ var _react = require('react');
3
+ var _lucidereact = require('lucide-react');
4
+ var _jsxruntime = require('react/jsx-runtime');
5
+ var NumberInput = _react.forwardRef.call(void 0,
6
+ ({
7
+ value,
8
+ defaultValue = 0,
9
+ onChange,
10
+ min,
11
+ max,
12
+ step = 1,
13
+ precision = 0,
14
+ placeholder,
15
+ disabled = false,
16
+ readOnly = false,
17
+ label,
18
+ helperText,
19
+ error = false,
20
+ errorMessage,
21
+ size = "md",
22
+ fullWidth = false,
23
+ allowTyping = true,
24
+ className = "",
25
+ id,
26
+ name
27
+ }, ref) => {
28
+ const generatedId = _react.useId.call(void 0, );
29
+ const inputId = id || `number-input-${generatedId}`;
30
+ const isControlled = value !== void 0;
31
+ const [localValue, setLocalValue] = _react.useState.call(void 0, defaultValue);
32
+ const [inputText, setInputText] = _react.useState.call(void 0, defaultValue.toFixed(precision));
33
+ const [isFocused, setIsFocused] = _react.useState.call(void 0, false);
34
+ const currentValue = isControlled ? value : localValue;
35
+ _react.useEffect.call(void 0, () => {
36
+ if (isControlled) return;
37
+ setLocalValue((prev) => {
38
+ let result = prev;
39
+ if (min !== void 0) result = Math.max(min, result);
40
+ if (max !== void 0) result = Math.min(max, result);
41
+ return parseFloat(result.toFixed(precision));
42
+ });
43
+ }, [min, max, precision, isControlled]);
44
+ const clampValue = (raw) => {
45
+ let result = raw;
46
+ if (min !== void 0) result = Math.max(min, result);
47
+ if (max !== void 0) result = Math.min(max, result);
48
+ return parseFloat(result.toFixed(precision));
49
+ };
50
+ const commitValue = (newVal) => {
51
+ const clamped = clampValue(newVal);
52
+ if (!isControlled) setLocalValue(clamped);
53
+ _optionalChain([onChange, 'optionalCall', _ => _(clamped)]);
54
+ };
55
+ const handleDecrement = () => {
56
+ if (disabled || readOnly) return;
57
+ commitValue(currentValue - step);
58
+ };
59
+ const handleIncrement = () => {
60
+ if (disabled || readOnly) return;
61
+ commitValue(currentValue + step);
62
+ };
63
+ const handleTextFocus = () => {
64
+ setInputText(currentValue.toFixed(precision));
65
+ setIsFocused(true);
66
+ };
67
+ const handleTextChange = (e) => {
68
+ setInputText(e.target.value);
69
+ };
70
+ const handleTextBlur = () => {
71
+ setIsFocused(false);
72
+ const parsed = parseFloat(inputText);
73
+ if (!isNaN(parsed)) {
74
+ const clamped = clampValue(parsed);
75
+ if (!isControlled) setLocalValue(clamped);
76
+ _optionalChain([onChange, 'optionalCall', _2 => _2(clamped)]);
77
+ setInputText(clamped.toFixed(precision));
78
+ } else {
79
+ setInputText(currentValue.toFixed(precision));
80
+ }
81
+ };
82
+ const handleDisplayKeyDown = (e) => {
83
+ if (e.key === "ArrowUp") {
84
+ e.preventDefault();
85
+ handleIncrement();
86
+ } else if (e.key === "ArrowDown") {
87
+ e.preventDefault();
88
+ handleDecrement();
89
+ }
90
+ };
91
+ const formattedValue = currentValue.toFixed(precision);
92
+ const displayedText = allowTyping && isFocused ? inputText : formattedValue;
93
+ const isDecrementDisabled = disabled || readOnly || min !== void 0 && currentValue <= min;
94
+ const isIncrementDisabled = disabled || readOnly || max !== void 0 && currentValue >= max;
95
+ const rootClasses = [
96
+ "eidos-number-input",
97
+ `eidos-number-input--${size}`,
98
+ fullWidth && "eidos-number-input--fullWidth",
99
+ error && "eidos-number-input--error",
100
+ className
101
+ ].filter(Boolean).join(" ");
102
+ const controlClasses = [
103
+ "eidos-number-input-control",
104
+ disabled && "eidos-number-input-control--disabled"
105
+ ].filter(Boolean).join(" ");
106
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: rootClasses, children: [
107
+ label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "label", { htmlFor: allowTyping ? inputId : void 0, className: "eidos-number-input-label", children: label }),
108
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
109
+ "div",
110
+ {
111
+ className: controlClasses,
112
+ role: allowTyping ? void 0 : "spinbutton",
113
+ "aria-valuemin": allowTyping ? void 0 : min,
114
+ "aria-valuemax": allowTyping ? void 0 : max,
115
+ "aria-valuenow": allowTyping ? void 0 : currentValue,
116
+ "aria-label": allowTyping ? void 0 : _nullishCoalesce(label, () => ( "Number input")),
117
+ "aria-disabled": disabled || void 0,
118
+ tabIndex: !allowTyping && !disabled ? 0 : void 0,
119
+ onKeyDown: !allowTyping ? handleDisplayKeyDown : void 0,
120
+ children: [
121
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
122
+ "button",
123
+ {
124
+ type: "button",
125
+ className: "eidos-number-input-btn",
126
+ onClick: handleDecrement,
127
+ disabled: isDecrementDisabled,
128
+ "aria-label": "Decrease",
129
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Minus, {})
130
+ }
131
+ ),
132
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-number-input-divider", "aria-hidden": "true" }),
133
+ allowTyping ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
134
+ "input",
135
+ {
136
+ id: inputId,
137
+ type: "text",
138
+ className: "eidos-number-input-display",
139
+ value: displayedText,
140
+ onChange: handleTextChange,
141
+ onFocus: handleTextFocus,
142
+ onBlur: handleTextBlur,
143
+ onKeyDown: handleDisplayKeyDown,
144
+ placeholder,
145
+ disabled,
146
+ readOnly,
147
+ inputMode: "decimal",
148
+ role: "spinbutton",
149
+ "aria-valuemin": min,
150
+ "aria-valuemax": max,
151
+ "aria-valuenow": currentValue,
152
+ "aria-label": _nullishCoalesce(label, () => ( "Number input"))
153
+ }
154
+ ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-number-input-display", "aria-hidden": "true", children: placeholder && formattedValue === 0 .toFixed(precision) && !isFocused ? placeholder : formattedValue }),
155
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-number-input-divider", "aria-hidden": "true" }),
156
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
157
+ "button",
158
+ {
159
+ type: "button",
160
+ className: "eidos-number-input-btn",
161
+ onClick: handleIncrement,
162
+ disabled: isIncrementDisabled,
163
+ "aria-label": "Increase",
164
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Plus, {})
165
+ }
166
+ )
167
+ ]
168
+ }
169
+ ),
170
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
171
+ "input",
172
+ {
173
+ ref,
174
+ type: "number",
175
+ name,
176
+ value: currentValue,
177
+ onChange: () => {
178
+ },
179
+ className: "eidos-number-input-hidden",
180
+ tabIndex: -1,
181
+ "aria-hidden": "true",
182
+ disabled,
183
+ readOnly,
184
+ min,
185
+ max,
186
+ step
187
+ }
188
+ ),
189
+ helperText && !error && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-number-input-helper", children: helperText }),
190
+ error && errorMessage && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "eidos-number-input-error", role: "alert", children: errorMessage })
191
+ ] });
192
+ }
193
+ );
194
+ NumberInput.displayName = "NumberInput";
195
+
196
+
197
+
198
+ exports.NumberInput = NumberInput;
199
+ //# sourceMappingURL=chunk-YLKESEHQ.cjs.map
@@ -0,0 +1 @@
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"]}
@@ -0,0 +1,62 @@
1
+ import {
2
+ Toolbar
3
+ } from "./chunk-VTAABT55.js";
4
+ import {
5
+ Navigation
6
+ } from "./chunk-MOX6LYGC.js";
7
+ import {
8
+ Footer
9
+ } from "./chunk-GOVOQZYN.js";
10
+ import {
11
+ Header
12
+ } from "./chunk-HUNMRKGE.js";
13
+
14
+ // src/components/PageLayout/PageLayout.component.tsx
15
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
+ var defaultFooter = { copyright: `\xA9 ${(/* @__PURE__ */ new Date()).getFullYear()} Eidos UI` };
17
+ var PageLayout = ({
18
+ toolbar,
19
+ navigation,
20
+ header,
21
+ footer,
22
+ children,
23
+ className = "",
24
+ ...rest
25
+ }) => {
26
+ const classes = ["eidos-pagelayout", className].filter(Boolean).join(" ");
27
+ return /* @__PURE__ */ jsxs("div", { className: classes, ...rest, children: [
28
+ /* @__PURE__ */ jsx(
29
+ Toolbar,
30
+ {
31
+ breadcrumbs: toolbar?.breadcrumbs || { items: [], separator: /* @__PURE__ */ jsx(Fragment, {}) },
32
+ cmdPaletteItems: toolbar?.cmdPaletteItems || [],
33
+ actions: toolbar?.actions || [],
34
+ userMenu: toolbar?.userMenu || [],
35
+ className: "eidos-pagelayout__toolbar"
36
+ }
37
+ ),
38
+ /* @__PURE__ */ jsx("div", { className: "eidos-pagelayout__navigation", children: navigation && /* @__PURE__ */ jsx(Navigation, { ...navigation }) }),
39
+ /* @__PURE__ */ jsxs("main", { className: "eidos-pagelayout__content", children: [
40
+ header && /* @__PURE__ */ jsx(
41
+ Header,
42
+ {
43
+ ...header,
44
+ className: ["eidos-pagelayout__header", header.className].filter(Boolean).join(" ")
45
+ }
46
+ ),
47
+ /* @__PURE__ */ jsx("div", { className: "eidos-pagelayout__body", children }),
48
+ /* @__PURE__ */ jsx(
49
+ Footer,
50
+ {
51
+ ...footer ?? defaultFooter,
52
+ className: ["eidos-pagelayout__footer", footer?.className].filter(Boolean).join(" ")
53
+ }
54
+ )
55
+ ] })
56
+ ] });
57
+ };
58
+
59
+ export {
60
+ PageLayout
61
+ };
62
+ //# sourceMappingURL=chunk-YPK7RV3Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/PageLayout/PageLayout.component.tsx"],"sourcesContent":["import React from 'react';\r\nimport type { PageLayoutProps } from './PageLayout.types';\r\nimport './PageLayout.scss';\r\nimport { Toolbar } from '../Toolbar';\r\nimport { Header } from '../Header';\r\nimport { Footer } from '../Footer';\r\nimport type { FooterProps } from '../Footer';\r\nimport { Navigation } from '../Navigation';\r\n\r\nconst defaultFooter: FooterProps = { copyright: `© ${new Date().getFullYear()} Eidos UI` };\r\n\r\nexport const PageLayout: React.FC<PageLayoutProps> = ({\r\n toolbar,\r\n navigation,\r\n header,\r\n footer,\r\n children,\r\n className = '',\r\n ...rest\r\n}) => {\r\n const classes = ['eidos-pagelayout', className].filter(Boolean).join(' ');\r\n\r\n return (\r\n <div className={classes} {...rest}>\r\n <Toolbar\r\n breadcrumbs={toolbar?.breadcrumbs || { items: [], separator: <></> }}\r\n cmdPaletteItems={toolbar?.cmdPaletteItems || []}\r\n actions={toolbar?.actions || []}\r\n userMenu={toolbar?.userMenu || []}\r\n className=\"eidos-pagelayout__toolbar\"\r\n />\r\n <div className=\"eidos-pagelayout__navigation\">\r\n {navigation && <Navigation {...navigation} />}\r\n </div>\r\n <main className=\"eidos-pagelayout__content\">\r\n {header && (\r\n <Header\r\n {...header}\r\n className={['eidos-pagelayout__header', header.className].filter(Boolean).join(' ')}\r\n />\r\n )}\r\n <div className=\"eidos-pagelayout__body\">{children}</div>\r\n <Footer\r\n {...(footer ?? defaultFooter)}\r\n className={['eidos-pagelayout__footer', footer?.className].filter(Boolean).join(' ')}\r\n />\r\n </main>\r\n </div>\r\n );\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;AAyBqE,wBAS/D,YAT+D;AAhBrE,IAAM,gBAA6B,EAAE,WAAW,SAAK,oBAAI,KAAK,GAAE,YAAY,CAAC,YAAY;AAElF,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,GAAG;AACL,MAAM;AACJ,QAAM,UAAU,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAExE,SACE,qBAAC,SAAI,WAAW,SAAU,GAAG,MAC3B;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,aAAa,SAAS,eAAe,EAAE,OAAO,CAAC,GAAG,WAAW,gCAAE,EAAI;AAAA,QACnE,iBAAiB,SAAS,mBAAmB,CAAC;AAAA,QAC9C,SAAS,SAAS,WAAW,CAAC;AAAA,QAC9B,UAAU,SAAS,YAAY,CAAC;AAAA,QAChC,WAAU;AAAA;AAAA,IACZ;AAAA,IACA,oBAAC,SAAI,WAAU,gCACZ,wBAAc,oBAAC,cAAY,GAAG,YAAY,GAC7C;AAAA,IACA,qBAAC,UAAK,WAAU,6BACb;AAAA,gBACC;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,WAAW,CAAC,4BAA4B,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA;AAAA,MACpF;AAAA,MAEF,oBAAC,SAAI,WAAU,0BAA0B,UAAS;AAAA,MAClD;AAAA,QAAC;AAAA;AAAA,UACE,GAAI,UAAU;AAAA,UACf,WAAW,CAAC,4BAA4B,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA;AAAA,MACrF;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,125 @@
1
+ import {
2
+ Input
3
+ } from "./chunk-A35Y5MRJ.js";
4
+
5
+ // src/components/InlineEdit/InlineEdit.component.tsx
6
+ import { useState, useRef, useCallback } from "react";
7
+ import { Pencil } from "lucide-react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ var InlineEdit = ({
10
+ value,
11
+ onChange,
12
+ onConfirm,
13
+ onCancel,
14
+ editing: editingProp,
15
+ onEditingChange,
16
+ type = "text",
17
+ placeholder,
18
+ trigger = "click",
19
+ size = "md",
20
+ fullWidth = false,
21
+ disabled = false,
22
+ confirmOnBlur = true,
23
+ renderDisplay,
24
+ showEditIcon = true,
25
+ inputVariant = "outlined",
26
+ className = ""
27
+ }) => {
28
+ const isControlled = editingProp !== void 0;
29
+ const [internalEditing, setInternalEditing] = useState(false);
30
+ const editing = isControlled ? editingProp : internalEditing;
31
+ const valueAtEditStart = useRef(value);
32
+ const [draft, setDraft] = useState(value);
33
+ const openEdit = useCallback(() => {
34
+ if (disabled) return;
35
+ valueAtEditStart.current = value;
36
+ setDraft(value);
37
+ if (!isControlled) setInternalEditing(true);
38
+ onEditingChange?.(true);
39
+ }, [disabled, isControlled, onEditingChange, value]);
40
+ const closeEdit = useCallback(() => {
41
+ if (!isControlled) setInternalEditing(false);
42
+ onEditingChange?.(false);
43
+ }, [isControlled, onEditingChange]);
44
+ const confirm = useCallback(() => {
45
+ closeEdit();
46
+ onConfirm?.(draft);
47
+ }, [closeEdit, draft, onConfirm]);
48
+ const cancel = useCallback(() => {
49
+ setDraft(valueAtEditStart.current);
50
+ onChange?.(valueAtEditStart.current);
51
+ closeEdit();
52
+ onCancel?.();
53
+ }, [closeEdit, onChange, onCancel]);
54
+ const handleChange = (e) => {
55
+ setDraft(e.target.value);
56
+ onChange?.(e.target.value);
57
+ };
58
+ const handleKeyDown = (e) => {
59
+ if (e.key === "Enter") {
60
+ e.preventDefault();
61
+ e.stopPropagation();
62
+ confirm();
63
+ } else if (e.key === "Escape") {
64
+ e.preventDefault();
65
+ e.stopPropagation();
66
+ cancel();
67
+ }
68
+ };
69
+ const handleBlur = () => {
70
+ if (confirmOnBlur) confirm();
71
+ };
72
+ const displayTriggerProps = trigger === "doubleClick" ? { onDoubleClick: openEdit } : { onClick: openEdit };
73
+ if (editing) {
74
+ return /* @__PURE__ */ jsx(
75
+ Input,
76
+ {
77
+ type,
78
+ variant: inputVariant,
79
+ size,
80
+ value: draft,
81
+ onChange: handleChange,
82
+ onKeyDown: handleKeyDown,
83
+ onBlur: handleBlur,
84
+ placeholder,
85
+ fullWidth,
86
+ clearable: false,
87
+ autoFocus: true,
88
+ className: `eidos-inline-edit eidos-inline-edit--editing ${className}`
89
+ }
90
+ );
91
+ }
92
+ const isEmpty = !value;
93
+ return /* @__PURE__ */ jsxs(
94
+ "span",
95
+ {
96
+ role: "button",
97
+ tabIndex: disabled ? void 0 : 0,
98
+ "aria-label": disabled ? void 0 : "Click to edit",
99
+ className: [
100
+ "eidos-inline-edit",
101
+ `eidos-inline-edit--${size}`,
102
+ fullWidth ? "eidos-inline-edit--full-width" : "",
103
+ disabled ? "eidos-inline-edit--disabled" : "",
104
+ isEmpty ? "eidos-inline-edit--empty" : "",
105
+ className
106
+ ].filter(Boolean).join(" "),
107
+ ...disabled ? {} : displayTriggerProps,
108
+ onKeyDown: disabled ? void 0 : (e) => {
109
+ if (e.key === "Enter" || e.key === " ") {
110
+ e.preventDefault();
111
+ openEdit();
112
+ }
113
+ },
114
+ children: [
115
+ /* @__PURE__ */ jsx("span", { className: "eidos-inline-edit__text", children: renderDisplay ? renderDisplay(value) : value || /* @__PURE__ */ jsx("span", { className: "eidos-inline-edit__placeholder", children: placeholder }) }),
116
+ !disabled && showEditIcon && /* @__PURE__ */ jsx("span", { className: "eidos-inline-edit__icon", "aria-hidden": true, children: /* @__PURE__ */ jsx(Pencil, {}) })
117
+ ]
118
+ }
119
+ );
120
+ };
121
+
122
+ export {
123
+ InlineEdit
124
+ };
125
+ //# sourceMappingURL=chunk-Z7S4UQKY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/InlineEdit/InlineEdit.component.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from 'react';\r\nimport { Pencil } from 'lucide-react';\r\nimport { Input } from '../Input/Input.component';\r\nimport type { InlineEditProps } from './InlineEdit.types';\r\nimport './InlineEdit.scss';\r\n\r\nexport const InlineEdit: React.FC<InlineEditProps> = ({\r\n value,\r\n onChange,\r\n onConfirm,\r\n onCancel,\r\n editing: editingProp,\r\n onEditingChange,\r\n type = 'text',\r\n placeholder,\r\n trigger = 'click',\r\n size = 'md',\r\n fullWidth = false,\r\n disabled = false,\r\n confirmOnBlur = true,\r\n renderDisplay,\r\n showEditIcon = true,\r\n inputVariant = 'outlined',\r\n className = '',\r\n}) => {\r\n const isControlled = editingProp !== undefined;\r\n const [internalEditing, setInternalEditing] = useState(false);\r\n const editing = isControlled ? editingProp : internalEditing;\r\n\r\n // Track the value at the moment editing begins so Esc can revert to it.\r\n const valueAtEditStart = useRef(value);\r\n\r\n // Local draft while editing - keeps Input value in sync without forcing the\r\n // parent to wire `onChange` just to see live keystrokes.\r\n const [draft, setDraft] = useState(value);\r\n\r\n // ------------------------------------------------------------------\r\n // Editing state helpers\r\n // ------------------------------------------------------------------\r\n\r\n const openEdit = useCallback(() => {\r\n if (disabled) return;\r\n valueAtEditStart.current = value;\r\n setDraft(value);\r\n if (!isControlled) setInternalEditing(true);\r\n onEditingChange?.(true);\r\n }, [disabled, isControlled, onEditingChange, value]);\r\n\r\n const closeEdit = useCallback(() => {\r\n if (!isControlled) setInternalEditing(false);\r\n onEditingChange?.(false);\r\n }, [isControlled, onEditingChange]);\r\n\r\n const confirm = useCallback(() => {\r\n closeEdit();\r\n onConfirm?.(draft);\r\n }, [closeEdit, draft, onConfirm]);\r\n\r\n const cancel = useCallback(() => {\r\n // Revert the draft AND propagate the original value so the parent stays in\r\n // sync when `onChange` is used to maintain external state.\r\n setDraft(valueAtEditStart.current);\r\n onChange?.(valueAtEditStart.current);\r\n closeEdit();\r\n onCancel?.();\r\n }, [closeEdit, onChange, onCancel]);\r\n\r\n // ------------------------------------------------------------------\r\n // Input handlers\r\n // ------------------------------------------------------------------\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setDraft(e.target.value);\r\n onChange?.(e.target.value);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n // Stop propagation so parent grids/tables don't double-handle Enter.\r\n e.stopPropagation();\r\n confirm();\r\n } else if (e.key === 'Escape') {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n cancel();\r\n }\r\n // Tab and Arrow keys intentionally bubble - consumers like DataGrid own\r\n // Tab-to-next-cell and arrow-key navigation at the container level.\r\n };\r\n\r\n const handleBlur = () => {\r\n if (confirmOnBlur) confirm();\r\n };\r\n\r\n // ------------------------------------------------------------------\r\n // Trigger props for display mode\r\n // ------------------------------------------------------------------\r\n\r\n const displayTriggerProps =\r\n trigger === 'doubleClick' ? { onDoubleClick: openEdit } : { onClick: openEdit };\r\n\r\n // ------------------------------------------------------------------\r\n // Render: edit mode\r\n // ------------------------------------------------------------------\r\n\r\n if (editing) {\r\n return (\r\n <Input\r\n type={type}\r\n variant={inputVariant}\r\n size={size}\r\n value={draft}\r\n onChange={handleChange}\r\n onKeyDown={handleKeyDown}\r\n onBlur={handleBlur}\r\n placeholder={placeholder}\r\n fullWidth={fullWidth}\r\n clearable={false}\r\n autoFocus\r\n className={`eidos-inline-edit eidos-inline-edit--editing ${className}`}\r\n />\r\n );\r\n }\r\n\r\n // ------------------------------------------------------------------\r\n // Render: display mode\r\n // ------------------------------------------------------------------\r\n\r\n const isEmpty = !value;\r\n\r\n return (\r\n <span\r\n role=\"button\"\r\n tabIndex={disabled ? undefined : 0}\r\n aria-label={disabled ? undefined : 'Click to edit'}\r\n className={[\r\n 'eidos-inline-edit',\r\n `eidos-inline-edit--${size}`,\r\n fullWidth ? 'eidos-inline-edit--full-width' : '',\r\n disabled ? 'eidos-inline-edit--disabled' : '',\r\n isEmpty ? 'eidos-inline-edit--empty' : '',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ')}\r\n {...(disabled ? {} : displayTriggerProps)}\r\n onKeyDown={\r\n disabled\r\n ? undefined\r\n : (e) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n e.preventDefault();\r\n openEdit();\r\n }\r\n }\r\n }\r\n >\r\n <span className=\"eidos-inline-edit__text\">\r\n {renderDisplay\r\n ? renderDisplay(value)\r\n : value || <span className=\"eidos-inline-edit__placeholder\">{placeholder}</span>}\r\n </span>\r\n {!disabled && showEditIcon && (\r\n <span className=\"eidos-inline-edit__icon\" aria-hidden>\r\n <Pencil />\r\n </span>\r\n )}\r\n </span>\r\n );\r\n};\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,112 @@
1
+ // src/components/Accordion/Accordion.component.tsx
2
+ import React, { useState, useRef, useContext, useId, useEffect, useCallback } from "react";
3
+ import { ChevronDown } from "lucide-react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ var toArray = (v) => v === void 0 ? [] : Array.isArray(v) ? v : [v];
6
+ var AccordionContext = React.createContext(null);
7
+ var useAccordion = () => {
8
+ const ctx = useContext(AccordionContext);
9
+ if (!ctx) throw new Error("AccordionItem must be used inside <Accordion>");
10
+ return ctx;
11
+ };
12
+ var Accordion = ({
13
+ multiple = false,
14
+ value,
15
+ defaultValue,
16
+ onChange,
17
+ variant = "default",
18
+ size = "md",
19
+ color = "primary",
20
+ className = "",
21
+ children
22
+ }) => {
23
+ const isControlled = value !== void 0;
24
+ const [localOpen, setLocalOpen] = useState(() => toArray(defaultValue));
25
+ const openValues = isControlled ? toArray(value) : localOpen;
26
+ const toggle = useCallback(
27
+ (itemValue) => {
28
+ const isOpen = openValues.includes(itemValue);
29
+ let next;
30
+ if (multiple) {
31
+ next = isOpen ? openValues.filter((v) => v !== itemValue) : [...openValues, itemValue];
32
+ } else {
33
+ next = isOpen ? [] : [itemValue];
34
+ }
35
+ if (!isControlled) setLocalOpen(next);
36
+ onChange?.(multiple ? next : next[0] ?? "");
37
+ },
38
+ [openValues, multiple, isControlled, onChange]
39
+ );
40
+ const rootClasses = ["eidos-accordion", `eidos-accordion--${variant}`, className].filter(Boolean).join(" ");
41
+ return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { openValues, toggle, variant, size, color }, children: /* @__PURE__ */ jsx("div", { className: rootClasses, children }) });
42
+ };
43
+ Accordion.displayName = "Accordion";
44
+ var AccordionItem = ({
45
+ value,
46
+ label,
47
+ icon,
48
+ disabled = false,
49
+ className = "",
50
+ children
51
+ }) => {
52
+ const { openValues, toggle, size, color } = useAccordion();
53
+ const isOpen = openValues.includes(value);
54
+ const contentRef = useRef(null);
55
+ const triggerId = useId();
56
+ const panelId = useId();
57
+ const [maxHeight, setMaxHeight] = useState(0);
58
+ useEffect(() => {
59
+ if (!contentRef.current) return;
60
+ setMaxHeight(isOpen ? contentRef.current.scrollHeight : 0);
61
+ }, [isOpen]);
62
+ const itemClasses = [
63
+ "eidos-accordion-item",
64
+ isOpen && "eidos-accordion-item--open",
65
+ disabled && "eidos-accordion-item--disabled",
66
+ className
67
+ ].filter(Boolean).join(" ");
68
+ const triggerClasses = [
69
+ "eidos-accordion-trigger",
70
+ `eidos-accordion-trigger--${size}`,
71
+ isOpen && "eidos-accordion-trigger--open",
72
+ isOpen && `eidos-accordion-trigger--${color}`
73
+ ].filter(Boolean).join(" ");
74
+ return /* @__PURE__ */ jsxs("div", { className: itemClasses, children: [
75
+ /* @__PURE__ */ jsxs(
76
+ "button",
77
+ {
78
+ id: triggerId,
79
+ type: "button",
80
+ "aria-expanded": isOpen,
81
+ "aria-controls": panelId,
82
+ disabled,
83
+ onClick: () => !disabled && toggle(value),
84
+ className: triggerClasses,
85
+ children: [
86
+ icon && /* @__PURE__ */ jsx("span", { className: "eidos-accordion-trigger-icon", children: icon }),
87
+ /* @__PURE__ */ jsx("span", { className: "eidos-accordion-trigger-label", children: label }),
88
+ /* @__PURE__ */ jsx(ChevronDown, { className: "eidos-accordion-chevron", "aria-hidden": "true" })
89
+ ]
90
+ }
91
+ ),
92
+ /* @__PURE__ */ jsx(
93
+ "div",
94
+ {
95
+ id: panelId,
96
+ role: "region",
97
+ "aria-labelledby": triggerId,
98
+ ref: contentRef,
99
+ className: "eidos-accordion-content-wrapper",
100
+ style: { maxHeight: `${maxHeight}px` },
101
+ children: /* @__PURE__ */ jsx("div", { className: "eidos-accordion-content", children })
102
+ }
103
+ )
104
+ ] });
105
+ };
106
+ AccordionItem.displayName = "AccordionItem";
107
+
108
+ export {
109
+ Accordion,
110
+ AccordionItem
111
+ };
112
+ //# sourceMappingURL=chunk-ZBGTVTQJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Accordion/Accordion.component.tsx"],"sourcesContent":["import React, { useState, useRef, useContext, useId, useEffect, useCallback } from 'react';\r\nimport { ChevronDown } from 'lucide-react';\r\nimport type { AccordionProps, AccordionItemProps, AccordionContextValue } from './Accordion.types';\r\n\r\n// ============================================================================\r\n// HELPERS\r\n// ============================================================================\r\n\r\n/** Normalise a controlled/default value (string | string[] | undefined) to string[]. */\r\nconst toArray = (v: string | string[] | undefined): string[] =>\r\n v === undefined ? [] : Array.isArray(v) ? v : [v];\r\n\r\n// ============================================================================\r\n// CONTEXT\r\n// ============================================================================\r\n\r\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\r\n\r\nconst useAccordion = (): AccordionContextValue => {\r\n const ctx = useContext(AccordionContext);\r\n if (!ctx) throw new Error('AccordionItem must be used inside <Accordion>');\r\n return ctx;\r\n};\r\n\r\n// ============================================================================\r\n// ACCORDION - root container; owns open state; provides context\r\n// ============================================================================\r\n\r\nexport const Accordion: React.FC<AccordionProps> = ({\r\n multiple = false,\r\n value,\r\n defaultValue,\r\n onChange,\r\n variant = 'default',\r\n size = 'md',\r\n color = 'primary',\r\n className = '',\r\n children,\r\n}) => {\r\n const isControlled = value !== undefined;\r\n\r\n const [localOpen, setLocalOpen] = useState<string[]>(() => toArray(defaultValue));\r\n const openValues = isControlled ? toArray(value) : localOpen;\r\n\r\n const toggle = useCallback(\r\n (itemValue: string) => {\r\n const isOpen = openValues.includes(itemValue);\r\n let next: string[];\r\n\r\n if (multiple) {\r\n next = isOpen ? openValues.filter((v) => v !== itemValue) : [...openValues, itemValue];\r\n } else {\r\n next = isOpen ? [] : [itemValue];\r\n }\r\n\r\n if (!isControlled) setLocalOpen(next);\r\n onChange?.(multiple ? next : (next[0] ?? ''));\r\n },\r\n [openValues, multiple, isControlled, onChange],\r\n );\r\n\r\n const rootClasses = ['eidos-accordion', `eidos-accordion--${variant}`, className]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <AccordionContext.Provider value={{ openValues, toggle, variant, size, color }}>\r\n <div className={rootClasses}>{children}</div>\r\n </AccordionContext.Provider>\r\n );\r\n};\r\n\r\nAccordion.displayName = 'Accordion';\r\n\r\n// ============================================================================\r\n// ACCORDION ITEM - individual item; reads context; renders trigger + animated panel\r\n// ============================================================================\r\n\r\nexport const AccordionItem: React.FC<AccordionItemProps> = ({\r\n value,\r\n label,\r\n icon,\r\n disabled = false,\r\n className = '',\r\n children,\r\n}) => {\r\n const { openValues, toggle, size, color } = useAccordion();\r\n const isOpen = openValues.includes(value);\r\n const contentRef = useRef<HTMLDivElement>(null);\r\n const triggerId = useId();\r\n const panelId = useId();\r\n\r\n // Drives the max-height CSS transition.\r\n // On open: set to scrollHeight so the wrapper animates to its natural height.\r\n // On close: set to 0 so the wrapper animates shut.\r\n // The CSS transition on .eidos-accordion-content-wrapper handles the animation.\r\n const [maxHeight, setMaxHeight] = useState<number>(0);\r\n\r\n useEffect(() => {\r\n if (!contentRef.current) return;\r\n setMaxHeight(isOpen ? contentRef.current.scrollHeight : 0);\r\n }, [isOpen]);\r\n\r\n const itemClasses = [\r\n 'eidos-accordion-item',\r\n isOpen && 'eidos-accordion-item--open',\r\n disabled && 'eidos-accordion-item--disabled',\r\n className,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n const triggerClasses = [\r\n 'eidos-accordion-trigger',\r\n `eidos-accordion-trigger--${size}`,\r\n isOpen && 'eidos-accordion-trigger--open',\r\n isOpen && `eidos-accordion-trigger--${color}`,\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n\r\n return (\r\n <div className={itemClasses}>\r\n <button\r\n id={triggerId}\r\n type=\"button\"\r\n aria-expanded={isOpen}\r\n aria-controls={panelId}\r\n disabled={disabled}\r\n onClick={() => !disabled && toggle(value)}\r\n className={triggerClasses}\r\n >\r\n {icon && <span className=\"eidos-accordion-trigger-icon\">{icon}</span>}\r\n <span className=\"eidos-accordion-trigger-label\">{label}</span>\r\n <ChevronDown className=\"eidos-accordion-chevron\" aria-hidden=\"true\" />\r\n </button>\r\n\r\n <div\r\n id={panelId}\r\n role=\"region\"\r\n aria-labelledby={triggerId}\r\n ref={contentRef}\r\n className=\"eidos-accordion-content-wrapper\"\r\n style={{ maxHeight: `${maxHeight}px` }}\r\n >\r\n <div className=\"eidos-accordion-content\">{children}</div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nAccordionItem.displayName = 'AccordionItem';\r\n"],"mappings":"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","names":[]}
@@ -0,0 +1,9 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkAUFCW7QUcjs = require('../chunk-AUFCW7QU.cjs');
4
+ require('../chunk-KV2FG7AN.cjs');
5
+ require('../chunk-DZUJEN5N.cjs');
6
+
7
+
8
+ exports.ColorPicker = _chunkAUFCW7QUcjs.ColorPicker;
9
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/color-picker/index.cjs"],"names":[],"mappings":"AAAA;AACE;AACF,yDAA8B;AAC9B,iCAA8B;AAC9B,iCAA8B;AAC9B;AACE;AACF,oDAAC","file":"/Users/pedromealha/Documents/Repositories/Personal/eidos-ui/dist/color-picker/index.cjs"}
@@ -0,0 +1,40 @@
1
+ import React__default from 'react';
2
+ import { C as ComponentSizeProps } from '../sizes-DM6Rrrgq.cjs';
3
+
4
+ type ColorFormat = 'hex' | 'rgb' | 'hsl';
5
+ interface RGBColor {
6
+ r: number;
7
+ g: number;
8
+ b: number;
9
+ }
10
+ interface HSLColor {
11
+ h: number;
12
+ s: number;
13
+ l: number;
14
+ }
15
+ interface ColorPickerProps {
16
+ /** Controlled hex value, e.g. '#6366f1' */
17
+ value?: string;
18
+ /** Initial hex value for uncontrolled usage */
19
+ defaultValue?: string;
20
+ /** Fires on every color change with the new hex string */
21
+ onChange?: (hex: string) => void;
22
+ /** Which text-input format to show initially. Default: 'hex' */
23
+ format?: ColorFormat;
24
+ /** Show the alpha (opacity) slider. Default: false */
25
+ showAlpha?: boolean;
26
+ /** Show preset colour swatches. Default: true */
27
+ showSwatches?: boolean;
28
+ /** Override the default swatch palette with custom hex strings */
29
+ swatches?: string[];
30
+ disabled?: boolean;
31
+ size?: ComponentSizeProps;
32
+ /** Render the picker panel inline - no popover trigger. Default: false */
33
+ inline?: boolean;
34
+ label?: string;
35
+ className?: string;
36
+ }
37
+
38
+ declare const ColorPicker: React__default.FC<ColorPickerProps>;
39
+
40
+ export { type ColorFormat, ColorPicker, type ColorPickerProps, type HSLColor, type RGBColor };