eidos-ui 1.0.1 → 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 -225
  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 -114
  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
@@ -11,40 +11,40 @@
11
11
 
12
12
 
13
13
 
14
- var _chunkL3UPSLJ5cjs = require('./chunk-L3UPSLJ5.cjs');
14
+ var _chunkPA4IT2XQcjs = require('./chunk-PA4IT2XQ.cjs');
15
15
 
16
16
 
17
- var _chunkR36SGSJXcjs = require('./chunk-R36SGSJX.cjs');
17
+ var _chunkTROYIUDHcjs = require('./chunk-TROYIUDH.cjs');
18
18
 
19
19
 
20
- var _chunkVZ43OLU6cjs = require('./chunk-VZ43OLU6.cjs');
20
+ var _chunkEQEV7GPTcjs = require('./chunk-EQEV7GPT.cjs');
21
21
 
22
22
 
23
- var _chunkSAFSEXMUcjs = require('./chunk-SAFSEXMU.cjs');
23
+ var _chunkISABZ2VXcjs = require('./chunk-ISABZ2VX.cjs');
24
24
 
25
25
 
26
- var _chunkQGZF5MOScjs = require('./chunk-QGZF5MOS.cjs');
26
+ var _chunkHLNKIAE5cjs = require('./chunk-HLNKIAE5.cjs');
27
27
 
28
28
 
29
- var _chunkV5JNYS77cjs = require('./chunk-V5JNYS77.cjs');
29
+ var _chunkKV3V2CPHcjs = require('./chunk-KV3V2CPH.cjs');
30
30
 
31
31
 
32
- var _chunkG2FANEA2cjs = require('./chunk-G2FANEA2.cjs');
32
+ var _chunkIJ4DXG7Dcjs = require('./chunk-IJ4DXG7D.cjs');
33
33
 
34
34
 
35
- var _chunkCDV2OAS3cjs = require('./chunk-CDV2OAS3.cjs');
35
+ var _chunkG5IGADJIcjs = require('./chunk-G5IGADJI.cjs');
36
36
 
37
37
 
38
- var _chunkBFYSYUA6cjs = require('./chunk-BFYSYUA6.cjs');
38
+ var _chunkFMPXSF3Hcjs = require('./chunk-FMPXSF3H.cjs');
39
39
 
40
40
 
41
- var _chunkKV2FG7ANcjs = require('./chunk-KV2FG7AN.cjs');
41
+ var _chunkFRUOA2QUcjs = require('./chunk-FRUOA2QU.cjs');
42
42
 
43
43
 
44
- var _chunkLTOHGCU4cjs = require('./chunk-LTOHGCU4.cjs');
44
+ var _chunkA7Z2QAFZcjs = require('./chunk-A7Z2QAFZ.cjs');
45
45
 
46
46
 
47
- var _chunkTBMVUI7Scjs = require('./chunk-TBMVUI7S.cjs');
47
+ var _chunkGOR642KKcjs = require('./chunk-GOR642KK.cjs');
48
48
 
49
49
  // src/components/DataGrid/DataGrid.component.tsx
50
50
  var _react = require('react'); var _react2 = _interopRequireDefault(_react);
@@ -71,7 +71,7 @@ function SortableTableRow({
71
71
  className,
72
72
  children
73
73
  }) {
74
- const { attributes, listeners, setNodeRef, transform, transition, isDragging } = _chunkL3UPSLJ5cjs.useSortable.call(void 0, {
74
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging } = _chunkPA4IT2XQcjs.useSortable.call(void 0, {
75
75
  id,
76
76
  disabled
77
77
  });
@@ -81,7 +81,7 @@ function SortableTableRow({
81
81
  ref: setNodeRef,
82
82
  className: [className, isDragging ? "eidos-datagrid-row--dragging" : ""].filter(Boolean).join(" "),
83
83
  style: {
84
- transform: _chunkL3UPSLJ5cjs.CSS.Transform.toString(transform),
84
+ transform: _chunkPA4IT2XQcjs.CSS.Transform.toString(transform),
85
85
  transition: _nullishCoalesce(transition, () => ( void 0)),
86
86
  opacity: isDragging ? 0.4 : 1
87
87
  },
@@ -693,9 +693,9 @@ function DataGridInner({
693
693
  },
694
694
  [onPageChange]
695
695
  );
696
- const sensors = _chunkL3UPSLJ5cjs.useSensors.call(void 0,
697
- _chunkL3UPSLJ5cjs.useSensor.call(void 0, _chunkL3UPSLJ5cjs.PointerSensor, { activationConstraint: { distance: 5 } }),
698
- _chunkL3UPSLJ5cjs.useSensor.call(void 0, _chunkL3UPSLJ5cjs.KeyboardSensor)
696
+ const sensors = _chunkPA4IT2XQcjs.useSensors.call(void 0,
697
+ _chunkPA4IT2XQcjs.useSensor.call(void 0, _chunkPA4IT2XQcjs.PointerSensor, { activationConstraint: { distance: 5 } }),
698
+ _chunkPA4IT2XQcjs.useSensor.call(void 0, _chunkPA4IT2XQcjs.KeyboardSensor)
699
699
  );
700
700
  const handleRowDragEnd = _react.useCallback.call(void 0,
701
701
  (event) => {
@@ -709,7 +709,7 @@ function DataGridInner({
709
709
  (row, i) => String(_nullishCoalesce(row[rowKey], () => ( i))) === String(over.id)
710
710
  );
711
711
  if (oldIndex === -1 || newIndex === -1) return;
712
- const newData = _chunkL3UPSLJ5cjs.arrayMove.call(void 0, localDataRef.current, oldIndex, newIndex);
712
+ const newData = _chunkPA4IT2XQcjs.arrayMove.call(void 0, localDataRef.current, oldIndex, newIndex);
713
713
  setLocalData(newData);
714
714
  _optionalChain([onChange, 'optionalCall', _26 => _26(newData)]);
715
715
  _optionalChain([onRowReorder, 'optionalCall', _27 => _27(newData)]);
@@ -721,7 +721,7 @@ function DataGridInner({
721
721
  switch (col.type) {
722
722
  case "checkbox":
723
723
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
724
- _chunkG2FANEA2cjs.Checkbox,
724
+ _chunkIJ4DXG7Dcjs.Checkbox,
725
725
  {
726
726
  checked: Boolean(value),
727
727
  onChange: () => {
@@ -750,7 +750,7 @@ function DataGridInner({
750
750
  switch (col.type) {
751
751
  case "number":
752
752
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
753
- _chunkCDV2OAS3cjs.Input,
753
+ _chunkG5IGADJIcjs.Input,
754
754
  {
755
755
  type: "number",
756
756
  variant,
@@ -764,7 +764,7 @@ function DataGridInner({
764
764
  );
765
765
  case "date":
766
766
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
767
- _chunkCDV2OAS3cjs.Input,
767
+ _chunkG5IGADJIcjs.Input,
768
768
  {
769
769
  type: "date",
770
770
  variant,
@@ -783,7 +783,7 @@ function DataGridInner({
783
783
  label: o.label
784
784
  }));
785
785
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
786
- _chunkQGZF5MOScjs.Select,
786
+ _chunkHLNKIAE5cjs.Select,
787
787
  {
788
788
  options: selectOptions,
789
789
  value: String(_nullishCoalesce(value, () => ( ""))),
@@ -805,7 +805,7 @@ function DataGridInner({
805
805
  }
806
806
  default:
807
807
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
808
- _chunkCDV2OAS3cjs.Input,
808
+ _chunkG5IGADJIcjs.Input,
809
809
  {
810
810
  type: "text",
811
811
  variant,
@@ -878,9 +878,9 @@ function DataGridInner({
878
878
  });
879
879
  if (!items.length) return null;
880
880
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
881
- _chunkBFYSYUA6cjs.Menu,
881
+ _chunkFMPXSF3Hcjs.Menu,
882
882
  {
883
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "button", { type: "button", className: "eidos-datagrid-actions-trigger", "aria-label": "Row actions", children: actionsColumn.actionsIcon ? _chunkTBMVUI7Scjs.renderIcon.call(void 0, actionsColumn.actionsIcon, "eidos-datagrid-actions-trigger-icon") : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.MoreVertical, { size: 16 }) }),
883
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "button", { type: "button", className: "eidos-datagrid-actions-trigger", "aria-label": "Row actions", children: actionsColumn.actionsIcon ? _chunkGOR642KKcjs.renderIcon.call(void 0, actionsColumn.actionsIcon, "eidos-datagrid-actions-trigger-icon") : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.MoreVertical, { size: 16 }) }),
884
884
  items
885
885
  }
886
886
  );
@@ -912,7 +912,7 @@ function DataGridInner({
912
912
  ref: setContainerRef,
913
913
  className: ["eidos-data-grid-container", className].filter(Boolean).join(" "),
914
914
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-data-grid-loading", children: [
915
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkR36SGSJXcjs.Spinner, { size: "md" }),
915
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTROYIUDHcjs.Spinner, { size: "md" }),
916
916
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { children: "Loading\u2026" })
917
917
  ] })
918
918
  }
@@ -948,7 +948,7 @@ function DataGridInner({
948
948
  const isDisabled = typeof action.disabled === "function" ? action.disabled(selectedItems) : _nullishCoalesce(action.disabled, () => ( false));
949
949
  if (action.type === "split-button") {
950
950
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
951
- _chunkVZ43OLU6cjs.SplitButton,
951
+ _chunkEQEV7GPTcjs.SplitButton,
952
952
  {
953
953
  size: "sm",
954
954
  variant: _nullishCoalesce(action.variant, () => ( "outlined")),
@@ -969,7 +969,7 @@ function DataGridInner({
969
969
  );
970
970
  }
971
971
  return action.label ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
972
- _chunkLTOHGCU4cjs.Button,
972
+ _chunkA7Z2QAFZcjs.Button,
973
973
  {
974
974
  size: "sm",
975
975
  variant: _nullishCoalesce(action.variant, () => ( "outlined")),
@@ -982,7 +982,7 @@ function DataGridInner({
982
982
  },
983
983
  action.id
984
984
  ) : action.icon ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
985
- _chunkLTOHGCU4cjs.Button,
985
+ _chunkA7Z2QAFZcjs.Button,
986
986
  {
987
987
  size: "sm",
988
988
  variant: _nullishCoalesce(action.variant, () => ( "outlined")),
@@ -1007,12 +1007,12 @@ function DataGridInner({
1007
1007
  ] }) }),
1008
1008
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "eidos-datagrid-toolbar-right", children: [
1009
1009
  showDensity && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1010
- _chunkKV2FG7ANcjs.Dropdown,
1010
+ _chunkFRUOA2QUcjs.Dropdown,
1011
1011
  {
1012
1012
  placement: "bottom",
1013
1013
  align: "end",
1014
1014
  autoWidth: false,
1015
- trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLTOHGCU4cjs.Button, { variant: "text", size: "sm", preIcon: _lucidereact.AlignJustify, children: "Density" }),
1015
+ trigger: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkA7Z2QAFZcjs.Button, { variant: "text", size: "sm", preIcon: _lucidereact.AlignJustify, children: "Density" }),
1016
1016
  content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-table-menu-panel", children: [
1017
1017
  { value: "compact", label: "Compact" },
1018
1018
  { value: "comfortable", label: "Comfortable" },
@@ -1035,14 +1035,14 @@ function DataGridInner({
1035
1035
  }
1036
1036
  ),
1037
1037
  showFilters && filterDropdownColumns.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1038
- _chunkL3UPSLJ5cjs.TableFiltersDropdown,
1038
+ _chunkPA4IT2XQcjs.TableFiltersDropdown,
1039
1039
  {
1040
1040
  columns: filterDropdownColumns,
1041
1041
  filters: activeFilters,
1042
1042
  onFiltersChange: handleFiltersChange
1043
1043
  }
1044
1044
  ),
1045
- onRowAdd && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLTOHGCU4cjs.Button, { variant: "outlined", size: "sm", preIcon: _lucidereact.Plus, onClick: handleRowAdd, children: "Add row" })
1045
+ onRowAdd && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkA7Z2QAFZcjs.Button, { variant: "outlined", size: "sm", preIcon: _lucidereact.Plus, onClick: handleRowAdd, children: "Add row" })
1046
1046
  ] })
1047
1047
  ] }),
1048
1048
  isCardView ? (
@@ -1083,7 +1083,7 @@ function DataGridInner({
1083
1083
  }
1084
1084
  ),
1085
1085
  selectable && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1086
- _chunkG2FANEA2cjs.Checkbox,
1086
+ _chunkIJ4DXG7Dcjs.Checkbox,
1087
1087
  {
1088
1088
  checked: isRowSelected,
1089
1089
  onChange: () => toggleRow(rowKeyValue),
@@ -1124,13 +1124,13 @@ function DataGridInner({
1124
1124
  rowKeyValue
1125
1125
  );
1126
1126
  }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-datagrid-card-empty", children: Object.keys(activeFilters).length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1127
- _chunkV5JNYS77cjs.EmptyState,
1127
+ _chunkKV3V2CPHcjs.EmptyState,
1128
1128
  {
1129
1129
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SearchX, {}),
1130
1130
  title: "No results found",
1131
1131
  description: "Try adjusting your filters or search terms.",
1132
1132
  action: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1133
- _chunkLTOHGCU4cjs.Button,
1133
+ _chunkA7Z2QAFZcjs.Button,
1134
1134
  {
1135
1135
  size: "sm",
1136
1136
  variant: "outlined",
@@ -1142,7 +1142,7 @@ function DataGridInner({
1142
1142
  size: "sm"
1143
1143
  }
1144
1144
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1145
- _chunkV5JNYS77cjs.EmptyState,
1145
+ _chunkKV3V2CPHcjs.EmptyState,
1146
1146
  {
1147
1147
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.FolderOpen, {}),
1148
1148
  title: emptyText,
@@ -1153,10 +1153,10 @@ function DataGridInner({
1153
1153
  }
1154
1154
  )
1155
1155
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1156
- _chunkL3UPSLJ5cjs.DndContext,
1156
+ _chunkPA4IT2XQcjs.DndContext,
1157
1157
  {
1158
1158
  sensors,
1159
- collisionDetection: _chunkL3UPSLJ5cjs.closestCenter,
1159
+ collisionDetection: _chunkPA4IT2XQcjs.closestCenter,
1160
1160
  onDragEnd: handleRowDragEnd,
1161
1161
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-data-grid-scroll", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "table", { className: ["eidos-data-grid", densityClass].filter(Boolean).join(" "), children: [
1162
1162
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "thead", { ref: theadRef, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "tr", { children: [
@@ -1195,7 +1195,7 @@ function DataGridInner({
1195
1195
  style: selHeaderPin.style,
1196
1196
  "data-col-key": "__sel__",
1197
1197
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1198
- _chunkG2FANEA2cjs.Checkbox,
1198
+ _chunkIJ4DXG7Dcjs.Checkbox,
1199
1199
  {
1200
1200
  checked: allSelected,
1201
1201
  indeterminate: someSelected,
@@ -1260,7 +1260,7 @@ function DataGridInner({
1260
1260
  }
1261
1261
  )
1262
1262
  ] }) }),
1263
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "tbody", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkL3UPSLJ5cjs.SortableContext, { items: rowIds, strategy: _chunkL3UPSLJ5cjs.verticalListSortingStrategy, children: displayData.length > 0 ? displayData.map((row, displayIndex) => {
1263
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "tbody", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkPA4IT2XQcjs.SortableContext, { items: rowIds, strategy: _chunkPA4IT2XQcjs.verticalListSortingStrategy, children: displayData.length > 0 ? displayData.map((row, displayIndex) => {
1264
1264
  const localIndex = localData.indexOf(row);
1265
1265
  const rowKeyValue = String(_nullishCoalesce(row[rowKey], () => ( displayIndex)));
1266
1266
  const isRowSelected = selectable && selectedSet.has(rowKeyValue);
@@ -1342,7 +1342,7 @@ function DataGridInner({
1342
1342
  style: selCellPin.style,
1343
1343
  onClick: (e) => e.stopPropagation(),
1344
1344
  children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1345
- _chunkG2FANEA2cjs.Checkbox,
1345
+ _chunkIJ4DXG7Dcjs.Checkbox,
1346
1346
  {
1347
1347
  checked: isRowSelected,
1348
1348
  onChange: () => toggleRow(rowKeyValue),
@@ -1420,13 +1420,13 @@ function DataGridInner({
1420
1420
  colSpan: totalCols,
1421
1421
  className: "eidos-data-grid-cell eidos-data-grid-empty-cell",
1422
1422
  children: Object.keys(activeFilters).length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1423
- _chunkV5JNYS77cjs.EmptyState,
1423
+ _chunkKV3V2CPHcjs.EmptyState,
1424
1424
  {
1425
1425
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.SearchX, {}),
1426
1426
  title: "No results found",
1427
1427
  description: "Try adjusting your filters or search terms.",
1428
1428
  action: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1429
- _chunkLTOHGCU4cjs.Button,
1429
+ _chunkA7Z2QAFZcjs.Button,
1430
1430
  {
1431
1431
  size: "sm",
1432
1432
  variant: "outlined",
@@ -1438,7 +1438,7 @@ function DataGridInner({
1438
1438
  size: "sm"
1439
1439
  }
1440
1440
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1441
- _chunkV5JNYS77cjs.EmptyState,
1441
+ _chunkKV3V2CPHcjs.EmptyState,
1442
1442
  {
1443
1443
  icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.FolderOpen, {}),
1444
1444
  title: emptyText,
@@ -1452,7 +1452,7 @@ function DataGridInner({
1452
1452
  }
1453
1453
  ) }),
1454
1454
  showPagination && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "eidos-datagrid-footer", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1455
- _chunkSAFSEXMUcjs.Pagination,
1455
+ _chunkISABZ2VXcjs.Pagination,
1456
1456
  {
1457
1457
  page: currentPage,
1458
1458
  totalPages,
@@ -1483,4 +1483,4 @@ var DataGrid = Object.assign(DataGridInner, { displayName: "DataGrid" });
1483
1483
 
1484
1484
 
1485
1485
  exports.DataGrid = DataGrid;
1486
- //# sourceMappingURL=chunk-6GAIQ2IY.cjs.map
1486
+ //# sourceMappingURL=chunk-CBLWP43O.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/eidos-ui/eidos-ui/dist/chunk-CBLWP43O.cjs","../src/components/DataGrid/DataGrid.component.tsx"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;AChDA,4EAA0F;AAC1F,qCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,2CACK;AAwEH,+CAAA;AA5BJ,IAAM,oBAAA,EAAsB,GAAA;AAW5B,SAAS,gBAAA,CAAiB;AAAA,EACxB,EAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAKuB;AACrB,EAAA,MAAM,EAAE,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,SAAA,EAAW,UAAA,EAAY,WAAW,EAAA,EAAI,2CAAA;AAAY,IAC3F,EAAA;AAAA,IACA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACE,6BAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,CAAC,SAAA,EAAW,WAAA,EAAa,+BAAA,EAAiC,EAAE,CAAA,CACpE,MAAA,CAAO,OAAO,CAAA,CACd,IAAA,CAAK,GAAG,CAAA;AAAA,MACX,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,qBAAA,CAAI,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA;AAAA,QAC3C,UAAA,mBAAY,UAAA,UAAc,KAAA,GAAA;AAAA,QAC1B,OAAA,EAAS,WAAA,EAAa,IAAA,EAAM;AAAA,MAC9B,CAAA;AAAA,MACC,GAAG,UAAA;AAAA,MAEH,QAAA,EAAA,QAAA,kBAAS,SAAA,UAAa,CAAC,GAAA,EAAG,UAAU;AAAA,IAAA;AAAA,EACvC,CAAA;AAEJ;AAqBA,SAAS,kBAAA,CAAmB,MAAA,EAM1B;AAIA,EAAA,MAAM,SAAA,EAAW,2BAAA,IAA2B,CAAA;AAK5C,EAAA,MAAM,SAAA,EAAW,2BAAA,IAA2B,CAAA;AAC5C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,EAAA,EAAI,6BAAA,CAAU,CAAA;AAC5C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,EAAA,EAAI,6BAAA,MAAe,CAAA;AAE7C,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,MAAA,EAAQ,UAAA,CAAW,IAAI,CAAA;AAAA,EAC7B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,8BAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,CAAC,OAAA,EAAS,MAAA;AAEd,IAAA,GAAA,CAAI,CAAC,MAAA,EAAQ;AACX,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,EAAO,QAAA,CAAS,OAAA;AACtB,IAAA,GAAA,CAAI,CAAC,IAAA,EAAM,MAAA;AAEX,IAAA,MAAM,OAAA,EAAS,CAAA,EAAA,GAAM,YAAA,CAAa,IAAA,CAAK,YAAY,CAAA;AACnD,IAAA,MAAA,CAAO,CAAA;AAEP,IAAA,MAAM,SAAA,EAAW,IAAI,cAAA,CAAe,MAAM,CAAA;AAC1C,IAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACrB,IAAA,OAAO,CAAA,EAAA,GAAM,QAAA,CAAS,UAAA,CAAW,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAO,CAAC,CAAA;AAEpB,EAAA,MAAM,oBAAA,EAAsB,gCAAA,CAAY,EAAA,GAAM;AAC5C,IAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,UAAA,CAAW,KAAK,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,oBAAoB,CAAA;AACvE;AAIA,SAAS,gBAAA,CAAiB;AAAA,EACxB,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAI8B;AAC5B,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,oBAAoB,EAAA,EAClE,kBAAA,CAAmB,MAAM,CAAA;AAC3B,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS,OAAO,IAAA;AAErB,EAAA,uBACE,6BAAA,IAAC,EAAA,EAAG,SAAA,EAAU,6BAAA,EACZ,QAAA,kBAAA,6BAAA,IAAC,EAAA,EAAG,OAAA,EAAkB,SAAA,EAAU,8BAAA,EAC9B,QAAA,kBAAA,6BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,QAAA;AAAA,MACL,SAAA,EAAU,6BAAA;AAAA,MACV,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAA;AACH,MAAA;AAEjB,MAAA;AAEA,IAAA;AAGN,EAAA;AAEJ;AAI2B;AACzB,EAAA;AACA,EAAA;AAI4B;AACX,EAAA;AAEI,EAAA;AAGnB,EAAA;AAAC,IAAA;AAAA,IAAA;AACM,MAAA;AACK,MAAA;AACU,MAAA;AACH,MAAA;AAEjB,MAAA;AAEA,IAAA;AACF,EAAA;AAEJ;AAK0D;AAAA;AAExD,EAAA;AACA,EAAA;AACS,EAAA;AACT,EAAA;AACA,EAAA;AACW,EAAA;AACD,EAAA;AACE,EAAA;AACZ,EAAA;AACe,EAAA;AACf,EAAA;AACiB,EAAA;AACD,EAAA;AAChB,EAAA;AAAA;AAEA,EAAA;AACA,EAAA;AAAA;AAEc,EAAA;AACE,EAAA;AAChB,EAAA;AACA,EAAA;AAAA;AAEiB,EAAA;AACN,EAAA;AACX,EAAA;AACW,EAAA;AACX,EAAA;AAAA;AAEa,EAAA;AACC,EAAA;AACd,EAAA;AACA,EAAA;AACA,EAAA;AAAA;AAEa,EAAA;AACb,EAAA;AACA,EAAA;AACiB,EAAA;AACH,EAAA;AACd,EAAA;AACA,EAAA;AAAA;AAEU,EAAA;AACI,EAAA;AAAA;AAEA,EAAA;AACO,EAAA;AACN,EAAA;AACwB;AAMrB,EAAA;AACG,EAAA;AAED,EAAA;AACG,EAAA;AAEL,EAAA;AACG,EAAA;AAEH,EAAA;AAYZ,EAAA;AACC,EAAA;AAIiB,EAAA;AAEF,EAAA;AACE,IAAA;AACpB,MAAA;AACA,MAAA;AACF,IAAA;AAEuB,IAAA;AACR,MAAA;AACF,MAAA;AACO,MAAA;AAClB,MAAA;AACF,IAAA;AAEe,IAAA;AAMR,IAAA;AACA,IAAA;AACM,IAAA;AACJ,MAAA;AACA,MAAA;AACT,IAAA;AACkB,EAAA;AAII,EAAA;AACtB,IAAA;AACF,EAAA;AACyB,EAAA;AAGJ,EAAA;AAMG,EAAA;AAGJ,EAAA;AACI,EAAA;AAGlB,EAAA;AACC,EAAA;AACS,IAAA;AAChB,EAAA;AAGM,EAAA;AACC,EAAA;AACS,IAAA;AAChB,EAAA;AAOuB,EAAA;AACjB,EAAA;AAekB,EAAA;AACS,IAAA;AACX,sBAAA;AACA,MAAA;AAEN,MAAA;AAES,MAAA;AACL,QAAA;AACK,QAAA;AACpB,MAAA;AACkB,MAAA;AACD,MAAA;AACpB,IAAA;AACY,IAAA;AACd,EAAA;AAMM,EAAA;AAYJ,EAAA;AAOuB,EAAA;AACnB,EAAA;AAKgB,EAAA;AAIF,EAAA;AACI,IAAA;AACC,IAAA;AACzB,EAAA;AAEyB,EAAA;AACL,IAAA;AACJ,IAAA;AAChB,EAAA;AAGiD,EAAA;AAC3B,EAAA;AAKD,EAAA;AACI,IAAA;AACR,IAAA;AACZ,EAAA;AAEkB,EAAA;AACN,IAAA;AACE,IAAA;AACd,EAAA;AAEgB,EAAA;AACI,IAAA;AACR,IAAA;AACZ,EAAA;AAGW,EAAA;AACG,IAAA;AACI,EAAA;AAKJ,EAAA;AAIiB,EAAA;AAC3B,IAAA;AACW,IAAA;AACpB,EAAA;AAGoB,EAAA;AAER,IAAA;AACT,IAAA;AACH,EAAA;AAEgB,EAAA;AACO,IAAA;AACH,IAAA;AACpB,EAAA;AAEoB,EAAA;AACE,EAAA;AACD,EAAA;AAEC,EAAA;AACG,IAAA;AACX,IAAA;AACd,EAAA;AAGoB,EAAA;AAER,IAAA;AACT,IAAA;AACH,EAAA;AAKM,EAAA;AACgB,IAAA;AAEf,MAAA;AACY,QAAA;AACE,QAAA;AACD,QAAA;AACM,QAAA;AACH,QAAA;AACC,QAAA;AAClB,MAAA;AACJ,IAAA;AACe,EAAA;AAGI,EAAA;AAEE,IAAA;AAEC,IAAA;AACR,MAAA;AACS,MAAA;AACd,MAAA;AACR,IAAA;AAEiB,IAAA;AAED,IAAA;AACf,MAAA;AACoB,QAAA;AAEA,QAAA;AACT,UAAA;AACT,QAAA;AACW,QAAA;AACM,UAAA;AACjB,QAAA;AACW,QAAA;AACM,UAAA;AACC,UAAA;AACH,UAAA;AACF,UAAA;AACJ,UAAA;AACT,QAAA;AAEc,QAAA;AAGf,MAAA;AACH,IAAA;AACa,EAAA;AAGI,EAAA;AAEI,IAAA;AAEE,IAAA;AACN,MAAA;AACA,MAAA;AAEK,MAAA;AACF,MAAA;AACA,MAAA;AAGhB,MAAA;AAIgB,MAAA;AACnB,IAAA;AACe,EAAA;AAGE,EAAA;AACG,IAAA;AACH,IAAA;AACH,IAAA;AACG,IAAA;AACJ,EAAA;AAEO,EAAA;AACC,EAAA;AAWC,EAAA;AACT,EAAA;AACE,IAAA;AACG,EAAA;AAGL,EAAA;AACE,IAAA;AACD,EAAA;AAMK,EAAA;AACF,IAAA;AACC,IAAA;AACC,MAAA;AAClB,MAAA;AACF,IAAA;AAEkB,IAAA;AACF,IAAA;AAEI,IAAA;AACD,IAAA;AAKA,IAAA;AACH,IAAA;AACG,IAAA;AACA,MAAA;AACL,MAAA;AACM,QAAA;AACC,UAAA;AACjB,QAAA;AACkB,QAAA;AACb,MAAA;AACO,QAAA;AACK,QAAA;AACA,UAAA;AACF,UAAA;AACf,QAAA;AACF,MAAA;AACF,IAAA;AAGiB,IAAA;AACE,IAAA;AACG,MAAA;AACH,MAAA;AACL,MAAA;AACS,QAAA;AACd,MAAA;AACO,QAAA;AACK,QAAA;AACA,UAAA;AACD,UAAA;AAChB,QAAA;AACF,MAAA;AACF,IAAA;AAEiB,IAAA;AACM,EAAA;AAGnB,EAAA;AACmE,IAAA;AACxD,MAAA;AACO,MAAA;AACb,MAAA;AACc,QAAA;AAEZ,QAAA;AAGT,MAAA;AACF,IAAA;AACc,IAAA;AAChB,EAAA;AAEM,EAAA;AACmE,IAAA;AACxD,MAAA;AACO,MAAA;AACb,MAAA;AAAA;AAEc,QAAA;AAEZ,QAAA;AAGT,MAAA;AACF,IAAA;AACc,IAAA;AAChB,EAAA;AAGuB,EAAA;AACgB,IAAA;AACpB,MAAA;AACE,MAAA;AACI,MAAA;AACd,MAAA;AACT,IAAA;AACS,IAAA;AACX,EAAA;AAEqB,EAAA;AACE,IAAA;AACZ,MAAA;AACT,IAAA;AACkB,IAAA;AACG,MAAA;AACE,MAAA;AACvB,IAAA;AACO,IAAA;AACJ,EAAA;AAEiB,EAAA;AAaH,EAAA;AACuB,IAAA;AACrB,IAAA;AACC,MAAA;AACX,QAAA;AACS,QAAA;AACI,QAAA;AACpB,MAAA;AACD,IAAA;AACM,IAAA;AACe,EAAA;AAQJ,EAAA;AACiB,IAAA;AACb,MAAA;AACH,MAAA;AAEH,MAAA;AAEE,MAAA;AACd,QAAA;AACF,MAAA;AACoB,MAAA;AACF,sBAAA;AAEX,MAAA;AACT,IAAA;AACoB,IAAA;AACtB,EAAA;AASmB,EAAA;AACJ,IAAA;AACF,IAAA;AAES,IAAA;AACV,IAAA;AACW,MAAA;AACnB,MAAA;AACF,IAAA;AAEiB,IAAA;AACE,IAAA;AACF,IAAA;AACN,EAAA;AAEO,EAAA;AACC,IAAA;AACF,IAAA;AACA,EAAA;AAIG,EAAA;AACN,EAAA;AACA,IAAA;AACD,EAAA;AAoBC,EAAA;AACI,IAAA;AAEZ,IAAA;AACa,MAAA;AAGR,MAAA;AACL,QAAA;AAEF,MAAA;AACA,QAAA;AACF,MAAA;AAEc,MAAA;AAChB,IAAA;AAES,IAAA;AACa,IAAA;AACR,EAAA;AAGE,EAAA;AACmB,IAAA;AACb,MAAA;AACP,MAAA;AACI,MAAA;AACJ,MAAA;AAGA,MAAA;AACf,IAAA;AACU,IAAA;AACZ,EAAA;AAGwB,EAAA;AACwB,IAAA;AAC9B,MAAA;AAGG,MAAA;AACE,QAAA;AACD,QAAA;AACd,UAAA;AACF,QAAA;AACa,QAAA;AACK,wBAAA;AAClB,QAAA;AACF,MAAA;AAEoB,MAAA;AAGP,MAAA;AACH,MAAA;AAGW,MAAA;AAED,MAAA;AACtB,IAAA;AACW,IAAA;AACb,EAAA;AAGsB,EAAA;AACuB,IAAA;AAC3B,MAAA;AACK,QAAA;AACL,QAAA;AACZ,QAAA;AACF,MAAA;AAEc,MAAA;AACK,QAAA;AACN,QAAA;AACX,QAAA;AACF,MAAA;AAEqB,MAAA;AACF,QAAA;AAGX,QAAA;AACW,QAAA;AACC,UAAA;AACV,YAAA;AACF,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA;AAEY,QAAA;AACG,QAAA;AAGH,QAAA;AAEF,QAAA;AACO,UAAA;AACF,UAAA;AACA,UAAA;AACR,QAAA;AACU,UAAA;AACE,UAAA;AACnB,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACE,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACF,IAAA;AACF,EAAA;AAEqB,EAAA;AACJ,IAAA;AACA,IAAA;AACE,IAAA;AACG,IAAA;AACF,oBAAA;AACF,IAAA;AACM,EAAA;AAGA,EAAA;AACF,IAAA;AACb,MAAA;AACQ,MAAA;AACN,QAAA;AACP,MAAA;AACoB,sBAAA;AACtB,IAAA;AACC,IAAA;AACH,EAAA;AAEkB,EAAA;AACC,IAAA;AACF,MAAA;AAGO,MAAA;AACtB,IAAA;AACc,IAAA;AAChB,EAAA;AAEkB,EAAA;AACA,IAAA;AACD,EAAA;AAEM,EAAA;AAGA,EAAA;AACD,IAAA;AACb,MAAA;AACL,sBAAA;AACF,IAAA;AACC,IAAA;AACH,EAAA;AAEuB,EAAA;AACJ,IAAA;AACA,MAAA;AACF,MAAA;AAOM,MAAA;AACrB,IAAA;AACc,IAAA;AAChB,EAAA;AAGwB,EAAA;AACF,IAAA;AACA,MAAA;AAGd,QAAA;AACW,QAAA;AACR,MAAA;AAEY,QAAA;AACL,UAAA;AACI,YAAA;AACd,UAAA;AACc,UAAA;AACf,QAAA;AACH,MAAA;AACF,IAAA;AACe,IAAA;AACjB,EAAA;AAGM,EAAA;AAC0B,IAAA;AACZ,MAAA;AACK,MAAA;AACH,QAAA;AACX,MAAA;AACc,QAAA;AACrB,MAAA;AACF,IAAA;AACgB,IAAA;AAClB,EAAA;AAGyB,EAAA;AACL,IAAA;AACG,MAAA;AACE,sBAAA;AACvB,IAAA;AACkB,IAAA;AACpB,EAAA;AAEM,EAAA;AACqB,IAAA;AACJ,MAAA;AACH,MAAA;AACE,sBAAA;AACpB,IAAA;AACa,IAAA;AACf,EAAA;AAKgB,EAAA;AACJ,IAAA;AACA,IAAA;AACZ,EAAA;AAEyB,EAAA;AACE,IAAA;AACH,MAAA;AACC,MAAA;AACD,MAAA;AAEH,MAAA;AACI,QAAA;AACrB,MAAA;AACiB,MAAA;AACI,QAAA;AACrB,MAAA;AAEiB,MAAA;AAED,MAAA;AACI,MAAA;AACF,sBAAA;AACH,sBAAA;AACjB,IAAA;AACgB,IAAA;AAClB,EAAA;AAIE,EAAA;AAKoB,IAAA;AAEF,IAAA;AACX,MAAA;AAID,QAAA;AAAC,UAAA;AAAA,UAAA;AACU,YAAA;AACC,YAAA;AAEV,YAAA;AACK,YAAA;AAAA,UAAA;AACP,QAAA;AAGW,MAAA;AACM,QAAA;AACZ,QAAA;AACT,MAAA;AAEK,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAA;AACL,MAAA;AACS,QAAA;AACX,IAAA;AACF,EAAA;AAYE,EAAA;AAMsB,IAAA;AACT,MAAA;AACb,IAAA;AAEgB,IAAA;AACH,IAAA;AAEK,IAAA;AACX,MAAA;AAED,QAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACL,YAAA;AACA,YAAA;AACc,YAAA;AACH,YAAA;AACF,YAAA;AACA,YAAA;AACE,YAAA;AAAA,UAAA;AACb,QAAA;AAGC,MAAA;AAED,QAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACL,YAAA;AACA,YAAA;AACc,YAAA;AACH,YAAA;AACF,YAAA;AACA,YAAA;AACE,YAAA;AAAA,UAAA;AACb,QAAA;AAGW,MAAA;AAKP,QAAA;AACE,UAAA;AACG,UAAA;AACA,UAAA;AACT,QAAA;AAGA,QAAA;AAAC,UAAA;AAAA,UAAA;AACU,YAAA;AACK,YAAA;AACN,YAAA;AACC,YAAA;AACK,YAAA;AACH,YAAA;AACH,cAAA;AACA,cAAA;AACJ,gBAAA;AACF,cAAA;AACa,cAAA;AACF,8BAAA;AACX,cAAA;AACF,YAAA;AACW,YAAA;AAAA,UAAA;AACb,QAAA;AAEJ,MAAA;AAEA,MAAA;AAEI,QAAA;AAAC,UAAA;AAAA,UAAA;AACM,YAAA;AACL,YAAA;AACA,YAAA;AACc,YAAA;AACH,YAAA;AACF,YAAA;AACA,YAAA;AACE,YAAA;AAAA,UAAA;AACb,QAAA;AAEN,IAAA;AACF,EAAA;AAQE,EAAA;AAKsB,IAAA;AACJ,IAAA;AACF,IAAA;AACE,IAAA;AACD,IAAA;AAEA,IAAA;AACf,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQa,MAAA;AACD,MAAA;AACE,MAAA;AACF,MAAA;AACC,MAAA;AAAc;AAAA;AAAA;AAId,MAAA;AAGP,IAAA;AAGN,IAAA;AAAC,MAAA;AAAA,MAAA;AAEe,QAAA;AAEH,QAAA;AACI,QAAA;AACJ,QAAA;AACD,QAAA;AAET,QAAA;AAE6C,MAAA;AAChD,IAAA;AAEJ,EAAA;AAIyB,EAAA;AAEpB,oBAAA;AACqB,IAAA;AACxB,EAAA;AAOI,EAAA;AACgB,IAAA;AAEU,IAAA;AAGN,MAAA;AAEhB,MAAA;AAEyB,MAAA;AACzB,QAAA;AACM,QAAA;AACQ,QAAA;AACD,QAAA;AACH,QAAA;AACI,QAAA;AACC,QAAA;AACjB,MAAA;AAEc,MAAA;AAGf,IAAA;AAEc,IAAA;AAGjB,IAAA;AAAC,MAAA;AAAA,MAAA;AAEG,QAAA;AAQF,QAAA;AAAA,MAAA;AACF,IAAA;AAEJ,EAAA;AAQsB,EAAA;AACd,IAAA;AACW,MAAA;AACA,MAAA;AACA,MAAA;AACjB,IAAA;AACY,IAAA;AACd,EAAA;AAGE,EAAA;AASa,EAAA;AAE8B,EAAA;AACzB,EAAA;AACH,IAAA;AACjB,EAAA;AAGsB,EAAA;AAIpB,EAAA;AAGI,EAAA;AACS,IAAA;AACQ,IAAA;AACF,EAAA;AAQR,EAAA;AAET,IAAA;AAAC,MAAA;AAAA,MAAA;AACM,QAAA;AACO,QAAA;AAEZ,QAAA;AACE,0BAAA;AACA,0BAAA;AACF,QAAA;AAAA,MAAA;AACF,IAAA;AAEJ,EAAA;AAKwB,EAAA;AACH,EAAA;AACC,EAAA;AACE,EAAA;AACF,EAAA;AACH,EAAA;AACC,EAAA;AACE,EAAA;AAGpB,EAAA;AAAC,IAAA;AAAA,IAAA;AACM,MAAA;AACM,MAAA;AACT,QAAA;AACgB,QAAA;AAChB,QAAA;AACA,QAAA;AAGC,MAAA;AACI,MAAA;AAGN,MAAA;AACC,QAAA;AAEE,0BAAA;AAGM,4BAAA;AAA8D,cAAA;AAAK,cAAA;AAAS,YAAA;AAE5D,YAAA;AAGJ,cAAA;AAKK,cAAA;AAEP,gBAAA;AAAC,kBAAA;AAAA,kBAAA;AAEM,oBAAA;AACL,oBAAA;AACO,oBAAA;AACP,oBAAA;AACA,oBAAA;AACO,oBAAA;AACP,oBAAA;AACA,oBAAA;AACM,sBAAA;AACJ,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,oBAAA;AAAA,kBAAA;AAdU,kBAAA;AAed,gBAAA;AAEJ,cAAA;AAEO,cAAA;AACJ,gBAAA;AAAA,gBAAA;AAEM,kBAAA;AACI,kBAAA;AACF,kBAAA;AACE,kBAAA;AACA,kBAAA;AACT,kBAAA;AACS,kBAAA;AAER,kBAAA;AAAO,gBAAA;AATI,gBAAA;AAWL,cAAA;AACR,gBAAA;AAAA,gBAAA;AAEM,kBAAA;AACI,kBAAA;AACF,kBAAA;AACD,kBAAA;AACN,kBAAA;AACS,kBAAA;AAAkC,gBAAA;AAN/B,gBAAA;AAQZ,cAAA;AAER,YAAA;AAGF,4BAAA;AAAC,cAAA;AAAA,cAAA;AACM,gBAAA;AACK,gBAAA;AACD,gBAAA;AACT,gBAAA;AAEA,gBAAA;AAAa,cAAA;AACf,YAAA;AAGN,UAAA;AAGA,0BAAA;AAEI,YAAA;AAAC,cAAA;AAAA,cAAA;AACW,gBAAA;AACJ,gBAAA;AACK,gBAAA;AAET,gBAAA;AAKA,gBAAA;AAGe,kBAAA;AACA,kBAAA;AACA,kBAAA;AAEN,gBAAA;AACJ,kBAAA;AAAA,kBAAA;AAEC,oBAAA;AACE,sBAAA;AACA,sBAAA;AAEC,oBAAA;AAEH,oBAAA;AAEA,oBAAA;AAAA,sCAAA;AAGA,sCAAA;AAAoB,oBAAA;AAAA,kBAAA;AAZR,kBAAA;AAelB,gBAAA;AAAA,cAAA;AAEJ,YAAA;AAGc,YAAA;AACb,cAAA;AAAA,cAAA;AACU,gBAAA;AACA,gBAAA;AACT,gBAAA;AAAiB,cAAA;AACnB,YAAA;AAIA,YAAA;AAIJ,UAAA;AACF,QAAA;AAGD,QAAA;AAAA;AAEC,0BAAA;AAAC,YAAA;AAAA,YAAA;AACW,cAAA;AACD,cAAA;AAER,cAAA;AAES,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AAGJ,gBAAA;AAAC,kBAAA;AAAA,kBAAA;AAEC,oBAAA;AACE,sBAAA;AACA,sBAAA;AAEC,oBAAA;AAOH,oBAAA;AAAA,sCAAA;AACE,wCAAA;AACG,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACM,8BAAA;AACM,gCAAA;AACT,gCAAA;AACiB,8BAAA;AAGR,8BAAA;AAC8B,8BAAA;AAC1B,8BAAA;AAC8B,8BAAA;AAErB,4BAAA;AAC1B,0BAAA;AAED,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACU,8BAAA;AAC4B,8BAAA;AAChC,4BAAA;AACP,0BAAA;AAED,0BAAA;AACkD,4BAAA;AAAA,4BAAA;AAAe,0BAAA;AAEpE,wBAAA;AAMA,wCAAA;AACG,0BAAA;AACC,4BAAA;AACE,4BAAA;AACA,4BAAA;AACA,4BAAA;AAEF,0BAAA;AACD,0BAAA;AACC,4BAAA;AACE,4BAAA;AACA,4BAAA;AACA,4BAAA;AAEF,0BAAA;AACJ,wBAAA;AAEA,wCAAA;AAGF,sBAAA;AAEA,sCAAA;AAIC,sBAAA;AACE,wBAAA;AAAA,wBAAA;AACC,0BAAA;AACA,0BAAA;AAAmD,wBAAA;AACrD,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AA5EG,kBAAA;AA8EP,gBAAA;AAIJ,cAAA;AAEK,gBAAA;AAAA,gBAAA;AACO,kBAAA;AACA,kBAAA;AACN,kBAAA;AAEE,kBAAA;AAAC,oBAAA;AAAA,oBAAA;AACC,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACD,sBAAA;AAAA,oBAAA;AAED,kBAAA;AAEG,kBAAA;AAAA,gBAAA;AAGP,cAAA;AAAC,gBAAA;AAAA,gBAAA;AACO,kBAAA;AACC,kBAAA;AACP,kBAAA;AAGK,kBAAA;AAAA,gBAAA;AAGX,cAAA;AAAA,YAAA;AAEJ,UAAA;AAEA,QAAA;AAEG,UAAA;AAAA,UAAA;AACC,YAAA;AACA,YAAA;AACW,YAAA;AAEX,YAAA;AAEI,8BAAA;AAGK,gBAAA;AACE,kBAAA;AAAA,kBAAA;AACC,oBAAA;AACE,sBAAA;AACA,sBAAA;AACA,sBAAA;AAEC,oBAAA;AAEI,oBAAA;AACP,oBAAA;AAAa,kBAAA;AACf,gBAAA;AAID,gBAAA;AACE,kBAAA;AAAA,kBAAA;AACC,oBAAA;AACE,sBAAA;AACA,sBAAA;AACA,sBAAA;AAEC,oBAAA;AAEI,oBAAA;AACP,oBAAA;AAAa,kBAAA;AACf,gBAAA;AAID,gBAAA;AACE,kBAAA;AAAA,kBAAA;AACC,oBAAA;AACE,sBAAA;AACA,sBAAA;AACA,sBAAA;AAEC,oBAAA;AAEI,oBAAA;AACP,oBAAA;AAEA,oBAAA;AAAC,sBAAA;AAAA,sBAAA;AACC,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AAAK,sBAAA;AACP,oBAAA;AAAA,kBAAA;AACF,gBAAA;AAGD,gBAAA;AACE,kBAAA;AAAA,kBAAA;AACC,oBAAA;AACE,sBAAA;AACA,sBAAA;AACA,sBAAA;AAEC,oBAAA;AAEI,oBAAA;AACP,oBAAA;AACD,oBAAA;AAAA,kBAAA;AAED,gBAAA;AAGD,gBAAA;AACO,kBAAA;AACA,kBAAA;AACA,kBAAA;AACA,kBAAA;AACE,kBAAA;AAIN,kBAAA;AAAC,oBAAA;AAAA,oBAAA;AAEC,sBAAA;AACE,wBAAA;AACA,wBAAA;AACA,wBAAA;AACA,wBAAA;AAEC,sBAAA;AAEH,sBAAA;AACE,wBAAA;AAMA,wBAAA;AAMG,wBAAA;AACL,sBAAA;AACA,sBAAA;AACA,sBAAA;AAEA,sBAAA;AACE,wCAAA;AACC,wBAAA;AAEI,0BAAA;AACA,0BAAA;AACC,0BAAA;AACJ,wBAAA;AAEJ,sBAAA;AAAA,oBAAA;AApCK,oBAAA;AAqCP,kBAAA;AAEH,gBAAA;AAEA,gBAAA;AACE,kBAAA;AAAA,kBAAA;AACC,oBAAA;AACA,oBAAA;AAAa,kBAAA;AACf,gBAAA;AAGN,cAAA;AAEA,8BAAA;AAQc,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AACA,gBAAA;AAEN,gBAAA;AAAA;AAAA;AAAA;AAAA;AAKE,kCAAA;AAGE,oCAAA;AAAC,sBAAA;AAAA,sBAAA;AACC,wBAAA;AACA,wBAAA;AACA,wBAAA;AACE,0BAAA;AACA,0BAAA;AAEC,wBAAA;AAGF,wBAAA;AAEI,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACY,gCAAA;AACT,gCAAA;AACY,8BAAA;AAGH,8BAAA;AACQ,8BAAA;AAEe,8BAAA;AAElC,gCAAA;AAAC,gCAAA;AAAA,kCAAA;AACM,kCAAA;AACM,oCAAA;AACT,oCAAA;AACc,kCAAA;AAGL,kCAAA;AACL,kCAAA;AAEkB,gCAAA;AAAA,8BAAA;AAC1B,4BAAA;AACF,0BAAA;AAGD,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACY,gCAAA;AACT,gCAAA;AACA,gCAAA;AACc,8BAAA;AAGL,8BAAA;AACU,8BAAA;AAEa,8BAAA;AAGhC,gCAAA;AAAC,gCAAA;AAAA,kCAAA;AACM,kCAAA;AACM,oCAAA;AACT,oCAAA;AACiB,kCAAA;AAGR,kCAAA;AAC8B,kCAAA;AAC1B,kCAAA;AAC8B,kCAAA;AAErB,gCAAA;AAAA,8BAAA;AAC1B,4BAAA;AAEJ,0BAAA;AAGD,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACY,gCAAA;AACT,gCAAA;AACA,gCAAA;AACW,8BAAA;AAGF,8BAAA;AACO,8BAAA;AACgB,8BAAA;AAElC,gCAAA;AAAC,gCAAA;AAAA,kCAAA;AACU,kCAAA;AAC4B,kCAAA;AAChC,gCAAA;AAAA,8BAAA;AACP,4BAAA;AACF,0BAAA;AAGD,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACY,gCAAA;AACT,gCAAA;AACA,gCAAA;AACc,8BAAA;AAGL,8BAAA;AACU,8BAAA;AAEP,4BAAA;AAChB,0BAAA;AAGD,0BAAA;AACC,4BAAA;AACA,4BAAA;AAGA,4BAAA;AAIA,4BAAA;AAEA,4BAAA;AACA,4BAAA;AAGA,4BAAA;AAAgB,8BAAA;AACd,8BAAA;AACa,8BAAA;AACD,8BAAA;AACc,8BAAA;AACD,8BAAA;AACE,8BAAA;AAC3B,4BAAA;AAKF,4BAAA;AACE,8BAAA;AAAC,8BAAA;AAAA,gCAAA;AAKO,gCAAA;AAEK,gCAAA;AACJ,gCAAA;AACuC,gCAAA;AAIxC,gCAAA;AAGqB,gCAAA;AAImB,8BAAA;AAAA,8BAAA;AAnBrC,4BAAA;AAsBd,0BAAA;AAEA,0BAAA;AACC,4BAAA;AAAC,4BAAA;AAAA,8BAAA;AACW,8BAAA;AAIwB,8BAAA;AAEA,4BAAA;AACpC,0BAAA;AAEJ,wBAAA;AAAA,sBAAA;AAEJ,oBAAA;AAEC,oBAAA;AACE,sBAAA;AAAA,sBAAA;AACC,wBAAA;AACA,wBAAA;AACA,wBAAA;AAAmD,sBAAA;AACrD,oBAAA;AAtLiB,kBAAA;AAwLrB,gBAAA;AAIJ,cAAA;AACG,gBAAA;AAAA,gBAAA;AACU,kBAAA;AACT,kBAAA;AAEC,kBAAA;AACE,oBAAA;AAAA,oBAAA;AACC,sBAAA;AACA,sBAAA;AACA,sBAAA;AACA,sBAAA;AACG,wBAAA;AAAA,wBAAA;AACC,0BAAA;AACA,0BAAA;AACA,0BAAA;AACA,0BAAA;AACD,0BAAA;AAAA,wBAAA;AAED,sBAAA;AAEF,sBAAA;AAAK,oBAAA;AAGP,kBAAA;AAAC,oBAAA;AAAA,oBAAA;AACC,sBAAA;AACA,sBAAA;AACA,sBAAA;AAKA,sBAAA;AAAK,oBAAA;AACP,kBAAA;AAAA,gBAAA;AAMZ,cAAA;AAEJ,YAAA;AAAA,UAAA;AAEJ,QAAA;AAKA,QAAA;AACG,UAAA;AAAA,UAAA;AACO,YAAA;AACN,YAAA;AACU,YAAA;AACE,YAAA;AACF,YAAA;AACV,YAAA;AACA,YAAA;AAAiB,UAAA;AAErB,QAAA;AAKA,QAAA;AAEE,0BAAA;AAAC,YAAA;AAAA,YAAA;AACW,cAAA;AACD,cAAA;AAER,cAAA;AAAA,YAAA;AACH,UAAA;AACS,UAAA;AACX,QAAA;AAAA,MAAA;AAAA,IAAA;AACJ,EAAA;AAEJ;AAG+B;ADppBJ;AACA;AACA;AACA","file":"/home/runner/work/eidos-ui/eidos-ui/dist/chunk-CBLWP43O.cjs","sourcesContent":[null,"import React, { useState, useEffect, useRef, useCallback, useMemo, useLayoutEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n GripVertical,\n ArrowUp,\n ArrowDown,\n ChevronsUpDown,\n ChevronRight,\n X,\n Plus,\n AlignJustify,\n Check,\n FolderOpen,\n SearchX,\n MoreVertical,\n} from 'lucide-react';\nimport {\n DndContext,\n PointerSensor,\n KeyboardSensor,\n useSensor,\n useSensors,\n closestCenter,\n} from '@dnd-kit/core';\nimport type { DragEndEvent } from '@dnd-kit/core';\nimport {\n SortableContext,\n verticalListSortingStrategy,\n useSortable,\n arrayMove,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Button } from '../Button';\nimport { SplitButton } from '../SplitButton';\nimport { Input } from '../Input/Input.component';\nimport { Select } from '../Select/Select.component';\nimport { Checkbox } from '../Checkbox/Checkbox.component';\nimport { Spinner } from '../Spinner/Spinner.component';\nimport { Pagination } from '../Pagination';\nimport { EmptyState } from '../EmptyState';\nimport { Dropdown } from '../Dropdown';\nimport { Menu } from '../Menu';\nimport type { MenuItemType } from '../Menu';\nimport { TableFiltersDropdown } from '../Table/TableFiltersDropdown.component';\nimport type { TableColumn, TableFilters } from '../Table/Table.types';\nimport type {\n DataGridProps,\n DataGridColumn,\n DataGridFilterField,\n EditingCell,\n} from './DataGrid.types';\nimport { renderIcon } from '../../utils';\nimport './DataGrid.scss';\n\n// Minimum usable width (px) for a single table column - used to derive an\n// automatic card-view threshold from the number of displayed columns, so a\n// grid with many columns doesn't have to overflow horizontally before\n// `cardViewBreakpoint` (a single, hand-tuned number) is reached. See\n// `isCardView` below.\nconst MIN_COLUMN_WIDTH_PX = 100;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// SortableTableRow - wraps a <tr> with dnd-kit sortable behaviour.\n//\n// Render-prop pattern: passes `dragHandleProps` down to whichever child element\n// should be the drag handle (typically the grip icon's <span>), so the <tr>\n// itself owns the DOM ref + layout-transform while the handle owns the listeners.\n// Pass `disabled={true}` when draggableRows is off - useSortable is always\n// called unconditionally to satisfy the Rules of Hooks.\n// ─────────────────────────────────────────────────────────────────────────────\nfunction SortableTableRow({\n id,\n disabled,\n className,\n children,\n}: {\n id: string;\n disabled?: boolean;\n className?: string;\n children: (dragHandleProps: object, isDragging: boolean) => React.ReactNode;\n}): React.ReactElement {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n id,\n disabled,\n });\n\n return (\n <tr\n ref={setNodeRef}\n className={[className, isDragging ? 'eidos-datagrid-row--dragging' : '']\n .filter(Boolean)\n .join(' ')}\n style={{\n transform: CSS.Transform.toString(transform),\n transition: transition ?? undefined,\n opacity: isDragging ? 0.4 : 1,\n }}\n {...attributes}\n >\n {children(listeners ?? {}, isDragging)}\n </tr>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useExpandAnimation - drives a row's expanded-content open/close transition.\n// Mirrors the max-height technique AccordionItem uses, so row expansion\n// animates consistently with Accordion elsewhere in the library - but also\n// keeps tracking the content's height for as long as the panel stays open\n// (via ResizeObserver on the unclipped inner node), not just once at the\n// moment it opens. Content whose height changes after opening - e.g. an\n// async fetch resolving into more/less content than a loading placeholder -\n// would otherwise stay clipped at whatever height was measured on open.\n//\n// Content stays mounted through the close animation (so it can transition\n// shut instead of vanishing instantly), but is never mounted before the row\n// is actually opened for the first time - so `renderExpandedContent` (which\n// may kick off a data fetch) never runs for a row nobody has expanded.\n//\n// Must be called from its own per-row component (not inline in a .map()\n// callback) so the number of hook calls stays constant across renders\n// regardless of how many rows are currently displayed.\n// ─────────────────────────────────────────────────────────────────────────────\nfunction useExpandAnimation(isOpen: boolean): {\n mounted: boolean;\n maxHeight: number;\n outerRef: React.RefObject<HTMLDivElement | null>;\n innerRef: React.RefObject<HTMLDivElement | null>;\n handleTransitionEnd: () => void;\n} {\n // outerRef: the clipped, max-height/overflow-hidden wrapper actually\n // animated - its own rendered height is pinned by `maxHeight` below, so it\n // can't be the thing observed for size changes (see innerRef).\n const outerRef = useRef<HTMLDivElement>(null);\n // innerRef: the unconstrained content itself - always laid out at its\n // natural height regardless of the outer wrapper's clipping, so its size\n // genuinely changes when its content does. That's what ResizeObserver\n // needs to be watching.\n const innerRef = useRef<HTMLDivElement>(null);\n const [maxHeight, setMaxHeight] = useState(0);\n const [mounted, setMounted] = useState(isOpen);\n\n useEffect(() => {\n if (isOpen) setMounted(true);\n }, [isOpen]);\n\n useEffect(() => {\n if (!mounted) return;\n\n if (!isOpen) {\n setMaxHeight(0);\n return;\n }\n\n const node = innerRef.current;\n if (!node) return;\n\n const update = () => setMaxHeight(node.scrollHeight);\n update();\n\n const observer = new ResizeObserver(update);\n observer.observe(node);\n return () => observer.disconnect();\n }, [isOpen, mounted]);\n\n const handleTransitionEnd = useCallback(() => {\n if (!isOpen) setMounted(false);\n }, [isOpen]);\n\n return { mounted, maxHeight, outerRef, innerRef, handleTransitionEnd };\n}\n\n// Table mode: one extra full-width <tr> rendered directly after an expanded\n// row - see `expandable`/`renderExpandedContent` on DataGridProps.\nfunction ExpandedTableRow({\n isOpen,\n colSpan,\n render,\n}: {\n isOpen: boolean;\n colSpan: number;\n render: () => React.ReactNode;\n}): React.ReactElement | null {\n const { mounted, maxHeight, outerRef, innerRef, handleTransitionEnd } =\n useExpandAnimation(isOpen);\n if (!mounted) return null;\n\n return (\n <tr className=\"eidos-datagrid-expanded-row\">\n <td colSpan={colSpan} className=\"eidos-datagrid-expanded-cell\">\n <div\n ref={outerRef}\n className=\"eidos-datagrid-expand-panel\"\n style={{ maxHeight: `${maxHeight}px` }}\n onTransitionEnd={handleTransitionEnd}\n >\n <div ref={innerRef} className=\"eidos-datagrid-expand-panel-inner\">\n {render()}\n </div>\n </div>\n </td>\n </tr>\n );\n}\n\n// Card mode: the same animated panel, appended inside the card itself below\n// its fields.\nfunction ExpandedCardPanel({\n isOpen,\n render,\n}: {\n isOpen: boolean;\n render: () => React.ReactNode;\n}): React.ReactElement | null {\n const { mounted, maxHeight, outerRef, innerRef, handleTransitionEnd } =\n useExpandAnimation(isOpen);\n if (!mounted) return null;\n\n return (\n <div\n ref={outerRef}\n className=\"eidos-datagrid-expand-panel\"\n style={{ maxHeight: `${maxHeight}px` }}\n onTransitionEnd={handleTransitionEnd}\n >\n <div ref={innerRef} className=\"eidos-datagrid-expand-panel-inner\">\n {render()}\n </div>\n </div>\n );\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Inner implementation (generic function so we can assign .displayName cleanly)\n// ─────────────────────────────────────────────────────────────────────────────\nfunction DataGridInner<T extends Record<string, unknown>>({\n // ── Existing props ─────────────────────────────────────────────────────────\n columns,\n data,\n rowKey = 'id',\n onChange,\n onRowAdd,\n editable = false,\n loading = false,\n emptyText = 'No data available',\n className,\n stickyHeader = false,\n maxHeight,\n showRowNumbers = false,\n draggableRows = false,\n onRowReorder,\n // ── Sorting ────────────────────────────────────────────────────────────────\n currentSort,\n onSortChange,\n // ── Filtering ──────────────────────────────────────────────────────────────\n showFilters = false,\n filterConfig = [],\n filters,\n onFiltersChange,\n // ── Pagination ─────────────────────────────────────────────────────────────\n showPagination = false,\n pageSize = 10,\n pageSizeOptions,\n totalRows: totalRowsProp,\n onPageChange,\n // ── Row selection + bulk actions ───────────────────────────────────────────\n selectable = false,\n selectedRows: controlledSelectedRows,\n defaultSelectedRows,\n onSelectionChange,\n bulkActions,\n // ── Row expansion ────────────────────────────────────────────────────────────\n expandable = false,\n renderExpandedContent,\n isRowExpandable,\n expandMultiple = true,\n expandedRows: controlledExpandedRows,\n defaultExpandedRows,\n onExpandedRowsChange,\n // ── Display ────────────────────────────────────────────────────────────────\n density = 'comfortable',\n showDensity = false,\n // ── Card view ────────────────────────────────────────────────────────────────\n hasCardView = true,\n cardViewBreakpoint = 640,\n cardMinWidth = 280,\n}: DataGridProps<T>): React.ReactElement {\n // ── State + paired refs (editing - preserved exactly) ─────────────────────\n // We keep a ref alongside each piece of mutable state so that event\n // handlers registered in effects can always read the *latest* value without\n // stale-closure bugs, while the state variables drive re-renders normally.\n\n const [localData, _setLocalData] = useState<T[]>(data);\n const localDataRef = useRef<T[]>(data);\n\n const [editingCell, _setEditingCell] = useState<EditingCell>(null);\n const editingCellRef = useRef<EditingCell>(null);\n\n const [editValue, _setEditValue] = useState<unknown>(null);\n const editValueRef = useRef<unknown>(null);\n\n const [editError, setEditError] = useState<string | null>(null);\n\n // ── Validation error tooltip (portaled) ─────────────────────────────────────\n // Positioned via a portal into document.body rather than `position: absolute`\n // inside the cell - a cell on the last visible row would otherwise place the\n // tooltip past the scroll container's bottom edge, which still counts toward\n // that container's scrollable content size and forces an unwanted scrollbar\n // just to reveal a tooltip nobody asked to scroll to. Portaling escapes the\n // scroll container's box entirely, the same way Dropdown's own content does.\n // HTMLElement (not HTMLTableCellElement) so the same ref can anchor either\n // a <td> in table mode or a card field <div> in card view - only\n // `getBoundingClientRect()` is ever called on it.\n const errorTooltipAnchorRef = useRef<HTMLElement | null>(null);\n const [errorTooltipPosition, setErrorTooltipPosition] = useState<{\n top: number;\n left: number;\n } | null>(null);\n const activeCellError = editingCell && editError ? editError : null;\n\n useLayoutEffect(() => {\n if (!activeCellError) {\n setErrorTooltipPosition(null);\n return;\n }\n\n const updatePosition = () => {\n const node = errorTooltipAnchorRef.current;\n if (!node) return;\n const rect = node.getBoundingClientRect();\n setErrorTooltipPosition({ top: rect.bottom + 4, left: rect.left });\n };\n\n updatePosition();\n\n // Capture phase catches scroll events from any scrollable ancestor\n // (e.g. this grid's own scroll container), not just window/document -\n // `scroll` doesn't bubble, so a plain (bubble-phase) listener on window\n // would miss it entirely.\n window.addEventListener('resize', updatePosition);\n window.addEventListener('scroll', updatePosition, true);\n return () => {\n window.removeEventListener('resize', updatePosition);\n window.removeEventListener('scroll', updatePosition, true);\n };\n }, [activeCellError]);\n\n // ── New state ──────────────────────────────────────────────────────────────\n // Density (internal when showDensity=true, otherwise respects the prop)\n const [internalDensity, setInternalDensity] = useState<'compact' | 'comfortable' | 'spacious'>(\n density,\n );\n const effectiveDensity = showDensity ? internalDensity : density;\n\n // Sorting (client-side internal state)\n const [internalSort, setInternalSort] = useState<{\n key: string;\n direction: 'asc' | 'desc';\n } | null>(null);\n\n // Filtering (client-side internal state)\n const [internalFilters, setInternalFilters] = useState<TableFilters>({});\n\n // Pagination\n const [currentPage, setCurrentPage] = useState(1);\n const [currentPageSize, setCurrentPageSize] = useState(pageSize);\n\n // Selection\n const isControlledSelection = controlledSelectedRows !== undefined;\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<Set<string>>(\n () => new Set(defaultSelectedRows ?? []),\n );\n\n // Row expansion\n const isControlledExpansion = controlledExpandedRows !== undefined;\n const [internalExpandedKeys, setInternalExpandedKeys] = useState<Set<string>>(\n () => new Set(defaultExpandedRows ?? []),\n );\n\n // Card view: measured off the grid's own container width (not the\n // viewport) via ResizeObserver, so it responds correctly even when the\n // grid sits in a narrow sidebar/split-pane on an otherwise wide screen.\n // Starts `null` (unmeasured) rather than 0, so the table is what renders\n // for one frame on mount instead of briefly flashing cards.\n const [containerWidth, setContainerWidth] = useState<number | null>(null);\n const resizeObserverRef = useRef<ResizeObserver | null>(null);\n // A callback ref (not `useRef` + a `useLayoutEffect` keyed on `hasCardView`)\n // so this fires whenever the container DOM node actually becomes\n // available, not just when `hasCardView` changes. A plain effect only\n // reruns on its own dependency changing - it does NOT rerun just because\n // a *different* conditional branch attaches the ref for the first time.\n // The `loading` early-return below renders its own container div; any\n // consumer whose `loading` prop starts `true` on mount (e.g. fetching\n // data asynchronously, so it can never resolve before the first render)\n // would mount that div first, find `containerRef.current` still null, and\n // then never re-run the effect once `loading` flips to `false` and the\n // real container mounts - `hasCardView` itself never changed, so nothing\n // triggered a re-run, leaving `containerWidth` (and therefore card view)\n // permanently stuck. A callback ref sidesteps that entirely: whichever\n // container div actually mounts, this runs for it.\n const setContainerRef = useCallback(\n (el: HTMLDivElement | null) => {\n resizeObserverRef.current?.disconnect();\n resizeObserverRef.current = null;\n\n if (!el || !hasCardView) return;\n\n const observer = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width;\n if (width != null) setContainerWidth(width);\n });\n observer.observe(el);\n resizeObserverRef.current = observer;\n },\n [hasCardView],\n );\n // Displayed column count, computed directly from props (available here\n // without waiting on the `dataColumns`/`actionsColumn` memos below) -\n // `columns.length` already includes the actions column if any, matching\n // how `totalCols` is derived further down from `dataColumns.length +\n // (actionsColumn ? 1 : 0)`.\n const columnCountForCardView =\n columns.length +\n (showRowNumbers ? 1 : 0) +\n (draggableRows ? 1 : 0) +\n (selectable ? 1 : 0) +\n (expandable ? 1 : 0);\n\n // Card view kicks in below the explicit `cardViewBreakpoint` OR once the\n // container is too narrow to fit every column at a reasonable minimum\n // width - the latter means a wide/many-column grid auto-switches without\n // the consumer having to hand-calculate a breakpoint for it.\n const isCardView =\n hasCardView &&\n containerWidth !== null &&\n (containerWidth < cardViewBreakpoint ||\n containerWidth < columnCountForCardView * MIN_COLUMN_WIDTH_PX);\n\n // Card view header/subheader: only the first matching column is honored\n // (see DataGridColumn.cardHeader/cardSubheader).\n const cardHeaderColumn = useMemo(() => columns.find((c) => c.cardHeader), [columns]);\n const cardSubheaderColumn = useMemo(() => columns.find((c) => c.cardSubheader), [columns]);\n // The row-actions column, if any - only the first `type: 'actions'` column\n // is honored (see DataGridColumn.actions). Rendered in its own dedicated\n // slot (far right in table mode, top-right of the card in card view),\n // never as a normal data column.\n const actionsColumn = useMemo(() => columns.find((c) => c.type === 'actions'), [columns]);\n // Every column that actually renders as data - excludes the actions\n // column entirely (it's never a normal cell) from both table columns and\n // pinning/filtering/validation logic.\n const dataColumns = useMemo(\n () => columns.filter((c) => c !== actionsColumn),\n [columns, actionsColumn],\n );\n // Remaining columns render as label:value field rows, in declaration order.\n const cardFieldColumns = useMemo(\n () => dataColumns.filter((c) => c !== cardHeaderColumn && c !== cardSubheaderColumn),\n [dataColumns, cardHeaderColumn, cardSubheaderColumn],\n );\n\n // Pinned columns offset map (computed in useLayoutEffect)\n const theadRef = useRef<HTMLTableSectionElement>(null);\n const [pinnedOffsets, setPinnedOffsets] = useState<\n Map<string, { side: 'left' | 'right'; offset: number }>\n >(new Map());\n\n // ── Synced setters (preserved exactly) ────────────────────────────────────\n const setLocalData = useCallback((v: T[]) => {\n localDataRef.current = v;\n _setLocalData(v);\n }, []);\n\n const setEditingCell = useCallback((v: EditingCell) => {\n editingCellRef.current = v;\n _setEditingCell(v);\n }, []);\n\n const setEditValue = useCallback((v: unknown) => {\n editValueRef.current = v;\n _setEditValue(v);\n }, []);\n\n // ── Sync when the data prop changes externally (preserved) ─────────────────\n useEffect(() => {\n setLocalData(data);\n }, [data, setLocalData]);\n\n // ── Active sort / filters (derived) ───────────────────────────────────────\n // Server-side sort: caller controls currentSort + onSortChange.\n // Client-side sort: we manage internalSort.\n const activeSort = currentSort ?? internalSort;\n\n // Server-side filter: caller controls filters + onFiltersChange.\n // Client-side filter: we manage internalFilters.\n const activeFilters: TableFilters = useMemo(\n () => (onFiltersChange ? (filters ?? {}) : internalFilters),\n [onFiltersChange, filters, internalFilters],\n );\n\n // ── Selection derived state ────────────────────────────────────────────────\n const selectedSet = useMemo(\n () =>\n new Set(isControlledSelection ? (controlledSelectedRows ?? []) : [...internalSelectedKeys]),\n [isControlledSelection, controlledSelectedRows, internalSelectedKeys],\n );\n\n const allKeys = useMemo(\n () => localData.map((row, idx) => String(row[rowKey as keyof T] ?? idx)),\n [localData, rowKey],\n );\n\n const allSelected = allKeys.length > 0 && allKeys.every((k) => selectedSet.has(k));\n const someSelected = !allSelected && allKeys.some((k) => selectedSet.has(k));\n const hasSelection = selectedSet.size > 0;\n\n const selectedItems = useMemo(\n () => localData.filter((row, idx) => selectedSet.has(String(row[rowKey as keyof T] ?? idx))),\n [localData, selectedSet, rowKey],\n );\n\n // ── Row expansion derived state ─────────────────────────────────────────────\n const expandedSet = useMemo(\n () =>\n new Set(isControlledExpansion ? (controlledExpandedRows ?? []) : [...internalExpandedKeys]),\n [isControlledExpansion, controlledExpandedRows, internalExpandedKeys],\n );\n\n // ── Filter dropdown adapter: DataGridFilterField → TableColumn ─────────────\n // TableFiltersDropdown expects TableColumn<T>[]; we project our (decoupled,\n // column-independent) filter schema onto that shape.\n const filterDropdownColumns = useMemo((): TableColumn<T>[] => {\n return filterConfig.map(\n (field: DataGridFilterField) =>\n ({\n key: field.key,\n label: field.label,\n filterable: true,\n filterType: field.filterType,\n filterOptions: field.filterOptions,\n dateFilterMode: field.dateFilterMode,\n }) as TableColumn<T>,\n );\n }, [filterConfig]);\n\n // ── Client-side filtering ──────────────────────────────────────────────────\n const filteredData = useMemo(() => {\n // Server-side mode: parent is responsible for filtering; use data as-is.\n if (onFiltersChange) return localData;\n\n const filterEntries = Object.entries(activeFilters).filter(([, val]) => {\n if (val === undefined || val === null || val === '') return false;\n if (Array.isArray(val) && val.length === 0) return false;\n return true;\n });\n\n if (filterEntries.length === 0) return localData;\n\n return localData.filter((row) =>\n filterEntries.every(([key, filterValue]) => {\n const cellValue = row[key];\n\n if (Array.isArray(filterValue)) {\n return filterValue.includes(String(cellValue ?? ''));\n }\n if (typeof filterValue === 'boolean') {\n return Boolean(cellValue) === filterValue;\n }\n if (typeof filterValue === 'object' && filterValue !== null && 'start' in filterValue) {\n const { start, end } = filterValue as { start: string | null; end: string | null };\n const dateStr = String(cellValue ?? '');\n if (start && dateStr < start) return false;\n if (end && dateStr > end) return false;\n return true;\n }\n // Default: case-insensitive text contains\n return String(cellValue ?? '')\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n }),\n );\n }, [localData, activeFilters, onFiltersChange]);\n\n // ── Client-side sorting ────────────────────────────────────────────────────\n const sortedData = useMemo(() => {\n // Server-side mode or no active sort: use data as-is.\n if (onSortChange || !activeSort) return filteredData;\n\n return [...filteredData].sort((a, b) => {\n const aVal = a[activeSort.key];\n const bVal = b[activeSort.key];\n\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n\n const compare =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n\n return activeSort.direction === 'asc' ? compare : -compare;\n });\n }, [filteredData, activeSort, onSortChange]);\n\n // ── Client-side pagination ─────────────────────────────────────────────────\n const displayData = useMemo(() => {\n if (!showPagination) return sortedData;\n if (onPageChange) return sortedData; // Server-side: parent slices the data\n const start = (currentPage - 1) * currentPageSize;\n return sortedData.slice(start, start + currentPageSize);\n }, [sortedData, showPagination, currentPage, currentPageSize, onPageChange]);\n\n const totalItemCount = totalRowsProp ?? sortedData.length;\n const totalPages = Math.max(1, Math.ceil(totalItemCount / currentPageSize));\n\n // Reset to page 1 when filters change (client-side and server-side).\n // Depend on the serialized *value* of activeFilters, not the object\n // reference: in server-side mode activeFilters is derived straight from\n // the caller's `filters` prop, and callers commonly build that object\n // inline in render (a new reference every render) whether or not its\n // contents actually changed. Comparing by reference made this effect -\n // and the page reset it causes - fire on every unrelated parent\n // re-render (e.g. new page data arriving), not just on real filter\n // changes.\n const activeFiltersKey = useMemo(() => JSON.stringify(activeFilters), [activeFilters]);\n useEffect(() => {\n setCurrentPage(1);\n }, [activeFiltersKey]);\n\n // Reset to page 1 when client-side sort changes\n useEffect(() => {\n setCurrentPage(1);\n }, [internalSort]);\n\n // ── Pinned columns: measure th widths and compute sticky offsets ───────────\n // Mirrors the exact pattern used in Table.component.tsx.\n // System columns (sel, drag, rownum, actions) contribute to the offset\n // accumulator but are not themselves sticky-positioned.\n useLayoutEffect(() => {\n const hasPinned = columns.some((c) => c.pin);\n if (!hasPinned || !theadRef.current) {\n setPinnedOffsets((prev) => (prev.size > 0 ? new Map() : prev));\n return;\n }\n\n const headerRow = theadRef.current.querySelector('tr');\n if (!headerRow) return;\n\n const cells = Array.from(headerRow.querySelectorAll<HTMLTableCellElement>('th[data-col-key]'));\n const newOffsets = new Map<string, { side: 'left' | 'right'; offset: number }>();\n\n // Left-pinned: scan left-to-right\n // When any data column is pin:'left', auto-pin the system columns too so\n // the entire frozen-left group moves as a coherent unit.\n const hasLeftPin = columns.some((c) => c.pin === 'left');\n let leftAccum = 0;\n for (const cell of cells) {\n const key = cell.dataset.colKey!;\n if (key === '__expand__' || key === '__sel__' || key === '__drag__' || key === '__rownum__') {\n if (hasLeftPin) {\n newOffsets.set(key, { side: 'left', offset: leftAccum });\n }\n leftAccum += cell.offsetWidth;\n } else {\n const col = columns.find((c) => c.key === key);\n if (col?.pin === 'left') {\n newOffsets.set(key, { side: 'left', offset: leftAccum });\n leftAccum += cell.offsetWidth;\n }\n }\n }\n\n // Right-pinned: scan right-to-left\n let rightAccum = 0;\n for (let i = cells.length - 1; i >= 0; i--) {\n const cell = cells[i];\n const key = cell.dataset.colKey!;\n if (key === '__actions__') {\n rightAccum += cell.offsetWidth;\n } else {\n const col = columns.find((c) => c.key === key);\n if (col?.pin === 'right') {\n newOffsets.set(key, { side: 'right', offset: rightAccum });\n rightAccum += cell.offsetWidth;\n }\n }\n }\n\n setPinnedOffsets(newOffsets);\n }, [columns, selectable, draggableRows, showRowNumbers, expandable]);\n\n // ── Sticky-column helpers ──────────────────────────────────────────────────\n const getCellPinnedProps = useCallback(\n (colKey: string): { style: React.CSSProperties; className: string } => {\n const info = pinnedOffsets.get(colKey);\n if (!info) return { style: {}, className: '' };\n return {\n style: { position: 'sticky', [info.side]: info.offset, zIndex: 1 },\n className:\n info.side === 'left'\n ? 'eidos-datagrid-cell--pinned-left'\n : 'eidos-datagrid-cell--pinned-right',\n };\n },\n [pinnedOffsets],\n );\n\n const getHeaderPinnedProps = useCallback(\n (colKey: string): { style: React.CSSProperties; className: string } => {\n const info = pinnedOffsets.get(colKey);\n if (!info) return { style: {}, className: '' };\n return {\n // z-index 3: above both body sticky cells (1) and non-sticky header (1 from SCSS)\n style: { position: 'sticky', [info.side]: info.offset, zIndex: 3 },\n className:\n info.side === 'left'\n ? 'eidos-datagrid-header-cell--pinned-left'\n : 'eidos-datagrid-header-cell--pinned-right',\n };\n },\n [pinnedOffsets],\n );\n\n // ── Editing helpers (preserved exactly) ────────────────────────────────────\n const isCellEditable = useCallback(\n (col: DataGridColumn<T>): boolean => {\n if (!editable) return false;\n if (col.type === 'readonly' || col.type === 'actions') return false;\n if (col.editable === false) return false;\n return true;\n },\n [editable],\n );\n\n const validateCell = useCallback((col: DataGridColumn<T>, value: unknown): string | null => {\n if (col.required && (value === '' || value === null || value === undefined)) {\n return 'This field is required';\n }\n if (col.validate) {\n const result = col.validate(value);\n if (result !== true) return result as string;\n }\n return null;\n }, []);\n\n const cellErrorKey = (rowIndex: number, colKey: string) => `${rowIndex}:${colKey}`;\n\n // Cells with a validation error, keyed by `${rowIndex}:${colKey}` - derived\n // directly from the actual data rather than tracked as its own state, so a\n // cell that starts out invalid (e.g. seeded with an empty required field)\n // is flagged immediately on render instead of only after the user has\n // focused and committed it at least once. Recomputes whenever the data\n // actually changes, which already covers every case that needs it: typing\n // a fix and committing, an external `data` prop update, a row being added,\n // etc. Painted as a background tint on every render (see\n // `eidos-data-grid-cell--has-error` below); the more prominent border +\n // text (`eidos-data-grid-cell--error`) only shows while that specific cell\n // is the one being edited, via `editError` (see `startEdit`).\n const cellErrors = useMemo(() => {\n const errors: Record<string, string> = {};\n localData.forEach((row, rowIndex) => {\n for (const col of columns) {\n if (!isCellEditable(col)) continue;\n const error = validateCell(col, row[col.key]);\n if (error) errors[cellErrorKey(rowIndex, col.key)] = error;\n }\n });\n return errors;\n }, [localData, columns, isCellEditable, validateCell]);\n\n // ── Commit / discard ────────────────────────────────────────────────────────\n /**\n * Validates a cell's value and always persists it (even if invalid - see\n * `commitEdit` below for why). `cellErrors` above picks the result up\n * automatically once `localData` updates. Returns the validation error, if any.\n */\n const commitValue = useCallback(\n (rowIndex: number, colKey: string, value: unknown): string | null => {\n const col = columns.find((c) => c.key === colKey);\n if (!col) return null;\n\n const error = validateCell(col, value);\n\n const newData = localDataRef.current.map<T>((row, idx) =>\n idx === rowIndex ? ({ ...row, [colKey]: value } as T) : row,\n );\n setLocalData(newData);\n onChange?.(newData);\n\n return error;\n },\n [columns, onChange, setLocalData, validateCell],\n );\n\n /**\n * Commits the currently-editing cell and exits edit mode. Never blocks: an\n * invalid value is still saved and flagged via `cellErrors` (see above)\n * rather than trapping the user in the cell - a required field going empty\n * is exactly the case validation is there to catch and surface, not a\n * reason to freeze every other interaction with the grid until it's fixed.\n */\n const commitEdit = useCallback(() => {\n const cell = editingCellRef.current;\n if (!cell) return;\n\n const col = columns.find((c) => c.key === cell.colKey);\n if (!col) {\n setEditingCell(null);\n return;\n }\n\n commitValue(cell.rowIndex, cell.colKey, editValueRef.current);\n setEditingCell(null);\n setEditError(null);\n }, [columns, commitValue, setEditingCell]);\n\n const discardEdit = useCallback(() => {\n setEditingCell(null);\n setEditError(null);\n }, [setEditingCell]);\n\n // Keep a ref to the latest commit so the global handler never captures\n // a stale version, without having the effect re-run on every re-render.\n const commitEditRef = useRef(commitEdit);\n useEffect(() => {\n commitEditRef.current = commitEdit;\n }, [commitEdit]);\n\n // ── Global mousedown: commit on blur - i.e. any click that isn't on the\n // active editor itself ──────────────────────────────────────────────────\n // Using mousedown (fires before blur/click) lets us finalize the active\n // cell before a click elsewhere starts a new edit or does anything else.\n //\n // Deliberately NOT scoped to \"outside the grid container\" - a click on\n // another cell already commits via that cell's own `handleCellClick`\n // (which commits any in-flight edit before starting its own), but a grid\n // has plenty of space that isn't a cell at all: toolbar buttons, sort\n // headers, pagination, row actions, and - especially in card view - the\n // card's own padding, gaps, and labels. None of those have a handler that\n // commits the edit, so scoping this to \"outside the grid\" left the editor\n // stuck open for any click that landed inside the grid but outside an\n // actual cell. The only clicks that should NOT commit are ones still\n // interacting with the editor being edited (identified by its own\n // `--editing` class, shared by both the <td> and card versions) or its\n // portaled dropdown content (eidos-dropdown-content) - e.g. opening a\n // Select's own options list.\n useEffect(() => {\n if (!editingCell) return;\n\n const handleMouseDown = (e: MouseEvent) => {\n const target = e.target as Element;\n\n if (\n target.closest?.(\n '.eidos-data-grid-cell--editing, .eidos-datagrid-card-value--editing, .eidos-dropdown-content',\n )\n ) {\n return;\n }\n\n commitEditRef.current();\n };\n\n document.addEventListener('mousedown', handleMouseDown);\n return () => document.removeEventListener('mousedown', handleMouseDown);\n }, [editingCell]);\n\n // ── Start editing ────────────────────────────────────────────────────────\n const startEdit = useCallback(\n (rowIndex: number, colKey: string, currentValue: unknown) => {\n const col = columns.find((c) => c.key === colKey);\n if (!col || !isCellEditable(col)) return;\n setEditingCell({ rowIndex, colKey });\n setEditValue(currentValue);\n // Re-focusing a cell that's already flagged shows its error\n // immediately, without needing to retype/re-trigger validation first.\n setEditError(cellErrors[cellErrorKey(rowIndex, colKey)] ?? null);\n },\n [columns, isCellEditable, setEditingCell, setEditValue, cellErrors],\n );\n\n // ── Cell click handler (preserved) ─────────────────────────────────────────\n const handleCellClick = useCallback(\n (rowIndex: number, col: DataGridColumn<T>) => {\n const value = localDataRef.current[rowIndex]?.[col.key];\n\n // Checkbox cells: toggle immediately - no \"edit mode\" UI needed\n if (col.type === 'checkbox') {\n if (!editable || col.editable === false) return;\n const newData = localDataRef.current.map<T>((row, idx) =>\n idx === rowIndex ? ({ ...row, [col.key]: !value } as T) : row,\n );\n setLocalData(newData);\n onChange?.(newData);\n return;\n }\n\n if (!isCellEditable(col)) return;\n\n // Already editing this exact cell - do nothing\n const cell = editingCellRef.current;\n if (cell?.rowIndex === rowIndex && cell?.colKey === col.key) return;\n\n // Commit any in-flight edit first - never blocks navigation, see commitEdit.\n if (cell) commitEdit();\n\n startEdit(rowIndex, col.key, value);\n },\n [editable, isCellEditable, commitEdit, startEdit, setLocalData, onChange],\n );\n\n // ── Keyboard navigation inside an editing cell (preserved) ─────────────────\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent, rowIndex: number, colKey: string) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n discardEdit();\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n commitEdit();\n return;\n }\n\n if (e.key === 'Tab') {\n e.preventDefault();\n\n // Flat list of editable cells in DOM order (over the full dataset)\n const editableCells: Array<{ rowIndex: number; colKey: string }> = [];\n for (let ri = 0; ri < localDataRef.current.length; ri++) {\n for (const c of columns) {\n if (isCellEditable(c)) {\n editableCells.push({ rowIndex: ri, colKey: c.key });\n }\n }\n }\n\n const idx = editableCells.findIndex((c) => c.rowIndex === rowIndex && c.colKey === colKey);\n const next = e.shiftKey ? editableCells[idx - 1] : editableCells[idx + 1];\n\n // Commit the current cell - never blocks navigation, see commitEdit.\n commitValue(rowIndex, colKey, editValueRef.current);\n\n if (next) {\n setEditingCell(next);\n setEditValue(localDataRef.current[next.rowIndex][next.colKey]);\n setEditError(cellErrors[cellErrorKey(next.rowIndex, next.colKey)] ?? null);\n } else {\n setEditingCell(null);\n setEditError(null);\n }\n }\n },\n [\n columns,\n isCellEditable,\n commitEdit,\n commitValue,\n discardEdit,\n cellErrors,\n setEditingCell,\n setEditValue,\n ],\n );\n\n const handleRowAdd = useCallback(() => {\n if (!onRowAdd) return;\n const newRow = onRowAdd();\n const newData = [newRow, ...localDataRef.current];\n setLocalData(newData);\n onChange?.(newData);\n setCurrentPage(1);\n }, [onRowAdd, onChange, setLocalData]);\n\n // ── Selection handlers ──────────────────────────────────────────────────────\n const commitSelection = useCallback(\n (keys: string[]) => {\n if (!isControlledSelection) setInternalSelectedKeys(new Set(keys));\n const rows = localDataRef.current.filter((row, idx) =>\n keys.includes(String(row[rowKey as keyof T] ?? idx)),\n );\n onSelectionChange?.(keys, rows);\n },\n [isControlledSelection, rowKey, onSelectionChange],\n );\n\n const toggleRow = useCallback(\n (key: string) => {\n const next = selectedSet.has(key)\n ? [...selectedSet].filter((k) => k !== key)\n : [...selectedSet, key];\n commitSelection(next);\n },\n [selectedSet, commitSelection],\n );\n\n const toggleAll = useCallback(() => {\n commitSelection(allSelected ? [] : allKeys);\n }, [allSelected, allKeys, commitSelection]);\n\n const clearSelection = useCallback(() => commitSelection([]), [commitSelection]);\n\n // ── Row expansion handlers ───────────────────────────────────────────────────\n const commitExpanded = useCallback(\n (keys: string[]) => {\n if (!isControlledExpansion) setInternalExpandedKeys(new Set(keys));\n onExpandedRowsChange?.(keys);\n },\n [isControlledExpansion, onExpandedRowsChange],\n );\n\n const toggleExpanded = useCallback(\n (key: string) => {\n const isOpen = expandedSet.has(key);\n const next = expandMultiple\n ? isOpen\n ? [...expandedSet].filter((k) => k !== key)\n : [...expandedSet, key]\n : isOpen\n ? []\n : [key];\n commitExpanded(next);\n },\n [expandedSet, expandMultiple, commitExpanded],\n );\n\n // ── Sort handler ────────────────────────────────────────────────────────────\n const handleSortClick = useCallback(\n (colKey: string) => {\n if (onSortChange) {\n // Server-side: delegate to parent\n const newDir =\n currentSort?.key === colKey && currentSort?.direction === 'asc' ? 'desc' : 'asc';\n onSortChange(colKey, newDir);\n } else {\n // Client-side: cycle asc → desc → unsorted (null)\n setInternalSort((prev) => {\n if (prev?.key === colKey) {\n return prev.direction === 'asc' ? { key: colKey, direction: 'desc' } : null;\n }\n return { key: colKey, direction: 'asc' };\n });\n }\n },\n [onSortChange, currentSort],\n );\n\n // ── Filter handler ───────────────────────────────────────────────────────────\n const handleFiltersChange = useCallback(\n (newFilters: TableFilters) => {\n setCurrentPage(1);\n if (onFiltersChange) {\n onFiltersChange(newFilters);\n } else {\n setInternalFilters(newFilters);\n }\n },\n [onFiltersChange],\n );\n\n // ── Page handlers ────────────────────────────────────────────────────────────\n const handlePageChange = useCallback(\n (page: number) => {\n setCurrentPage(page);\n onPageChange?.(page, currentPageSize);\n },\n [currentPageSize, onPageChange],\n );\n\n const handlePageSizeChange = useCallback(\n (newPageSize: number) => {\n setCurrentPageSize(newPageSize);\n setCurrentPage(1);\n onPageChange?.(1, newPageSize);\n },\n [onPageChange],\n );\n\n // ── dnd-kit: sensors + drag-end handler (preserved) ───────────────────────\n // Sensors are always initialised (hook rules) - PointerSensor's distance\n // constraint prevents accidental drags on normal cell clicks.\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 5 } }),\n useSensor(KeyboardSensor),\n );\n\n const handleRowDragEnd = useCallback(\n (event: DragEndEvent) => {\n if (!draggableRows) return; // belt-and-suspenders\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n\n const oldIndex = localDataRef.current.findIndex(\n (row, i) => String(row[rowKey as keyof T] ?? i) === String(active.id),\n );\n const newIndex = localDataRef.current.findIndex(\n (row, i) => String(row[rowKey as keyof T] ?? i) === String(over.id),\n );\n\n if (oldIndex === -1 || newIndex === -1) return;\n\n const newData = arrayMove(localDataRef.current, oldIndex, newIndex);\n setLocalData(newData);\n onChange?.(newData);\n onRowReorder?.(newData);\n },\n [draggableRows, rowKey, setLocalData, onChange, onRowReorder],\n );\n\n // ── Cell content renderers (preserved exactly) ─────────────────────────────\n const renderViewCell = (\n col: DataGridColumn<T>,\n value: unknown,\n row: T,\n rowIndex: number,\n ): React.ReactNode => {\n if (col.renderCell) return col.renderCell(value, row, rowIndex);\n\n switch (col.type) {\n case 'checkbox':\n // The <td> onClick handles toggling; onChange is a no-op here so that\n // the controlled Checkbox doesn't re-toggle via its own handler.\n return (\n <Checkbox\n checked={Boolean(value)}\n onChange={() => {\n /* handled by td onClick */\n }}\n size=\"sm\"\n />\n );\n\n case 'select': {\n const option = col.options?.find((o) => o.value === String(value ?? ''));\n return <span>{option ? option.label : String(value ?? '')}</span>;\n }\n\n case 'readonly':\n case 'text':\n case 'number':\n case 'date':\n default:\n return <span>{String(value ?? '')}</span>;\n }\n };\n\n // `variant`/`size` default to the table cell's look: 'bare' has no border/\n // background/radius of its own so the surrounding <td>'s own inset ring\n // (`.eidos-data-grid-cell--editing`) reads as the field's border, and\n // 'sm' keeps the editor from growing the row's height. A card field isn't\n // sitting inside that ring - it's a standalone field in a stack, so it\n // should just look like any other standalone Input/Select in the design\n // system (their own component defaults), not the table's cell-shaped\n // variant. Passing `undefined` here (rather than omitting the prop) is\n // equivalent to omitting it - falls back to each component's own default.\n const renderEditCell = (\n col: DataGridColumn<T>,\n value: unknown,\n row: T,\n rowIndex: number,\n context: 'table' | 'card' = 'table',\n ): React.ReactNode => {\n if (col.renderEditor) {\n return col.renderEditor(value, (v) => setEditValue(v), row);\n }\n\n const variant = context === 'table' ? 'bare' : undefined;\n const size = context === 'table' ? 'sm' : undefined;\n\n switch (col.type) {\n case 'number':\n return (\n <Input\n type=\"number\"\n variant={variant}\n size={size}\n value={String(value ?? '')}\n onChange={(e) => setEditValue(e.target.value)}\n autoFocus\n fullWidth\n clearable={false}\n />\n );\n\n case 'date':\n return (\n <Input\n type=\"date\"\n variant={variant}\n size={size}\n value={String(value ?? '')}\n onChange={(e) => setEditValue(e.target.value)}\n autoFocus\n fullWidth\n clearable={false}\n />\n );\n\n case 'select': {\n // Auto-commit as soon as the user picks an option; the Dropdown's portal\n // means we can't rely on a simple onBlur for this cell type.\n // autoOpen=true so the dropdown opens on the same click that entered\n // edit mode - no second click needed.\n const selectOptions = (col.options ?? []).map((o) => ({\n id: o.value,\n value: o.value,\n label: o.label,\n }));\n\n return (\n <Select\n options={selectOptions}\n value={String(value ?? '')}\n autoOpen\n fullWidth\n inputProps={{ variant, size }}\n onChange={(v) => {\n const selected = Array.isArray(v) ? (v[0] ?? '') : v;\n const newData = localDataRef.current.map<T>((r, i) =>\n i === rowIndex ? ({ ...r, [col.key]: selected } as T) : r,\n );\n setLocalData(newData);\n onChange?.(newData);\n setEditingCell(null);\n }}\n clearable={false}\n />\n );\n }\n\n default:\n return (\n <Input\n type=\"text\"\n variant={variant}\n size={size}\n value={String(value ?? '')}\n onChange={(e) => setEditValue(e.target.value)}\n autoFocus\n fullWidth\n clearable={false}\n />\n );\n }\n };\n\n // ── Card view cell value ─────────────────────────────────────────────────\n // Mirrors the <td> cell's click/edit/error-state wiring in `renderViewCell`/\n // `renderEditCell` above, just wrapped in a plain <div> so it can sit\n // either in a card's label:value field row or its header/subheader - both\n // stay just as editable as any table cell.\n const renderCardValue = (\n col: DataGridColumn<T>,\n row: T,\n localIndex: number,\n baseClassName: string,\n ): React.ReactNode => {\n const value = row[col.key];\n const isEditing = editingCell?.rowIndex === localIndex && editingCell?.colKey === col.key;\n const canEdit = isCellEditable(col);\n const isFlagged = cellErrorKey(localIndex, col.key) in cellErrors;\n const hasError = isEditing && Boolean(editError);\n\n const valueCls = [\n baseClassName,\n // Deliberately NOT `eidos-data-grid-cell--editing` (unlike the <td>\n // version of this same state) - that class's whole job is forcing the\n // editor into `position: absolute; inset: 0` so it fills a <td>\n // without changing the table row's height. A card field has no row\n // to preserve the height of, so it just needs its own \"is editing\"\n // hook for spacing - the editor itself renders normally, with each\n // component's own default (non-`bare`) look (see `renderEditCell`).\n isEditing && 'eidos-datagrid-card-value--editing',\n hasError && 'eidos-data-grid-cell--error',\n isFlagged && !hasError && 'eidos-data-grid-cell--has-error',\n canEdit && !isEditing && 'eidos-data-grid-cell--editable',\n col.type === 'readonly' && 'eidos-data-grid-cell--readonly',\n // Checkbox glyph is intrinsically narrow - without this the value\n // wrapper stretches to the card's full width (block layout), making\n // the whole row clickable/toggleable instead of just the checkbox.\n col.type === 'checkbox' && 'eidos-datagrid-card-value--checkbox',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div\n ref={\n hasError ? (errorTooltipAnchorRef as React.RefObject<HTMLDivElement | null>) : undefined\n }\n className={valueCls}\n onClick={() => handleCellClick(localIndex, col)}\n onKeyDown={isEditing ? (e) => handleKeyDown(e, localIndex, col.key) : undefined}\n tabIndex={isEditing ? -1 : undefined}\n >\n {isEditing\n ? renderEditCell(col, editValue, row, localIndex, 'card')\n : renderViewCell(col, value, row, localIndex)}\n </div>\n );\n };\n\n // Label-above-value field, stacked - used for every column that isn't the\n // card's header/subheader.\n const renderCardField = (col: DataGridColumn<T>, row: T, localIndex: number): React.ReactNode => (\n <div key={col.key} className=\"eidos-datagrid-card-field\">\n <span className=\"eidos-datagrid-card-field-label\">{col.header}</span>\n {renderCardValue(col, row, localIndex, 'eidos-datagrid-card-field-value')}\n </div>\n );\n\n // ── Row-actions menu (type: 'actions' column) ──────────────────────────────\n // Shared between the table's dedicated actions <td> and the card's\n // top-right toolbar slot - see `actionsColumn`/`DataGridColumn.actions`.\n // Renders nothing if there's no actions column, or it has no actions.\n const renderActionsMenu = (row: T, localIndex: number): React.ReactNode => {\n if (!actionsColumn) return null;\n\n const items: MenuItemType[] = actionsColumn.renderActions\n ? actionsColumn.renderActions(row, localIndex)\n : (actionsColumn.actions ?? []).flatMap((action, index) => {\n const id = action.id ?? `${action.label}-${index}`;\n const isDisabled =\n typeof action.disabled === 'function' ? action.disabled(row) : Boolean(action.disabled);\n\n const item: MenuItemType = {\n id,\n type: 'item',\n label: action.label,\n icon: action.icon,\n disabled: isDisabled,\n color: action.danger ? 'danger' : undefined,\n onClick: () => action.onClick(row, localIndex),\n };\n\n return action.divider\n ? [{ id: `${id}-divider`, type: 'separator' as const }, item]\n : [item];\n });\n\n if (!items.length) return null;\n\n return (\n <Menu\n trigger={\n <button type=\"button\" className=\"eidos-datagrid-actions-trigger\" aria-label=\"Row actions\">\n {actionsColumn.actionsIcon ? (\n renderIcon(actionsColumn.actionsIcon, 'eidos-datagrid-actions-trigger-icon')\n ) : (\n <MoreVertical size={16} />\n )}\n </button>\n }\n items={items}\n />\n );\n };\n\n // Columns sorted for rendering: pin:left → unpinned → pin:right. Excludes\n // the actions column (see `dataColumns`) - it's never a normal, sortable/\n // pinnable data column, always rendered in its own dedicated slot instead.\n // This ensures a pinned column defined in the middle of the columns array\n // is always displayed at the correct edge regardless of its original position.\n // The original `columns` prop is still used for key-based lookups above.\n const sortedColumns = useMemo(\n () => [\n ...dataColumns.filter((c) => c.pin === 'left'),\n ...dataColumns.filter((c) => !c.pin),\n ...dataColumns.filter((c) => c.pin === 'right'),\n ],\n [dataColumns],\n );\n\n const totalCols =\n dataColumns.length +\n (showRowNumbers ? 1 : 0) +\n (actionsColumn ? 1 : 0) +\n (draggableRows ? 1 : 0) +\n (selectable ? 1 : 0) +\n (expandable ? 1 : 0);\n\n // Row IDs for SortableContext - must be the displayed rows (not full dataset)\n // so dnd-kit knows which items are currently rendered.\n const rowIds = displayData.map((row, i) => String(row[rowKey as keyof T] ?? i));\n\n const containerStyle: React.CSSProperties = {};\n if (stickyHeader && maxHeight) {\n containerStyle.maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n\n // Toolbar visibility: show whenever filters, density picker, selectable, or add-row are active.\n const showToolbar = !!showFilters || !!showDensity || !!selectable || !!onRowAdd;\n\n // Density modifier class (comfortable = default = no extra class)\n const densityClass =\n effectiveDensity !== 'comfortable' ? `eidos-datagrid--${effectiveDensity}` : '';\n\n // Always include the current page size in the options so the Select is never blank.\n const effectivePageSizeOptions = useMemo(() => {\n const opts = pageSizeOptions ?? [10, 25, 50, 100];\n return opts.includes(pageSize) ? opts : [...opts, pageSize].sort((a, b) => a - b);\n }, [pageSizeOptions, pageSize]);\n\n // ── Loading state (preserved) ───────────────────────────────────────────────\n // `ref={setContainerRef}` here too (not just the main return below) - a\n // consumer whose `loading` prop starts `true` on mount renders this\n // branch first, and without it `hasCardView` would never get a container\n // to measure until some unrelated re-render happened to remount it - see\n // `setContainerRef`'s comment above for the full explanation.\n if (loading) {\n return (\n <div\n ref={setContainerRef}\n className={['eidos-data-grid-container', className].filter(Boolean).join(' ')}\n >\n <div className=\"eidos-data-grid-loading\">\n <Spinner size=\"md\" />\n <p>Loading…</p>\n </div>\n </div>\n );\n }\n\n // ── Render ─────────────────────────────────────────────────────────────────\n // Pre-compute sticky props for system columns so we can spread them on\n // header <th>s and body <td>s without calling the helpers multiple times.\n const expandHeaderPin = getHeaderPinnedProps('__expand__');\n const selHeaderPin = getHeaderPinnedProps('__sel__');\n const dragHeaderPin = getHeaderPinnedProps('__drag__');\n const rownumHeaderPin = getHeaderPinnedProps('__rownum__');\n const expandCellPin = getCellPinnedProps('__expand__');\n const selCellPin = getCellPinnedProps('__sel__');\n const dragCellPin = getCellPinnedProps('__drag__');\n const rownumCellPin = getCellPinnedProps('__rownum__');\n\n return (\n <div\n ref={setContainerRef}\n className={[\n 'eidos-data-grid-container',\n stickyHeader && 'eidos-data-grid-container--sticky-header',\n densityClass,\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={containerStyle}\n >\n {/* ── Toolbar ─────────────────────────────────────────────────────── */}\n {showToolbar && (\n <div className=\"eidos-datagrid-toolbar\">\n {/* Left zone: selection count + bulk actions */}\n <div className=\"eidos-datagrid-toolbar-left\">\n {selectable && hasSelection && (\n <>\n <span className=\"eidos-datagrid-selection-count\">{selectedSet.size} selected</span>\n\n {bulkActions && bulkActions.length > 0 && (\n <div className=\"eidos-datagrid-bulk-actions\">\n {bulkActions.map((action) => {\n const isDisabled =\n typeof action.disabled === 'function'\n ? action.disabled(selectedItems)\n : (action.disabled ?? false);\n\n if (action.type === 'split-button') {\n return (\n <SplitButton\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outlined'}\n color={action.color ?? 'secondary'}\n preIcon={action.icon}\n disabled={isDisabled}\n label={action.label}\n onClick={() => action.onClick(selectedItems)}\n options={action.options.map((option) => ({\n id: option.id,\n label: option.label,\n icon: option.icon,\n disabled: option.disabled,\n onClick: () => option.onClick(selectedItems),\n }))}\n />\n );\n }\n\n return action.label ? (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outlined'}\n color={action.color ?? 'secondary'}\n preIcon={action.icon}\n posIcon={action.posIcon}\n disabled={isDisabled}\n onClick={() => action.onClick(selectedItems)}\n >\n {action.label}\n </Button>\n ) : action.icon ? (\n <Button\n key={action.id}\n size=\"sm\"\n variant={action.variant ?? 'outlined'}\n color={action.color ?? 'secondary'}\n icon={action.icon}\n disabled={isDisabled}\n onClick={() => action.onClick(selectedItems)}\n />\n ) : null;\n })}\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"eidos-datagrid-clear-selection\"\n onClick={clearSelection}\n aria-label=\"Clear selection\"\n >\n <X size={14} />\n </button>\n </>\n )}\n </div>\n\n {/* Right zone: density picker + filter button + add-row button */}\n <div className=\"eidos-datagrid-toolbar-right\">\n {showDensity && (\n <Dropdown\n placement=\"bottom\"\n align=\"end\"\n autoWidth={false}\n trigger={\n <Button variant=\"text\" size=\"sm\" preIcon={AlignJustify}>\n Density\n </Button>\n }\n content={\n <div className=\"eidos-table-menu-panel\">\n {(\n [\n { value: 'compact', label: 'Compact' },\n { value: 'comfortable', label: 'Comfortable' },\n { value: 'spacious', label: 'Spacious' },\n ] as const\n ).map((option) => (\n <button\n key={option.value}\n className={[\n 'eidos-table-menu-item',\n effectiveDensity === option.value ? 'eidos-table-menu-item--active' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => setInternalDensity(option.value)}\n >\n <span className=\"eidos-table-menu-item-check\">\n {effectiveDensity === option.value && <Check size={14} />}\n </span>\n <span>{option.label}</span>\n </button>\n ))}\n </div>\n }\n />\n )}\n\n {showFilters && filterDropdownColumns.length > 0 && (\n <TableFiltersDropdown<T>\n columns={filterDropdownColumns}\n filters={activeFilters}\n onFiltersChange={handleFiltersChange}\n />\n )}\n\n {onRowAdd && (\n <Button variant=\"outlined\" size=\"sm\" preIcon={Plus} onClick={handleRowAdd}>\n Add row\n </Button>\n )}\n </div>\n </div>\n )}\n\n {isCardView ? (\n /* ── Card view ────────────────────────────────────────────────── */\n <div\n className=\"eidos-datagrid-cards\"\n style={{ '--eidos-datagrid-card-min-width': `${cardMinWidth}px` } as React.CSSProperties}\n >\n {displayData.length > 0 ? (\n displayData.map((row, displayIndex) => {\n const localIndex = localData.indexOf(row);\n const rowKeyValue = String(row[rowKey as keyof T] ?? displayIndex);\n const isRowSelected = selectable && selectedSet.has(rowKeyValue);\n const isRowExpanded = expandable && expandedSet.has(rowKeyValue);\n const canExpandRow = !isRowExpandable || isRowExpandable(row);\n\n return (\n <div\n key={rowKeyValue}\n className={[\n 'eidos-datagrid-card',\n isRowSelected && 'eidos-datagrid-card--selected',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {/* stopPropagation so the checkbox/actions menu never bubble\n into a consumer's own row-click handler (e.g. opening a\n details drawer) - mirrors the selection/drag-handle <td>s'\n own `onClick={(e) => e.stopPropagation()}` in table mode. */}\n <div className=\"eidos-datagrid-card-toolbar\" onClick={(e) => e.stopPropagation()}>\n <div className=\"eidos-datagrid-card-toolbar-left\">\n {expandable && canExpandRow && (\n <button\n type=\"button\"\n className={[\n 'eidos-datagrid-expand-toggle',\n isRowExpanded && 'eidos-datagrid-expand-toggle--open',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => toggleExpanded(rowKeyValue)}\n aria-expanded={isRowExpanded}\n aria-label={isRowExpanded ? 'Collapse row' : 'Expand row'}\n >\n <ChevronRight size={14} />\n </button>\n )}\n {selectable && (\n <Checkbox\n checked={isRowSelected}\n onChange={() => toggleRow(rowKeyValue)}\n size=\"sm\"\n />\n )}\n {showRowNumbers && (\n <span className=\"eidos-datagrid-card-row-number\">#{localIndex + 1}</span>\n )}\n </div>\n\n {/* Always rendered (even empty) so it occupies the toolbar's\n middle grid column - conditionally omitting the element\n itself would shift `eidos-datagrid-card-toolbar-right`\n into this column instead of the third one. */}\n <div className=\"eidos-datagrid-card-heading\">\n {cardHeaderColumn &&\n renderCardValue(\n cardHeaderColumn,\n row,\n localIndex,\n 'eidos-datagrid-card-heading-title',\n )}\n {cardSubheaderColumn &&\n renderCardValue(\n cardSubheaderColumn,\n row,\n localIndex,\n 'eidos-datagrid-card-heading-subtitle',\n )}\n </div>\n\n <div className=\"eidos-datagrid-card-toolbar-right\">\n {renderActionsMenu(row, localIndex)}\n </div>\n </div>\n\n <div className=\"eidos-datagrid-card-fields\">\n {cardFieldColumns.map((col) => renderCardField(col, row, localIndex))}\n </div>\n\n {expandable && renderExpandedContent && (\n <ExpandedCardPanel\n isOpen={isRowExpanded}\n render={() => renderExpandedContent(row, localIndex)}\n />\n )}\n </div>\n );\n })\n ) : (\n <div className=\"eidos-datagrid-card-empty\">\n {Object.keys(activeFilters).length > 0 ? (\n <EmptyState\n icon={<SearchX />}\n title=\"No results found\"\n description=\"Try adjusting your filters or search terms.\"\n action={\n <Button\n size=\"sm\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => handleFiltersChange({})}\n >\n Clear filters\n </Button>\n }\n size=\"sm\"\n />\n ) : (\n <EmptyState\n icon={<FolderOpen />}\n title={emptyText}\n description={\n onRowAdd ? 'Add a row to get started.' : 'There are no records to display.'\n }\n size=\"sm\"\n />\n )}\n </div>\n )}\n </div>\n ) : (\n <>\n {/* ── Table (wrapped for horizontal scroll) ───────────────────────── */}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleRowDragEnd}\n >\n <div className=\"eidos-data-grid-scroll\">\n <table className={['eidos-data-grid', densityClass].filter(Boolean).join(' ')}>\n <thead ref={theadRef}>\n <tr>\n {/* Drag-handle column - must come before every other system column */}\n {draggableRows && (\n <th\n className={[\n 'eidos-data-grid-header-cell',\n 'eidos-datagrid-drag-handle-cell',\n dragHeaderPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={dragHeaderPin.style}\n data-col-key=\"__drag__\"\n />\n )}\n\n {/* Expand-toggle column */}\n {expandable && (\n <th\n className={[\n 'eidos-data-grid-header-cell',\n 'eidos-datagrid-expand-cell',\n expandHeaderPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={expandHeaderPin.style}\n data-col-key=\"__expand__\"\n />\n )}\n\n {/* Selection checkbox column - must come before row numbers */}\n {selectable && (\n <th\n className={[\n 'eidos-data-grid-header-cell',\n 'eidos-datagrid-checkbox-cell',\n selHeaderPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={selHeaderPin.style}\n data-col-key=\"__sel__\"\n >\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected}\n onChange={toggleAll}\n size=\"sm\"\n />\n </th>\n )}\n\n {showRowNumbers && (\n <th\n className={[\n 'eidos-data-grid-header-cell',\n 'eidos-data-grid-row-number-col',\n rownumHeaderPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={rownumHeaderPin.style}\n data-col-key=\"__rownum__\"\n >\n #\n </th>\n )}\n\n {sortedColumns.map((col) => {\n const colKey = col.key;\n const isSortable = !!col.sortable;\n const isCurrentlySorted = activeSort?.key === colKey;\n const sortDir = isCurrentlySorted ? activeSort!.direction : null;\n const { style: pinnedStyle, className: pinnedClass } =\n getHeaderPinnedProps(colKey);\n\n return (\n <th\n key={colKey}\n className={[\n 'eidos-data-grid-header-cell',\n isSortable && 'eidos-datagrid-header-cell--sortable',\n isCurrentlySorted && 'eidos-datagrid-header-cell--sorted',\n pinnedClass,\n ]\n .filter(Boolean)\n .join(' ')}\n style={{\n width:\n col.width != null\n ? typeof col.width === 'number'\n ? `${col.width}px`\n : col.width\n : undefined,\n minWidth:\n col.minWidth != null\n ? typeof col.minWidth === 'number'\n ? `${col.minWidth}px`\n : col.minWidth\n : undefined,\n ...pinnedStyle,\n }}\n data-col-key={colKey}\n onClick={isSortable ? () => handleSortClick(colKey) : undefined}\n >\n <div className=\"eidos-datagrid-header-content\">\n <span className=\"eidos-datagrid-header-label\">{col.header}</span>\n {isSortable && (\n <span className=\"eidos-datagrid-sort-icon\">\n {sortDir === 'asc' && <ArrowUp size={14} />}\n {sortDir === 'desc' && <ArrowDown size={14} />}\n {!sortDir && <ChevronsUpDown size={14} />}\n </span>\n )}\n </div>\n </th>\n );\n })}\n\n {actionsColumn && (\n <th\n className=\"eidos-data-grid-header-cell eidos-data-grid-actions-col\"\n data-col-key=\"__actions__\"\n />\n )}\n </tr>\n </thead>\n\n <tbody>\n <SortableContext items={rowIds} strategy={verticalListSortingStrategy}>\n {displayData.length > 0 ? (\n displayData.map((row, displayIndex) => {\n // Find this row's position in the full localData array.\n // displayData rows are the same object references as in localData\n // (filter/sort/slice never clone row objects), so indexOf is O(n)\n // but always accurate - even after edits that produce new row objects.\n const localIndex = localData.indexOf(row);\n const rowKeyValue = String(row[rowKey as keyof T] ?? displayIndex);\n const isRowSelected = selectable && selectedSet.has(rowKeyValue);\n const isRowExpanded = expandable && expandedSet.has(rowKeyValue);\n const canExpandRow = !isRowExpandable || isRowExpandable(row);\n\n return (\n // React.Fragment (rather than SortableTableRow taking the\n // `key` directly) so an expanded row's detail <tr> - see\n // ExpandedTableRow below - can sit right underneath it as\n // a sibling, keyed together as one reconciliation unit.\n <React.Fragment key={rowKeyValue}>\n {/* SortableTableRow is always rendered (hooks unconditional);\n disabled={true} when draggableRows is off so dnd-kit is a no-op. */}\n <SortableTableRow\n id={rowKeyValue}\n disabled={!draggableRows}\n className={[\n 'eidos-data-grid-row',\n isRowSelected && 'eidos-datagrid-row--selected',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {(dragHandleProps, isDragging) => (\n <>\n {draggableRows && (\n <td\n className={[\n 'eidos-datagrid-drag-handle-cell',\n dragCellPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={dragCellPin.style}\n // Prevent a click on the handle from triggering cell editing\n onClick={(e) => e.stopPropagation()}\n >\n <span\n {...(dragHandleProps as React.HTMLAttributes<HTMLSpanElement>)}\n className={[\n 'eidos-datagrid-drag-handle',\n isDragging && 'eidos-datagrid-drag-handle--dragging',\n ]\n .filter(Boolean)\n .join(' ')}\n title=\"Drag to reorder\"\n >\n <GripVertical size={14} />\n </span>\n </td>\n )}\n\n {expandable && (\n <td\n className={[\n 'eidos-data-grid-cell',\n 'eidos-datagrid-expand-cell',\n expandCellPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={expandCellPin.style}\n // Prevent a click on the toggle from triggering cell editing\n onClick={(e) => e.stopPropagation()}\n >\n {canExpandRow && (\n <button\n type=\"button\"\n className={[\n 'eidos-datagrid-expand-toggle',\n isRowExpanded && 'eidos-datagrid-expand-toggle--open',\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={() => toggleExpanded(rowKeyValue)}\n aria-expanded={isRowExpanded}\n aria-label={isRowExpanded ? 'Collapse row' : 'Expand row'}\n >\n <ChevronRight size={14} />\n </button>\n )}\n </td>\n )}\n\n {selectable && (\n <td\n className={[\n 'eidos-data-grid-cell',\n 'eidos-datagrid-checkbox-cell',\n selCellPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={selCellPin.style}\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n checked={isRowSelected}\n onChange={() => toggleRow(rowKeyValue)}\n size=\"sm\"\n />\n </td>\n )}\n\n {showRowNumbers && (\n <td\n className={[\n 'eidos-data-grid-cell',\n 'eidos-data-grid-row-number',\n rownumCellPin.className,\n ]\n .filter(Boolean)\n .join(' ')}\n style={rownumCellPin.style}\n >\n {localIndex + 1}\n </td>\n )}\n\n {sortedColumns.map((col) => {\n const value = row[col.key];\n const isEditing =\n editingCell?.rowIndex === localIndex &&\n editingCell?.colKey === col.key;\n const canEdit = isCellEditable(col);\n // Persists for a cell regardless of focus (background tint only);\n // the border + message only show once this exact cell is\n // focused again, via `hasError` below.\n const isFlagged =\n cellErrorKey(localIndex, col.key) in cellErrors;\n const hasError = isEditing && Boolean(editError);\n const { style: pinnedStyle, className: pinnedClass } =\n getCellPinnedProps(col.key);\n\n const cellCls = [\n 'eidos-data-grid-cell',\n isEditing && 'eidos-data-grid-cell--editing',\n hasError && 'eidos-data-grid-cell--error',\n isFlagged && !hasError && 'eidos-data-grid-cell--has-error',\n canEdit && !isEditing && 'eidos-data-grid-cell--editable',\n col.type === 'readonly' && 'eidos-data-grid-cell--readonly',\n pinnedClass,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <td\n key={col.key}\n ref={\n hasError\n ? (errorTooltipAnchorRef as React.RefObject<HTMLTableDataCellElement | null>)\n : undefined\n }\n className={cellCls}\n style={pinnedStyle}\n onClick={() => handleCellClick(localIndex, col)}\n onKeyDown={\n isEditing\n ? (e) => handleKeyDown(e, localIndex, col.key)\n : undefined\n }\n // Make editing cells focusable so keydown events register\n tabIndex={isEditing ? -1 : undefined}\n >\n {isEditing\n ? renderEditCell(col, editValue, row, localIndex)\n : renderViewCell(col, value, row, localIndex)}\n </td>\n );\n })}\n\n {actionsColumn && (\n <td\n className=\"eidos-data-grid-cell eidos-data-grid-actions-col\"\n // Prevent a click on the actions menu from bubbling into a\n // consumer's own row-click handler (e.g. opening a details\n // drawer) - mirrors the selection/drag-handle <td>s above.\n onClick={(e) => e.stopPropagation()}\n >\n {renderActionsMenu(row, localIndex)}\n </td>\n )}\n </>\n )}\n </SortableTableRow>\n\n {expandable && renderExpandedContent && (\n <ExpandedTableRow\n isOpen={isRowExpanded}\n colSpan={totalCols}\n render={() => renderExpandedContent(row, localIndex)}\n />\n )}\n </React.Fragment>\n );\n })\n ) : (\n <tr className=\"eidos-data-grid-empty-row\">\n <td\n colSpan={totalCols}\n className=\"eidos-data-grid-cell eidos-data-grid-empty-cell\"\n >\n {Object.keys(activeFilters).length > 0 ? (\n <EmptyState\n icon={<SearchX />}\n title=\"No results found\"\n description=\"Try adjusting your filters or search terms.\"\n action={\n <Button\n size=\"sm\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => handleFiltersChange({})}\n >\n Clear filters\n </Button>\n }\n size=\"sm\"\n />\n ) : (\n <EmptyState\n icon={<FolderOpen />}\n title={emptyText}\n description={\n onRowAdd\n ? 'Add a row to get started.'\n : 'There are no records to display.'\n }\n size=\"sm\"\n />\n )}\n </td>\n </tr>\n )}\n </SortableContext>\n </tbody>\n </table>\n </div>\n </DndContext>\n </>\n )}\n\n {/* ── Pagination footer ────────────────────────────────────────────── */}\n {showPagination && (\n <div className=\"eidos-datagrid-footer\">\n <Pagination\n page={currentPage}\n totalPages={totalPages}\n onChange={handlePageChange}\n totalItems={totalItemCount}\n pageSize={currentPageSize}\n onPageSizeChange={handlePageSizeChange}\n pageSizeOptions={effectivePageSizeOptions}\n />\n </div>\n )}\n\n {/* Portaled rather than a child of the erroring cell - see errorTooltipPosition above */}\n {activeCellError &&\n errorTooltipPosition &&\n createPortal(\n <div\n className=\"eidos-data-grid-cell-error\"\n style={{ top: errorTooltipPosition.top, left: errorTooltipPosition.left }}\n >\n {activeCellError}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\n// Assign displayName cleanly without losing the generic signature\nexport const DataGrid = Object.assign(DataGridInner, { displayName: 'DataGrid' });\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Skeleton
3
- } from "./chunk-2YQE26EK.js";
3
+ } from "./chunk-O3I3RBZJ.js";
4
4
 
5
5
  // src/components/VirtualList/VirtualList.component.tsx
6
6
  import { useCallback, useRef as useRef2 } from "react";
@@ -1619,4 +1619,4 @@ var VirtualList = Object.assign(VirtualListInner, {
1619
1619
  export {
1620
1620
  VirtualList
1621
1621
  };
1622
- //# sourceMappingURL=chunk-BTPCSBGP.js.map
1622
+ //# sourceMappingURL=chunk-CJVC3A4O.js.map