@mieweb/ui 0.2.4 → 0.3.0-dev.100

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 (420) hide show
  1. package/README.md +17 -0
  2. package/dist/ag-grid.cjs +37 -26
  3. package/dist/ag-grid.cjs.map +1 -1
  4. package/dist/ag-grid.js +33 -22
  5. package/dist/ag-grid.js.map +1 -1
  6. package/dist/brands/bluehive.cjs +3 -3
  7. package/dist/brands/bluehive.css +5 -5
  8. package/dist/brands/bluehive.js +1 -1
  9. package/dist/brands/index.cjs +29 -29
  10. package/dist/brands/index.js +8 -8
  11. package/dist/brands/mieweb.css +5 -5
  12. package/dist/brands/ozwell.cjs +2 -2
  13. package/dist/brands/ozwell.css +5 -5
  14. package/dist/brands/ozwell.js +1 -1
  15. package/dist/brands/types.cjs +4 -4
  16. package/dist/brands/types.d.cts +14 -8
  17. package/dist/brands/types.d.ts +14 -8
  18. package/dist/brands/types.js +1 -1
  19. package/dist/brands/waggleline.css +1 -1
  20. package/dist/brands/webchart.css +5 -5
  21. package/dist/{chunk-QDGZBDBI.cjs → chunk-2LF7PSSX.cjs} +3 -3
  22. package/dist/{chunk-QDGZBDBI.cjs.map → chunk-2LF7PSSX.cjs.map} +1 -1
  23. package/dist/{chunk-OWPWP46L.js → chunk-2NTYAALC.js} +3 -3
  24. package/dist/{chunk-OWPWP46L.js.map → chunk-2NTYAALC.js.map} +1 -1
  25. package/dist/{chunk-NAATBUHR.cjs → chunk-2VCAWAPC.cjs} +45 -20
  26. package/dist/chunk-2VCAWAPC.cjs.map +1 -0
  27. package/dist/{chunk-N3QTYHRZ.cjs → chunk-3GGET5LK.cjs} +40 -22
  28. package/dist/chunk-3GGET5LK.cjs.map +1 -0
  29. package/dist/{chunk-QL2YTVTR.js → chunk-43GBCUSQ.js} +8 -3
  30. package/dist/chunk-43GBCUSQ.js.map +1 -0
  31. package/dist/chunk-4DMZAVB2.js +334 -0
  32. package/dist/chunk-4DMZAVB2.js.map +1 -0
  33. package/dist/{chunk-EKIQE524.cjs → chunk-4FALCEJI.cjs} +3 -2
  34. package/dist/chunk-4FALCEJI.cjs.map +1 -0
  35. package/dist/chunk-4O3WJY4C.cjs +615 -0
  36. package/dist/chunk-4O3WJY4C.cjs.map +1 -0
  37. package/dist/{chunk-6OCIIIAI.js → chunk-4Z6ZZKIY.js} +40 -22
  38. package/dist/chunk-4Z6ZZKIY.js.map +1 -0
  39. package/dist/{chunk-QIOM5ZV2.cjs → chunk-4ZU53GNR.cjs} +6 -2
  40. package/dist/{chunk-QIOM5ZV2.cjs.map → chunk-4ZU53GNR.cjs.map} +1 -1
  41. package/dist/{chunk-S6UNPMAS.cjs → chunk-66S4PT6C.cjs} +3 -3
  42. package/dist/{chunk-S6UNPMAS.cjs.map → chunk-66S4PT6C.cjs.map} +1 -1
  43. package/dist/{chunk-4AWW5WPF.js → chunk-6LFG4JFF.js} +51 -24
  44. package/dist/chunk-6LFG4JFF.js.map +1 -0
  45. package/dist/chunk-7BARESXI.cjs +353 -0
  46. package/dist/chunk-7BARESXI.cjs.map +1 -0
  47. package/dist/{chunk-PEH4ZOEM.cjs → chunk-A2QVQF54.cjs} +12 -6
  48. package/dist/chunk-A2QVQF54.cjs.map +1 -0
  49. package/dist/{chunk-377KAB4C.cjs → chunk-AWUADXYI.cjs} +8 -2
  50. package/dist/chunk-AWUADXYI.cjs.map +1 -0
  51. package/dist/{chunk-PEFJAWNR.cjs → chunk-BWYYA3LQ.cjs} +26 -10
  52. package/dist/chunk-BWYYA3LQ.cjs.map +1 -0
  53. package/dist/chunk-C4QQAUYN.js +588 -0
  54. package/dist/chunk-C4QQAUYN.js.map +1 -0
  55. package/dist/chunk-CJQXWFIW.js +829 -0
  56. package/dist/chunk-CJQXWFIW.js.map +1 -0
  57. package/dist/{chunk-KWDTTGH2.js → chunk-CVF4HRWL.js} +5 -5
  58. package/dist/{chunk-KWDTTGH2.js.map → chunk-CVF4HRWL.js.map} +1 -1
  59. package/dist/{chunk-WH6I7CMP.cjs → chunk-CW75IKA6.cjs} +27 -2
  60. package/dist/chunk-CW75IKA6.cjs.map +1 -0
  61. package/dist/{chunk-3NJ72QU6.js → chunk-DCER2QQB.js} +3 -2
  62. package/dist/chunk-DCER2QQB.js.map +1 -0
  63. package/dist/{chunk-JYMQJ32S.cjs → chunk-DEZ7XSTG.cjs} +9 -5
  64. package/dist/chunk-DEZ7XSTG.cjs.map +1 -0
  65. package/dist/{chunk-QYJ7RQJ2.cjs → chunk-DFCZPVG4.cjs} +84 -38
  66. package/dist/chunk-DFCZPVG4.cjs.map +1 -0
  67. package/dist/{chunk-AWIULTJW.js → chunk-DNPRRYPQ.js} +18 -3
  68. package/dist/chunk-DNPRRYPQ.js.map +1 -0
  69. package/dist/{chunk-SSKI6VTW.cjs → chunk-E35GUUTC.cjs} +23 -4
  70. package/dist/chunk-E35GUUTC.cjs.map +1 -0
  71. package/dist/{chunk-B5364UWR.cjs → chunk-EAXY5X33.cjs} +6 -6
  72. package/dist/{chunk-B5364UWR.cjs.map → chunk-EAXY5X33.cjs.map} +1 -1
  73. package/dist/{chunk-53K3KWXQ.cjs → chunk-EUUQVDXX.cjs} +168 -138
  74. package/dist/chunk-EUUQVDXX.cjs.map +1 -0
  75. package/dist/{chunk-5UUL5EEO.cjs → chunk-FRT6RQND.cjs} +181 -128
  76. package/dist/chunk-FRT6RQND.cjs.map +1 -0
  77. package/dist/{chunk-R4DM4635.cjs → chunk-FSBFQBNE.cjs} +86 -2
  78. package/dist/chunk-FSBFQBNE.cjs.map +1 -0
  79. package/dist/{chunk-6Q4SU72T.js → chunk-FYEK4RZ3.js} +50 -11
  80. package/dist/chunk-FYEK4RZ3.js.map +1 -0
  81. package/dist/{chunk-UZUBLXVC.js → chunk-FZJBFJJR.js} +3 -2
  82. package/dist/chunk-FZJBFJJR.js.map +1 -0
  83. package/dist/{chunk-UHSPAFY6.js → chunk-GFZNSSSN.js} +3 -3
  84. package/dist/{chunk-UHSPAFY6.js.map → chunk-GFZNSSSN.js.map} +1 -1
  85. package/dist/chunk-GOKC4CCZ.cjs +384 -0
  86. package/dist/chunk-GOKC4CCZ.cjs.map +1 -0
  87. package/dist/{chunk-Z3TFPXVN.cjs → chunk-GXQFRLTN.cjs} +3 -3
  88. package/dist/{chunk-Z3TFPXVN.cjs.map → chunk-GXQFRLTN.cjs.map} +1 -1
  89. package/dist/{chunk-B3L43JGH.js → chunk-HEH3QXOQ.js} +26 -10
  90. package/dist/chunk-HEH3QXOQ.js.map +1 -0
  91. package/dist/{chunk-TA6FVVCM.js → chunk-I56VBDSC.js} +3 -3
  92. package/dist/{chunk-TA6FVVCM.js.map → chunk-I56VBDSC.js.map} +1 -1
  93. package/dist/{chunk-4DJNHPHB.js → chunk-IGWABMSM.js} +3 -3
  94. package/dist/{chunk-4DJNHPHB.js.map → chunk-IGWABMSM.js.map} +1 -1
  95. package/dist/{chunk-SWMRCGL4.cjs → chunk-IKMR2ADM.cjs} +5 -4
  96. package/dist/chunk-IKMR2ADM.cjs.map +1 -0
  97. package/dist/{chunk-HRA4FUO6.cjs → chunk-IWU7H3YS.cjs} +79 -52
  98. package/dist/chunk-IWU7H3YS.cjs.map +1 -0
  99. package/dist/{chunk-ONWOB76P.js → chunk-J3BU3JBX.js} +33 -14
  100. package/dist/chunk-J3BU3JBX.js.map +1 -0
  101. package/dist/{chunk-FFJVCQ5R.cjs → chunk-J644FU54.cjs} +49 -19
  102. package/dist/chunk-J644FU54.cjs.map +1 -0
  103. package/dist/chunk-JBB25LFB.js +359 -0
  104. package/dist/chunk-JBB25LFB.js.map +1 -0
  105. package/dist/{chunk-VDMQCSXT.cjs → chunk-JHPFOG2N.cjs} +4 -4
  106. package/dist/{chunk-VDMQCSXT.cjs.map → chunk-JHPFOG2N.cjs.map} +1 -1
  107. package/dist/{chunk-RYQ5NEKH.js → chunk-JV7UJGBM.js} +6 -6
  108. package/dist/{chunk-RYQ5NEKH.js.map → chunk-JV7UJGBM.js.map} +1 -1
  109. package/dist/{chunk-C6MDPPPL.js → chunk-JW5GWKV7.js} +3 -3
  110. package/dist/{chunk-C6MDPPPL.js.map → chunk-JW5GWKV7.js.map} +1 -1
  111. package/dist/{chunk-XXOBTAKA.js → chunk-JWUVVPKM.js} +79 -52
  112. package/dist/chunk-JWUVVPKM.js.map +1 -0
  113. package/dist/{chunk-EYH7OUX5.js → chunk-JYAWYBA3.js} +23 -4
  114. package/dist/chunk-JYAWYBA3.js.map +1 -0
  115. package/dist/{chunk-5T3AWNHG.cjs → chunk-K7IGBNZA.cjs} +70 -39
  116. package/dist/chunk-K7IGBNZA.cjs.map +1 -0
  117. package/dist/{chunk-BTJHYGPI.cjs → chunk-L7YQBSEL.cjs} +14 -4
  118. package/dist/chunk-L7YQBSEL.cjs.map +1 -0
  119. package/dist/chunk-LEMY57MI.js +3 -0
  120. package/dist/{chunk-3K7QCDSV.js.map → chunk-LEMY57MI.js.map} +1 -1
  121. package/dist/{chunk-AU5ADTYD.cjs → chunk-MIGLLTTD.cjs} +50 -11
  122. package/dist/chunk-MIGLLTTD.cjs.map +1 -0
  123. package/dist/{chunk-VV4N4WY6.cjs → chunk-MSRU3XBH.cjs} +61 -35
  124. package/dist/chunk-MSRU3XBH.cjs.map +1 -0
  125. package/dist/{chunk-JFAXLE2J.js → chunk-MUYTGWGE.js} +9 -5
  126. package/dist/chunk-MUYTGWGE.js.map +1 -0
  127. package/dist/{chunk-B26RIQ5R.js → chunk-MV3MTHWQ.js} +6 -2
  128. package/dist/chunk-MV3MTHWQ.js.map +1 -0
  129. package/dist/{chunk-VZUVYJFU.cjs → chunk-MXQNNKPX.cjs} +17 -17
  130. package/dist/{chunk-VZUVYJFU.cjs.map → chunk-MXQNNKPX.cjs.map} +1 -1
  131. package/dist/{chunk-PF3XWKE5.cjs → chunk-NIEIRA5A.cjs} +33 -14
  132. package/dist/chunk-NIEIRA5A.cjs.map +1 -0
  133. package/dist/{chunk-RRQGH7C5.cjs → chunk-NVHAQOHH.cjs} +8 -3
  134. package/dist/chunk-NVHAQOHH.cjs.map +1 -0
  135. package/dist/chunk-OGOFYY22.js +247 -0
  136. package/dist/chunk-OGOFYY22.js.map +1 -0
  137. package/dist/{chunk-OT36EMM5.js → chunk-OKBR6PX4.js} +5 -4
  138. package/dist/chunk-OKBR6PX4.js.map +1 -0
  139. package/dist/{chunk-LZEY55QZ.cjs → chunk-OYKS2JBB.cjs} +18 -3
  140. package/dist/chunk-OYKS2JBB.cjs.map +1 -0
  141. package/dist/{chunk-4LTN2LEN.js → chunk-PSTGFXQG.js} +3 -3
  142. package/dist/{chunk-4LTN2LEN.js.map → chunk-PSTGFXQG.js.map} +1 -1
  143. package/dist/{chunk-OW2BWGST.js → chunk-PU6ZC4GI.js} +48 -31
  144. package/dist/chunk-PU6ZC4GI.js.map +1 -0
  145. package/dist/chunk-PVUDXJAI.js +124 -0
  146. package/dist/chunk-PVUDXJAI.js.map +1 -0
  147. package/dist/{chunk-EF46XW4Z.cjs → chunk-Q2EWNXIB.cjs} +161 -67
  148. package/dist/chunk-Q2EWNXIB.cjs.map +1 -0
  149. package/dist/{chunk-CP7NPDQW.js → chunk-Q7NBJFEB.js} +87 -4
  150. package/dist/chunk-Q7NBJFEB.js.map +1 -0
  151. package/dist/{chunk-ORUPC5TV.cjs → chunk-QASIWBXU.cjs} +9 -5
  152. package/dist/chunk-QASIWBXU.cjs.map +1 -0
  153. package/dist/{chunk-4LNS5QDP.cjs → chunk-QITBJX4A.cjs} +3 -3
  154. package/dist/{chunk-4LNS5QDP.cjs.map → chunk-QITBJX4A.cjs.map} +1 -1
  155. package/dist/{chunk-KEIA2G6O.cjs → chunk-QO6U5VOT.cjs} +3 -3
  156. package/dist/{chunk-KEIA2G6O.cjs.map → chunk-QO6U5VOT.cjs.map} +1 -1
  157. package/dist/{chunk-XVZ4SLQB.js → chunk-QVJBUWJQ.js} +70 -39
  158. package/dist/chunk-QVJBUWJQ.js.map +1 -0
  159. package/dist/{chunk-QSMMFATL.js → chunk-R25H4N4Z.js} +181 -128
  160. package/dist/chunk-R25H4N4Z.js.map +1 -0
  161. package/dist/{chunk-TPGT236K.js → chunk-RC2YMOMS.js} +26 -3
  162. package/dist/chunk-RC2YMOMS.js.map +1 -0
  163. package/dist/{chunk-BXK5TNJE.cjs → chunk-RH43XBNV.cjs} +3 -2
  164. package/dist/chunk-RH43XBNV.cjs.map +1 -0
  165. package/dist/{chunk-4MHTSFPX.js → chunk-TGCY5FNL.js} +45 -20
  166. package/dist/chunk-TGCY5FNL.js.map +1 -0
  167. package/dist/{chunk-QZLRB3UG.js → chunk-TRZXK57D.js} +168 -138
  168. package/dist/chunk-TRZXK57D.js.map +1 -0
  169. package/dist/{chunk-B7YGVKTE.cjs → chunk-U3ABLVYH.cjs} +51 -24
  170. package/dist/chunk-U3ABLVYH.cjs.map +1 -0
  171. package/dist/chunk-VACI5SP7.cjs +270 -0
  172. package/dist/chunk-VACI5SP7.cjs.map +1 -0
  173. package/dist/{chunk-GV5JQBPX.js → chunk-VCO2IZOG.js} +9 -5
  174. package/dist/chunk-VCO2IZOG.js.map +1 -0
  175. package/dist/chunk-WFS6R2F5.js +328 -0
  176. package/dist/chunk-WFS6R2F5.js.map +1 -0
  177. package/dist/{chunk-IY7UQPDO.cjs → chunk-WGPMTW36.cjs} +6 -2
  178. package/dist/chunk-WGPMTW36.cjs.map +1 -0
  179. package/dist/chunk-WJU3KLVV.cjs +855 -0
  180. package/dist/chunk-WJU3KLVV.cjs.map +1 -0
  181. package/dist/{chunk-SOFX4T7M.js → chunk-WOYUQ4AT.js} +49 -19
  182. package/dist/chunk-WOYUQ4AT.js.map +1 -0
  183. package/dist/{chunk-TCQ27C5M.js → chunk-WTDCNXZO.js} +8 -2
  184. package/dist/chunk-WTDCNXZO.js.map +1 -0
  185. package/dist/{chunk-2J2V4TMJ.cjs → chunk-WZBCK7KG.cjs} +42 -32
  186. package/dist/chunk-WZBCK7KG.cjs.map +1 -0
  187. package/dist/{chunk-O5HS7ZND.cjs → chunk-X7S76WB7.cjs} +3 -3
  188. package/dist/{chunk-O5HS7ZND.cjs.map → chunk-X7S76WB7.cjs.map} +1 -1
  189. package/dist/{chunk-ULOA7WBW.js → chunk-XB7QCKK7.js} +3 -3
  190. package/dist/{chunk-ULOA7WBW.js.map → chunk-XB7QCKK7.js.map} +1 -1
  191. package/dist/{chunk-G2DOD34H.js → chunk-XCLQZ4FV.js} +84 -38
  192. package/dist/chunk-XCLQZ4FV.js.map +1 -0
  193. package/dist/{chunk-NIHESA7O.js → chunk-YDJUUR4Y.js} +42 -32
  194. package/dist/chunk-YDJUUR4Y.js.map +1 -0
  195. package/dist/{chunk-RCMF6KZA.js → chunk-YTZPVEIO.js} +3 -3
  196. package/dist/{chunk-RCMF6KZA.js.map → chunk-YTZPVEIO.js.map} +1 -1
  197. package/dist/{chunk-SWV5E75F.cjs → chunk-Z5J4NTPL.cjs} +3 -3
  198. package/dist/{chunk-SWV5E75F.cjs.map → chunk-Z5J4NTPL.cjs.map} +1 -1
  199. package/dist/{chunk-XHJGYBYG.cjs → chunk-ZKFVGYBK.cjs} +48 -31
  200. package/dist/chunk-ZKFVGYBK.cjs.map +1 -0
  201. package/dist/{chunk-CEHWXAAI.js → chunk-ZVPJ2MH6.js} +14 -4
  202. package/dist/chunk-ZVPJ2MH6.js.map +1 -0
  203. package/dist/{chunk-VBHPXSCV.js → chunk-ZVSW2KS6.js} +12 -6
  204. package/dist/chunk-ZVSW2KS6.js.map +1 -0
  205. package/dist/components/Alert/index.cjs +5 -5
  206. package/dist/components/Alert/index.js +1 -1
  207. package/dist/components/AudioPlayer/index.cjs +6 -6
  208. package/dist/components/AudioPlayer/index.d.cts +5 -4
  209. package/dist/components/AudioPlayer/index.d.ts +5 -4
  210. package/dist/components/AudioPlayer/index.js +1 -1
  211. package/dist/components/AudioRecorder/index.cjs +6 -6
  212. package/dist/components/AudioRecorder/index.js +1 -1
  213. package/dist/components/Avatar/index.cjs +5 -5
  214. package/dist/components/Avatar/index.js +1 -1
  215. package/dist/components/Badge/index.cjs +3 -3
  216. package/dist/components/Badge/index.js +1 -1
  217. package/dist/components/Breadcrumb/index.cjs +3 -3
  218. package/dist/components/Breadcrumb/index.js +1 -1
  219. package/dist/components/Button/index.cjs +3 -3
  220. package/dist/components/Button/index.js +1 -1
  221. package/dist/components/Card/index.cjs +15 -15
  222. package/dist/components/Card/index.d.cts +6 -2
  223. package/dist/components/Card/index.d.ts +6 -2
  224. package/dist/components/Card/index.js +1 -1
  225. package/dist/components/Checkbox/index.cjs +4 -4
  226. package/dist/components/Checkbox/index.js +1 -1
  227. package/dist/components/CountryCodeDropdown/index.cjs +23 -0
  228. package/dist/components/CountryCodeDropdown/index.cjs.map +1 -0
  229. package/dist/components/CountryCodeDropdown/index.d.cts +69 -0
  230. package/dist/components/CountryCodeDropdown/index.d.ts +69 -0
  231. package/dist/components/CountryCodeDropdown/index.js +6 -0
  232. package/dist/components/CountryCodeDropdown/index.js.map +1 -0
  233. package/dist/components/DateInput/index.cjs +4 -4
  234. package/dist/components/DateInput/index.js +3 -3
  235. package/dist/components/Dropdown/index.cjs +9 -8
  236. package/dist/components/Dropdown/index.d.cts +29 -1
  237. package/dist/components/Dropdown/index.d.ts +29 -1
  238. package/dist/components/Dropdown/index.js +3 -2
  239. package/dist/components/Input/index.cjs +3 -3
  240. package/dist/components/Input/index.js +1 -1
  241. package/dist/components/Modal/index.cjs +9 -9
  242. package/dist/components/Modal/index.js +1 -1
  243. package/dist/components/Pagination/index.cjs +4 -4
  244. package/dist/components/Pagination/index.d.cts +6 -2
  245. package/dist/components/Pagination/index.d.ts +6 -2
  246. package/dist/components/Pagination/index.js +1 -1
  247. package/dist/components/PhoneInput/index.cjs +5 -5
  248. package/dist/components/PhoneInput/index.js +3 -3
  249. package/dist/components/Progress/index.cjs +6 -6
  250. package/dist/components/Progress/index.js +1 -1
  251. package/dist/components/QuickAction/index.cjs +6 -6
  252. package/dist/components/QuickAction/index.js +1 -1
  253. package/dist/components/Radio/index.cjs +4 -4
  254. package/dist/components/Radio/index.js +1 -1
  255. package/dist/components/RecordButton/index.cjs +4 -4
  256. package/dist/components/RecordButton/index.js +1 -1
  257. package/dist/components/SchedulePicker/index.cjs +10 -10
  258. package/dist/components/SchedulePicker/index.js +1 -1
  259. package/dist/components/Select/index.cjs +3 -3
  260. package/dist/components/Select/index.d.cts +3 -1
  261. package/dist/components/Select/index.d.ts +3 -1
  262. package/dist/components/Select/index.js +1 -1
  263. package/dist/components/Skeleton/index.cjs +6 -6
  264. package/dist/components/Skeleton/index.d.cts +1 -1
  265. package/dist/components/Skeleton/index.d.ts +1 -1
  266. package/dist/components/Skeleton/index.js +1 -1
  267. package/dist/components/Slider/index.cjs +5 -5
  268. package/dist/components/Slider/index.js +1 -1
  269. package/dist/components/Spinner/index.cjs +5 -5
  270. package/dist/components/Spinner/index.js +1 -1
  271. package/dist/components/Switch/index.cjs +4 -4
  272. package/dist/components/Switch/index.js +1 -1
  273. package/dist/components/Table/index.cjs +9 -9
  274. package/dist/components/Table/index.js +1 -1
  275. package/dist/components/Tabs/index.cjs +7 -7
  276. package/dist/components/Tabs/index.js +1 -1
  277. package/dist/components/Text/index.cjs +4 -4
  278. package/dist/components/Text/index.js +1 -1
  279. package/dist/components/Textarea/index.cjs +3 -3
  280. package/dist/components/Textarea/index.js +1 -1
  281. package/dist/components/ThemeProvider/index.cjs +8 -8
  282. package/dist/components/ThemeProvider/index.js +2 -2
  283. package/dist/components/Tooltip/index.cjs +2 -2
  284. package/dist/components/Tooltip/index.js +1 -1
  285. package/dist/datavis.cjs +251 -0
  286. package/dist/datavis.cjs.map +1 -0
  287. package/dist/datavis.d.cts +47 -0
  288. package/dist/datavis.d.ts +47 -0
  289. package/dist/datavis.js +247 -0
  290. package/dist/datavis.js.map +1 -0
  291. package/dist/default-BTEIFIZJ.cjs +18 -0
  292. package/dist/{default-ZGHKI5WF.cjs.map → default-BTEIFIZJ.cjs.map} +1 -1
  293. package/dist/default-ORBRVZRZ.js +3 -0
  294. package/dist/{default-LIRPABBK.js.map → default-ORBRVZRZ.js.map} +1 -1
  295. package/dist/hooks/index.cjs +19 -15
  296. package/dist/hooks/index.d.cts +39 -3
  297. package/dist/hooks/index.d.ts +39 -3
  298. package/dist/hooks/index.js +2 -2
  299. package/dist/index.cjs +13281 -8968
  300. package/dist/index.cjs.map +1 -1
  301. package/dist/index.d.cts +126 -49
  302. package/dist/index.d.ts +126 -49
  303. package/dist/index.js +12559 -8270
  304. package/dist/index.js.map +1 -1
  305. package/dist/mieweb-4XR6UKDQ.cjs +18 -0
  306. package/dist/{mieweb-UJABK5XX.cjs.map → mieweb-4XR6UKDQ.cjs.map} +1 -1
  307. package/dist/mieweb-N6UMH4MU.js +3 -0
  308. package/dist/{mieweb-PV2YKYO7.js.map → mieweb-N6UMH4MU.js.map} +1 -1
  309. package/dist/ozwell.cjs +385 -0
  310. package/dist/ozwell.cjs.map +1 -0
  311. package/dist/ozwell.d.cts +15 -0
  312. package/dist/ozwell.d.ts +15 -0
  313. package/dist/ozwell.js +360 -0
  314. package/dist/ozwell.js.map +1 -0
  315. package/dist/styles/init.css +339 -0
  316. package/dist/styles.css +1 -1
  317. package/dist/tailwind-preset.cjs +4 -4
  318. package/dist/tailwind-preset.d.cts +13 -2
  319. package/dist/tailwind-preset.d.ts +13 -2
  320. package/dist/tailwind-preset.js +1 -1
  321. package/dist/utils/index.cjs +31 -23
  322. package/dist/utils/index.d.cts +19 -2
  323. package/dist/utils/index.d.ts +19 -2
  324. package/dist/utils/index.js +2 -2
  325. package/dist/waggleline-2MLRNVCV.js +3 -0
  326. package/dist/{waggleline-BMUYAFJF.js.map → waggleline-2MLRNVCV.js.map} +1 -1
  327. package/dist/waggleline-I7QWD3YX.cjs +18 -0
  328. package/dist/{waggleline-6IGA66HR.cjs.map → waggleline-I7QWD3YX.cjs.map} +1 -1
  329. package/dist/webchart-F6EIMC3I.js +3 -0
  330. package/dist/{webchart-2SLO5ICI.js.map → webchart-F6EIMC3I.js.map} +1 -1
  331. package/dist/webchart-H3BHYNHB.cjs +18 -0
  332. package/dist/{webchart-EHVGP46N.cjs.map → webchart-H3BHYNHB.cjs.map} +1 -1
  333. package/package.json +42 -4
  334. package/dist/chunk-265CFCCX.js +0 -173
  335. package/dist/chunk-265CFCCX.js.map +0 -1
  336. package/dist/chunk-2J2V4TMJ.cjs.map +0 -1
  337. package/dist/chunk-377KAB4C.cjs.map +0 -1
  338. package/dist/chunk-3K7QCDSV.js +0 -3
  339. package/dist/chunk-3NJ72QU6.js.map +0 -1
  340. package/dist/chunk-4AWW5WPF.js.map +0 -1
  341. package/dist/chunk-4MHTSFPX.js.map +0 -1
  342. package/dist/chunk-4T2ZNPTC.js +0 -220
  343. package/dist/chunk-4T2ZNPTC.js.map +0 -1
  344. package/dist/chunk-4YRAEFYW.js +0 -233
  345. package/dist/chunk-4YRAEFYW.js.map +0 -1
  346. package/dist/chunk-53K3KWXQ.cjs.map +0 -1
  347. package/dist/chunk-5T3AWNHG.cjs.map +0 -1
  348. package/dist/chunk-5UUL5EEO.cjs.map +0 -1
  349. package/dist/chunk-6OCIIIAI.js.map +0 -1
  350. package/dist/chunk-6Q4SU72T.js.map +0 -1
  351. package/dist/chunk-AU5ADTYD.cjs.map +0 -1
  352. package/dist/chunk-AWIULTJW.js.map +0 -1
  353. package/dist/chunk-B26RIQ5R.js.map +0 -1
  354. package/dist/chunk-B3L43JGH.js.map +0 -1
  355. package/dist/chunk-B7YGVKTE.cjs.map +0 -1
  356. package/dist/chunk-BTJHYGPI.cjs.map +0 -1
  357. package/dist/chunk-BV75DAKO.cjs +0 -245
  358. package/dist/chunk-BV75DAKO.cjs.map +0 -1
  359. package/dist/chunk-BXK5TNJE.cjs.map +0 -1
  360. package/dist/chunk-CEHWXAAI.js.map +0 -1
  361. package/dist/chunk-CP7NPDQW.js.map +0 -1
  362. package/dist/chunk-CQCYXHCU.cjs +0 -256
  363. package/dist/chunk-CQCYXHCU.cjs.map +0 -1
  364. package/dist/chunk-DMA74PZ7.js +0 -240
  365. package/dist/chunk-DMA74PZ7.js.map +0 -1
  366. package/dist/chunk-EF46XW4Z.cjs.map +0 -1
  367. package/dist/chunk-EKIQE524.cjs.map +0 -1
  368. package/dist/chunk-EYH7OUX5.js.map +0 -1
  369. package/dist/chunk-FFJVCQ5R.cjs.map +0 -1
  370. package/dist/chunk-FIXAVBUA.cjs +0 -200
  371. package/dist/chunk-FIXAVBUA.cjs.map +0 -1
  372. package/dist/chunk-G2DOD34H.js.map +0 -1
  373. package/dist/chunk-GHRQ3ZJH.js +0 -764
  374. package/dist/chunk-GHRQ3ZJH.js.map +0 -1
  375. package/dist/chunk-GV5JQBPX.js.map +0 -1
  376. package/dist/chunk-HRA4FUO6.cjs.map +0 -1
  377. package/dist/chunk-INFSKLXE.cjs +0 -790
  378. package/dist/chunk-INFSKLXE.cjs.map +0 -1
  379. package/dist/chunk-IY7UQPDO.cjs.map +0 -1
  380. package/dist/chunk-JFAXLE2J.js.map +0 -1
  381. package/dist/chunk-JYMQJ32S.cjs.map +0 -1
  382. package/dist/chunk-LZEY55QZ.cjs.map +0 -1
  383. package/dist/chunk-N3QTYHRZ.cjs.map +0 -1
  384. package/dist/chunk-NAATBUHR.cjs.map +0 -1
  385. package/dist/chunk-NIHESA7O.js.map +0 -1
  386. package/dist/chunk-NXRLGHEC.js +0 -98
  387. package/dist/chunk-NXRLGHEC.js.map +0 -1
  388. package/dist/chunk-ONWOB76P.js.map +0 -1
  389. package/dist/chunk-ORUPC5TV.cjs.map +0 -1
  390. package/dist/chunk-OT36EMM5.js.map +0 -1
  391. package/dist/chunk-OW2BWGST.js.map +0 -1
  392. package/dist/chunk-PEFJAWNR.cjs.map +0 -1
  393. package/dist/chunk-PEH4ZOEM.cjs.map +0 -1
  394. package/dist/chunk-PF3XWKE5.cjs.map +0 -1
  395. package/dist/chunk-QL2YTVTR.js.map +0 -1
  396. package/dist/chunk-QSMMFATL.js.map +0 -1
  397. package/dist/chunk-QYJ7RQJ2.cjs.map +0 -1
  398. package/dist/chunk-QZLRB3UG.js.map +0 -1
  399. package/dist/chunk-R4DM4635.cjs.map +0 -1
  400. package/dist/chunk-RRQGH7C5.cjs.map +0 -1
  401. package/dist/chunk-SOFX4T7M.js.map +0 -1
  402. package/dist/chunk-SSKI6VTW.cjs.map +0 -1
  403. package/dist/chunk-SWMRCGL4.cjs.map +0 -1
  404. package/dist/chunk-TCQ27C5M.js.map +0 -1
  405. package/dist/chunk-TPGT236K.js.map +0 -1
  406. package/dist/chunk-UZUBLXVC.js.map +0 -1
  407. package/dist/chunk-VBHPXSCV.js.map +0 -1
  408. package/dist/chunk-VV4N4WY6.cjs.map +0 -1
  409. package/dist/chunk-WH6I7CMP.cjs.map +0 -1
  410. package/dist/chunk-XHJGYBYG.cjs.map +0 -1
  411. package/dist/chunk-XVZ4SLQB.js.map +0 -1
  412. package/dist/chunk-XXOBTAKA.js.map +0 -1
  413. package/dist/default-LIRPABBK.js +0 -3
  414. package/dist/default-ZGHKI5WF.cjs +0 -18
  415. package/dist/mieweb-PV2YKYO7.js +0 -3
  416. package/dist/mieweb-UJABK5XX.cjs +0 -18
  417. package/dist/waggleline-6IGA66HR.cjs +0 -18
  418. package/dist/waggleline-BMUYAFJF.js +0 -3
  419. package/dist/webchart-2SLO5ICI.js +0 -3
  420. package/dist/webchart-EHVGP46N.cjs +0 -18
package/README.md CHANGED
@@ -47,6 +47,23 @@ This library requires React 18+ and React DOM 18+:
47
47
  npm install react react-dom
48
48
  ```
49
49
 
50
+ ### Optional Add-ons
51
+
52
+ Heavy or specialized dependencies are kept in separate entry points so they don't bloat the core bundle. Install the peer dependencies for the add-ons you need:
53
+
54
+ | Entry point | Install | Import path |
55
+ | ------------------------ | ---------------------------------------------------- | ------------------------ |
56
+ | **AG Grid** | `npm install ag-grid-community ag-grid-react` | `@mieweb/ui/ag-grid` |
57
+ | **DataVis** | `npm install datavis-ace` | `@mieweb/ui/datavis` |
58
+ | **Ozwell AI Widget** | `npm install @ozwell/react` | `@mieweb/ui/ozwell` |
59
+
60
+ ```tsx
61
+ // Example: Ozwell widget
62
+ import { OzwellWidget } from '@mieweb/ui/ozwell';
63
+
64
+ <OzwellWidget apiKey="agnt_key-your-key" />
65
+ ```
66
+
50
67
  ## Quick Start
51
68
 
52
69
  ### Option 1: With Tailwind CSS (Recommended)
package/dist/ag-grid.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkQIOM5ZV2_cjs = require('./chunk-QIOM5ZV2.cjs');
3
+ var chunk4ZU53GNR_cjs = require('./chunk-4ZU53GNR.cjs');
4
4
  var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
5
5
  var React = require('react');
6
6
  var agGridReact = require('ag-grid-react');
@@ -165,6 +165,7 @@ function AGGridInner({
165
165
  return /* @__PURE__ */ jsxRuntime.jsx(
166
166
  "div",
167
167
  {
168
+ "data-slot": "ag-grid",
168
169
  className: chunkOR5DRJCW_cjs.cn(agGridVariants({ variant, size, brand }), className),
169
170
  style: {
170
171
  height: typeof resolvedHeight === "number" ? `${resolvedHeight}px` : resolvedHeight,
@@ -243,7 +244,7 @@ function getInitials(name) {
243
244
  }
244
245
  function getAvatarColor(name) {
245
246
  const colors = [
246
- "bg-primary-600",
247
+ "bg-primary-800",
247
248
  "bg-green-600",
248
249
  "bg-orange-600",
249
250
  "bg-secondary-600",
@@ -269,32 +270,42 @@ var statusColors = {
269
270
  active: {
270
271
  label: "Active",
271
272
  bgClass: "bg-green-100 dark:bg-green-900/30",
272
- textClass: "text-green-600 dark:text-green-400"
273
+ textClass: "text-green-700 dark:text-green-400"
273
274
  },
274
275
  inactive: {
275
276
  label: "Inactive",
276
277
  bgClass: "bg-gray-200 dark:bg-gray-700",
277
- textClass: "text-gray-600 dark:text-gray-400"
278
+ textClass: "text-gray-600 dark:text-gray-300"
279
+ },
280
+ closed_won: {
281
+ label: "Closed Won",
282
+ bgClass: "bg-green-100 dark:bg-green-900/30",
283
+ textClass: "text-green-700 dark:text-green-400"
284
+ },
285
+ closed_lost: {
286
+ label: "Closed Lost",
287
+ bgClass: "bg-red-100 dark:bg-red-900/30",
288
+ textClass: "text-red-700 dark:text-red-400"
278
289
  },
279
290
  pending: {
280
291
  label: "Pending",
281
292
  bgClass: "bg-amber-100 dark:bg-amber-900/30",
282
- textClass: "text-amber-600 dark:text-amber-400"
293
+ textClass: "text-amber-700 dark:text-amber-400"
283
294
  },
284
295
  new: {
285
296
  label: "New",
286
297
  bgClass: "bg-primary-100 dark:bg-primary-900/30",
287
- textClass: "text-primary-600 dark:text-primary-400"
298
+ textClass: "text-green-700 dark:text-green-400"
288
299
  },
289
300
  verified: {
290
301
  label: "Verified",
291
302
  bgClass: "bg-green-100 dark:bg-green-900/30",
292
- textClass: "text-green-600 dark:text-green-400"
303
+ textClass: "text-green-700 dark:text-green-400"
293
304
  },
294
305
  flagged: {
295
306
  label: "Flagged",
296
307
  bgClass: "bg-red-100 dark:bg-red-900/30",
297
- textClass: "text-red-600 dark:text-red-400"
308
+ textClass: "text-red-700 dark:text-red-400"
298
309
  }
299
310
  };
300
311
  function AvatarNameRenderer(props) {
@@ -311,8 +322,8 @@ function AvatarNameRenderer(props) {
311
322
  const imageUrl = avatarUrl || faviconUrl;
312
323
  if (isSystemValue) {
313
324
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-1", children: [
314
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-7 w-7 items-center justify-center rounded-full bg-gray-200 text-xs font-semibold text-gray-400 dark:bg-gray-700 dark:text-gray-500", children: displayName === "Unassigned" ? "\u2014" : "??" }),
315
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-gray-400 italic dark:text-gray-500", children: displayName })
325
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "dark:text-muted-foreground flex h-7 w-7 items-center justify-center rounded-full bg-gray-200 text-xs font-semibold text-gray-400 dark:bg-gray-700", children: displayName === "Unassigned" ? "\u2014" : "??" }),
326
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "dark:text-muted-foreground truncate text-gray-400 italic", children: displayName })
316
327
  ] });
317
328
  }
318
329
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-1", children: [
@@ -351,7 +362,7 @@ function StatusBadgeRenderer(props) {
351
362
  const config = statusConfig[normalizedValue] || {
352
363
  label: value,
353
364
  bgClass: "bg-gray-200 dark:bg-gray-700",
354
- textClass: "text-gray-600 dark:text-gray-400"
365
+ textClass: "text-gray-600 dark:text-gray-300"
355
366
  };
356
367
  return /* @__PURE__ */ jsxRuntime.jsx(
357
368
  "span",
@@ -369,21 +380,21 @@ function getEngagementScoreColors(score) {
369
380
  if (score >= 70)
370
381
  return {
371
382
  barColor: "bg-green-500",
372
- textColor: "text-green-600 dark:text-green-400"
383
+ textColor: "text-green-700 dark:text-green-400"
373
384
  };
374
385
  if (score >= 40)
375
386
  return {
376
387
  barColor: "bg-amber-500",
377
- textColor: "text-amber-600 dark:text-amber-400"
388
+ textColor: "text-amber-700 dark:text-amber-400"
378
389
  };
379
390
  if (score >= 20)
380
391
  return {
381
392
  barColor: "bg-orange-500",
382
- textColor: "text-orange-600 dark:text-orange-400"
393
+ textColor: "text-orange-700 dark:text-orange-400"
383
394
  };
384
395
  return {
385
396
  barColor: "bg-gray-400",
386
- textColor: "text-gray-600 dark:text-gray-400"
397
+ textColor: "text-muted-foreground"
387
398
  };
388
399
  }
389
400
  function EngagementScoreRenderer(props) {
@@ -410,10 +421,10 @@ function EmailRenderer(props) {
410
421
  "a",
411
422
  {
412
423
  href: `mailto:${value}`,
413
- className: "text-primary-600 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
424
+ className: "text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
414
425
  onClick: (e) => e.stopPropagation(),
415
426
  children: [
416
- /* @__PURE__ */ jsxRuntime.jsx(chunkQIOM5ZV2_cjs.Mail, { className: "h-3 w-3 opacity-60" }),
427
+ /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Mail, { className: "h-3 w-3 opacity-60" }),
417
428
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: value })
418
429
  ]
419
430
  }
@@ -427,10 +438,10 @@ function PhoneRenderer(props) {
427
438
  "a",
428
439
  {
429
440
  href: `tel:${value}`,
430
- className: "text-foreground hover:text-primary-600 dark:hover:text-primary-400 inline-flex items-center gap-1.5",
441
+ className: "text-foreground hover:text-primary-800 dark:hover:text-primary-400 inline-flex items-center gap-1.5",
431
442
  onClick: (e) => e.stopPropagation(),
432
443
  children: [
433
- /* @__PURE__ */ jsxRuntime.jsx(chunkQIOM5ZV2_cjs.Phone, { className: "h-3 w-3 text-green-500 opacity-70" }),
444
+ /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Phone, { className: "h-3 w-3 text-green-500 opacity-70" }),
434
445
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: displayValue })
435
446
  ]
436
447
  }
@@ -447,10 +458,10 @@ function DomainRenderer(props) {
447
458
  href: url,
448
459
  target: "_blank",
449
460
  rel: "noopener noreferrer",
450
- className: "text-primary-600 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
461
+ className: "text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
451
462
  onClick: (e) => e.stopPropagation(),
452
463
  children: [
453
- /* @__PURE__ */ jsxRuntime.jsx(chunkQIOM5ZV2_cjs.Globe, { className: "h-3 w-3 opacity-60" }),
464
+ /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Globe, { className: "h-3 w-3 opacity-60" }),
454
465
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: displayDomain })
455
466
  ]
456
467
  }
@@ -544,10 +555,10 @@ function BooleanRenderer(props) {
544
555
  {
545
556
  className: chunkOR5DRJCW_cjs.cn(
546
557
  "inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",
547
- isTrue ? "bg-green-100 text-green-600 dark:bg-green-900/30 dark:text-green-400" : "bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-400"
558
+ isTrue ? "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400" : "bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-300"
548
559
  ),
549
560
  children: [
550
- isTrue ? /* @__PURE__ */ jsxRuntime.jsx(chunkQIOM5ZV2_cjs.CheckCircle, { className: "h-3 w-3" }) : /* @__PURE__ */ jsxRuntime.jsx(chunkQIOM5ZV2_cjs.Clock, { className: "h-3 w-3" }),
561
+ isTrue ? /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.CheckCircle, { className: "h-3 w-3" }) : /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Clock, { className: "h-3 w-3" }),
551
562
  isTrue ? "Yes" : "No"
552
563
  ]
553
564
  }
@@ -576,7 +587,7 @@ function CompanyRenderer(props) {
576
587
  /* @__PURE__ */ jsxRuntime.jsx(
577
588
  "div",
578
589
  {
579
- className: "bg-primary-100 text-primary-600 dark:bg-primary-900/30 dark:text-primary-400 flex h-5 w-5 items-center justify-center rounded text-[9px] font-semibold",
590
+ className: "bg-primary-100 text-primary-800 dark:bg-primary-900/30 dark:text-primary-400 flex h-5 w-5 items-center justify-center rounded text-[9px] font-semibold",
580
591
  style: { display: faviconUrl ? "none" : "flex" },
581
592
  children: getInitials(value)
582
593
  }
@@ -585,7 +596,7 @@ function CompanyRenderer(props) {
585
596
  ] });
586
597
  }
587
598
  function ProgressRenderer(props) {
588
- const { value, barColor = "bg-primary-500", max = 100 } = props;
599
+ const { value, barColor = "bg-primary-800", max = 100 } = props;
589
600
  if (value == null) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "--" });
590
601
  const percentage = Math.min(100, Math.max(0, Number(value) / max * 100));
591
602
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-1", children: [
@@ -611,7 +622,7 @@ function TagsRenderer(props) {
611
622
  value.slice(0, 3).map((tag, index) => /* @__PURE__ */ jsxRuntime.jsx(
612
623
  "span",
613
624
  {
614
- className: "inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-800 dark:text-gray-400",
625
+ className: "text-foreground inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium dark:bg-gray-800",
615
626
  children: tag
616
627
  },
617
628
  index
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/AGGrid/AGGrid.tsx","../src/components/AGGrid/CellRenderers.tsx"],"names":["ModuleRegistry","AllCommunityModule","cva","React","jsx","cn","AgGridReact","jsxs","Mail","Phone","Globe","Linkedin","formatted","CheckCircle","Clock","memo"],"mappings":"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","file":"ag-grid.cjs","sourcesContent":["import * as React from 'react';\nimport { AgGridReact, AgGridReactProps } from 'ag-grid-react';\nimport {\n ModuleRegistry,\n AllCommunityModule,\n type GridApi,\n type GridReadyEvent,\n type ColDef as AGColDef,\n type RowClickedEvent,\n type RowSelectionOptions,\n} from 'ag-grid-community';\nimport { cn } from '../../utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { BrandConfig } from '../../brands/types';\n\n// Register AG Grid Community modules\nModuleRegistry.registerModules([AllCommunityModule]);\n\n// ============================================================================\n// AG Grid Wrapper Styles\n// ============================================================================\n\nconst agGridVariants = cva('ag-theme-custom w-full', {\n variants: {\n /**\n * Visual variant of the grid\n */\n variant: {\n default: '',\n bordered:\n '[&_.ag-root-wrapper]:border [&_.ag-root-wrapper]:border-border [&_.ag-root-wrapper]:rounded-lg',\n striped: '[&_.ag-row-odd]:bg-muted/50',\n card: '[&_.ag-root-wrapper]:shadow-card [&_.ag-root-wrapper]:rounded-lg [&_.ag-root-wrapper]:border-0',\n },\n /**\n * Size/density of the grid rows\n */\n size: {\n xs: '[&_.ag-row]:h-7 [&_.ag-header-row]:h-7 text-xs [&_.ag-cell]:px-2',\n sm: '[&_.ag-row]:h-8 [&_.ag-header-row]:h-8 text-xs [&_.ag-cell]:px-3',\n md: '[&_.ag-row]:h-10 [&_.ag-header-row]:h-10 text-sm [&_.ag-cell]:px-4',\n lg: '[&_.ag-row]:h-12 [&_.ag-header-row]:h-12 text-base [&_.ag-cell]:px-4',\n xl: '[&_.ag-row]:h-14 [&_.ag-header-row]:h-14 text-base [&_.ag-cell]:px-6',\n },\n /**\n * Brand theme variant\n */\n brand: {\n default: '',\n mieweb: 'ag-brand-mieweb',\n bluehive: 'ag-brand-bluehive',\n waggleline: 'ag-brand-waggleline',\n webchart: 'ag-brand-webchart',\n 'enterprise-health': 'ag-brand-enterprise-health',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n brand: 'default',\n },\n});\n\n// ============================================================================\n// AG Grid Component Types\n// ============================================================================\n\nexport interface AGGridProps<TData = unknown>\n extends\n Omit<AgGridReactProps<TData>, 'className' | 'rowSelection'>,\n VariantProps<typeof agGridVariants> {\n /** Additional CSS classes for the grid container */\n className?: string;\n /** Height of the grid container */\n height?: string | number;\n /** Loading state */\n loading?: boolean;\n /** Callback when a row is clicked */\n onRowClick?: (event: RowClickedEvent<TData>) => void;\n /** Reference to access the grid API */\n gridRef?: React.RefObject<AgGridReact<TData> | null>;\n /** Row selection configuration (v35+ object format or legacy string) */\n rowSelection?: RowSelectionOptions | 'single' | 'multiple';\n /** Brand configuration for theming */\n brandConfig?: BrandConfig;\n /** Show pagination controls */\n pagination?: boolean;\n /** Enable column resizing */\n resizable?: boolean;\n /** Enable sorting */\n sortable?: boolean;\n /** Enable filtering */\n filterable?: boolean;\n /** Custom empty state message */\n noDataMessage?: string;\n /** Custom loading message */\n loadingMessage?: string;\n}\n\n// ============================================================================\n// Default Column Definitions\n// ============================================================================\n\n// Size to pixel height mapping for AG Grid (row heights + default container heights)\nconst sizeToRowHeight: Record<\n string,\n { rowHeight: number; headerHeight: number; containerHeight: number }\n> = {\n xs: { rowHeight: 28, headerHeight: 28, containerHeight: 280 },\n sm: { rowHeight: 32, headerHeight: 32, containerHeight: 320 },\n md: { rowHeight: 40, headerHeight: 40, containerHeight: 400 },\n lg: { rowHeight: 48, headerHeight: 48, containerHeight: 480 },\n xl: { rowHeight: 56, headerHeight: 56, containerHeight: 560 },\n};\n\n// Enhanced default column definitions with brand awareness\nconst getDefaultColDef = (\n sortable: boolean,\n filterable: boolean,\n resizable: boolean\n): AGColDef => ({\n sortable,\n filter: filterable,\n resizable,\n minWidth: 100,\n flex: 1,\n suppressMovable: false,\n headerClass: 'ag-header-cell-custom',\n cellClass: 'ag-cell-custom',\n});\n\n// ============================================================================\n// AG Grid Component\n// ============================================================================\n\n/**\n * A themed AG Grid wrapper component that integrates with the MIE Web UI design system.\n *\n * This component wraps AG Grid Community Edition and provides:\n * - Consistent theming with CSS variables\n * - Size variants (sm, md, lg)\n * - Visual variants (default, bordered, striped)\n * - Loading states\n * - Simplified API while maintaining full AG Grid capabilities\n *\n * @example\n * ```tsx\n * const columnDefs = [\n * { field: 'name', headerName: 'Name' },\n * { field: 'email', headerName: 'Email' },\n * { field: 'status', headerName: 'Status' },\n * ];\n *\n * const rowData = [\n * { name: 'John Doe', email: 'john@example.com', status: 'Active' },\n * { name: 'Jane Smith', email: 'jane@example.com', status: 'Pending' },\n * ];\n *\n * <AGGrid\n * columnDefs={columnDefs}\n * rowData={rowData}\n * variant=\"bordered\"\n * size=\"md\"\n * />\n * ```\n */\nfunction AGGridInner<TData = unknown>(\n {\n className,\n variant,\n size,\n brand,\n height,\n loading = false,\n columnDefs,\n rowData,\n defaultColDef: userDefaultColDef,\n onGridReady,\n onRowClick,\n gridRef,\n rowSelection,\n brandConfig,\n pagination = false,\n resizable = true,\n sortable = true,\n filterable = true,\n noDataMessage = 'No data to display',\n loadingMessage = 'Loading...',\n ...props\n }: AGGridProps<TData>,\n ref: React.ForwardedRef<AgGridReact<TData>>\n) {\n const internalRef = React.useRef<AgGridReact<TData>>(null);\n const gridApiRef = React.useRef<GridApi<TData> | null>(null);\n\n // Use provided ref or internal ref\n const resolvedRef = gridRef || ref || internalRef;\n\n // Handle grid ready\n const handleGridReady = React.useCallback(\n (event: GridReadyEvent<TData>) => {\n gridApiRef.current = event.api;\n onGridReady?.(event);\n },\n [onGridReady]\n );\n\n // Handle row click\n const handleRowClicked = React.useCallback(\n (event: RowClickedEvent<TData>) => {\n onRowClick?.(event);\n },\n [onRowClick]\n );\n\n // Merge default column definitions with feature toggles\n const mergedDefaultColDef = React.useMemo(\n () =>\n ({\n ...getDefaultColDef(sortable, filterable, resizable),\n ...userDefaultColDef,\n }) as AGColDef<TData>,\n [userDefaultColDef, sortable, filterable, resizable]\n );\n\n // Convert legacy rowSelection string to v35+ object format\n const resolvedRowSelection = React.useMemo(():\n | RowSelectionOptions\n | undefined => {\n if (!rowSelection) return undefined;\n\n // If already in object format, use as-is\n if (typeof rowSelection === 'object') {\n return rowSelection;\n }\n\n // Convert legacy string format to v35+ object format\n if (rowSelection === 'multiple') {\n return {\n mode: 'multiRow',\n enableClickSelection: true,\n };\n }\n\n if (rowSelection === 'single') {\n return {\n mode: 'singleRow',\n enableClickSelection: true,\n };\n }\n\n return undefined;\n }, [rowSelection]);\n\n // Show loading overlay when loading prop changes\n React.useEffect(() => {\n if (gridApiRef.current) {\n if (loading) {\n gridApiRef.current.showLoadingOverlay();\n } else {\n gridApiRef.current.hideOverlay();\n }\n }\n }, [loading]);\n\n // Get row/header heights based on size prop\n const sizeConfig = sizeToRowHeight[size || 'md'];\n\n // Use provided height or default based on size\n const resolvedHeight = height ?? sizeConfig.containerHeight;\n\n return (\n <div\n className={cn(agGridVariants({ variant, size, brand }), className)}\n style={{\n height:\n typeof resolvedHeight === 'number'\n ? `${resolvedHeight}px`\n : resolvedHeight,\n ...(brandConfig &&\n ({\n '--ag-primary-color': brandConfig.colors.primary[600],\n '--ag-font-family':\n brandConfig.typography.fontFamily.sans.join(', '),\n } as React.CSSProperties)),\n }}\n data-brand={brand}\n >\n <AgGridReact<TData>\n ref={resolvedRef as React.RefObject<AgGridReact<TData>>}\n columnDefs={columnDefs}\n rowData={rowData}\n defaultColDef={mergedDefaultColDef}\n onGridReady={handleGridReady}\n onRowClicked={handleRowClicked}\n animateRows={true}\n enableBrowserTooltips={true}\n rowSelection={resolvedRowSelection}\n pagination={pagination}\n paginationPageSize={pagination ? 50 : undefined}\n paginationPageSizeSelector={pagination ? [25, 50, 100, 200] : undefined}\n rowHeight={sizeConfig.rowHeight}\n headerHeight={sizeConfig.headerHeight}\n noRowsOverlayComponent={() => (\n <div className=\"text-muted-foreground py-8 text-center\">\n {noDataMessage}\n </div>\n )}\n loadingOverlayComponent={() => (\n <div className=\"text-muted-foreground py-8 text-center\">\n {loadingMessage}\n </div>\n )}\n theme=\"legacy\"\n {...props}\n />\n </div>\n );\n}\n\n// Forward ref with generic support\nexport const AGGrid = React.forwardRef(AGGridInner) as <TData = unknown>(\n props: AGGridProps<TData> & { ref?: React.ForwardedRef<AgGridReact<TData>> }\n) => React.ReactElement;\n\n// Display name for debugging\n(AGGrid as React.FC).displayName = 'AGGrid';\n\n// ============================================================================\n// Re-export AG Grid types for convenience\n// ============================================================================\n\n// Export ColDef with the original name for external use\nexport type { ColDef as AGColDef } from 'ag-grid-community';\n\n// Also export as ColDef for convenience\nexport type ColDef<TData = unknown, TValue = unknown> = AGColDef<TData, TValue>;\n\nexport type {\n GridApi,\n GridReadyEvent,\n RowClickedEvent,\n CellClickedEvent,\n CellValueChangedEvent,\n SelectionChangedEvent,\n FilterChangedEvent,\n SortChangedEvent,\n RowSelectedEvent,\n FirstDataRenderedEvent,\n} from 'ag-grid-community';\n\nexport { AgGridReact } from 'ag-grid-react';\n","/**\n * AG Grid Cell Renderers\n *\n * Rich, visually appealing cell renderers for AG Grid tables.\n * Based on Waggleline's production-tested implementations with\n * full dark mode support and design system integration.\n *\n * All renderers are memoized with React.memo for performance optimization.\n */\n\nimport * as React from 'react';\nimport { memo } from 'react';\nimport type { ICellRendererParams } from 'ag-grid-community';\nimport { cn } from '../../utils/cn';\nimport {\n MailIcon,\n PhoneIcon,\n GlobeIcon,\n CheckCircleIcon,\n ClockIcon,\n} from '../Icons';\nimport { Linkedin } from 'lucide-react';\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get a nested value from an object using dot notation (e.g., 'company.domain')\n */\nfunction getNestedValue(\n obj: Record<string, unknown> | undefined | null,\n path: string\n): unknown {\n if (!obj || !path) return undefined;\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined) return undefined;\n if (typeof current === 'object') {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\n/**\n * Get favicon URL from a domain using Google's favicon service\n */\nfunction getFaviconUrl(domain: string | null | undefined): string | null {\n if (!domain || typeof domain !== 'string') return null;\n const cleanDomain = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/.*$/, '')\n .trim();\n if (!cleanDomain) return null;\n return `https://www.google.com/s2/favicons?domain=${cleanDomain}&sz=64`;\n}\n\n/**\n * Format a phone number with dashes for display\n */\nexport function formatPhoneDisplay(phone: string | null | undefined): string {\n if (!phone) return '';\n const cleaned = phone.replace(/\\D/g, '');\n if (cleaned.length === 10) {\n return `${cleaned.slice(0, 3)}-${cleaned.slice(3, 6)}-${cleaned.slice(6)}`;\n }\n if (cleaned.length === 11 && cleaned.startsWith('1')) {\n return `${cleaned[0]}-${cleaned.slice(1, 4)}-${cleaned.slice(4, 7)}-${cleaned.slice(7)}`;\n }\n return phone;\n}\n\n/**\n * Generate initials from a name\n */\nfunction getInitials(name: string): string {\n if (!name || typeof name !== 'string') return '??';\n const parts = name.split(' ').filter(Boolean);\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n }\n return name.substring(0, 2).toUpperCase();\n}\n\n/**\n * Generate a consistent avatar color based on a name\n */\nfunction getAvatarColor(name: string): string {\n const colors = [\n 'bg-primary-600',\n 'bg-green-600',\n 'bg-orange-600',\n 'bg-secondary-600',\n 'bg-pink-600',\n 'bg-primary-700',\n 'bg-teal-600',\n 'bg-amber-600',\n ];\n if (!name || typeof name !== 'string') return colors[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n}\n\n/**\n * Custom comparison function for AG Grid cell renderers.\n */\nfunction cellRendererPropsAreEqual(\n prevProps: ICellRendererParams,\n nextProps: ICellRendererParams\n): boolean {\n if (prevProps.value !== nextProps.value) return false;\n if (prevProps.data !== nextProps.data) return false;\n if (prevProps.node?.rowIndex !== nextProps.node?.rowIndex) return false;\n return true;\n}\n\n// =============================================================================\n// Status Configuration Types\n// =============================================================================\n\nexport interface StatusConfig {\n label: string;\n bgClass: string;\n textClass: string;\n iconName?: string;\n}\n\n// =============================================================================\n// Default Status Colors\n// =============================================================================\n\nexport const statusColors: Record<string, StatusConfig> = {\n active: {\n label: 'Active',\n bgClass: 'bg-green-100 dark:bg-green-900/30',\n textClass: 'text-green-600 dark:text-green-400',\n },\n inactive: {\n label: 'Inactive',\n bgClass: 'bg-gray-200 dark:bg-gray-700',\n textClass: 'text-gray-600 dark:text-gray-400',\n },\n pending: {\n label: 'Pending',\n bgClass: 'bg-amber-100 dark:bg-amber-900/30',\n textClass: 'text-amber-600 dark:text-amber-400',\n },\n new: {\n label: 'New',\n bgClass: 'bg-primary-100 dark:bg-primary-900/30',\n textClass: 'text-primary-600 dark:text-primary-400',\n },\n verified: {\n label: 'Verified',\n bgClass: 'bg-green-100 dark:bg-green-900/30',\n textClass: 'text-green-600 dark:text-green-400',\n },\n flagged: {\n label: 'Flagged',\n bgClass: 'bg-red-100 dark:bg-red-900/30',\n textClass: 'text-red-600 dark:text-red-400',\n },\n};\n\n// =============================================================================\n// Avatar Name Renderer\n// =============================================================================\n\ninterface AvatarNameRendererProps extends ICellRendererParams {\n avatarField?: string;\n domainField?: string;\n}\n\n/**\n * Renders an avatar with name, suitable for contact/owner columns\n */\nexport function AvatarNameRenderer(\n props: AvatarNameRendererProps\n): React.ReactElement {\n const { data, value } = props;\n if (!data && !value) return <span className=\"text-muted-foreground\">--</span>;\n\n const displayName = typeof value === 'string' && value ? value : 'Unknown';\n const isSystemValue = ['Unknown', 'Unassigned', 'System'].includes(\n displayName\n );\n\n const avatarUrl =\n props.avatarField && data\n ? (getNestedValue(data, props.avatarField) as string | undefined)\n : data?.avatarUrl;\n\n const domain =\n props.domainField && data\n ? (getNestedValue(data, props.domainField) as string | undefined)\n : data?.company?.domain || data?.domain;\n\n const faviconUrl = getFaviconUrl(domain);\n const initials = getInitials(displayName);\n const imageUrl = avatarUrl || faviconUrl;\n\n if (isSystemValue) {\n return (\n <div className=\"flex items-center gap-2 py-1\">\n <div className=\"flex h-7 w-7 items-center justify-center rounded-full bg-gray-200 text-xs font-semibold text-gray-400 dark:bg-gray-700 dark:text-gray-500\">\n {displayName === 'Unassigned' ? '—' : '??'}\n </div>\n <span className=\"truncate text-gray-400 italic dark:text-gray-500\">\n {displayName}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={displayName}\n className=\"h-7 w-7 rounded-full bg-white object-cover ring-2 ring-white dark:ring-gray-700\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const sibling = target.nextElementSibling as HTMLElement;\n if (sibling) sibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold text-white',\n getAvatarColor(displayName)\n )}\n style={{ display: imageUrl ? 'none' : 'flex' }}\n >\n {initials}\n </div>\n <span className=\"text-foreground truncate font-medium\">\n {displayName}\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// Status Badge Renderer\n// =============================================================================\n\nexport interface StatusBadgeRendererProps extends ICellRendererParams {\n /** Custom status color configuration */\n statusConfig?: Record<string, StatusConfig>;\n}\n\n/**\n * Renders a colorful status badge\n */\nexport function StatusBadgeRenderer(\n props: StatusBadgeRendererProps\n): React.ReactElement {\n const { value, statusConfig = statusColors } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const normalizedValue = String(value).toLowerCase().replace(/\\s+/g, '_');\n const config = statusConfig[normalizedValue] || {\n label: value,\n bgClass: 'bg-gray-200 dark:bg-gray-700',\n textClass: 'text-gray-600 dark:text-gray-400',\n };\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n config.bgClass,\n config.textClass\n )}\n >\n {config.label}\n </span>\n );\n}\n\n// =============================================================================\n// Engagement Score Renderer\n// =============================================================================\n\n/**\n * Get engagement score colors based on threshold\n */\nfunction getEngagementScoreColors(score: number): {\n barColor: string;\n textColor: string;\n} {\n if (score >= 70)\n return {\n barColor: 'bg-green-500',\n textColor: 'text-green-600 dark:text-green-400',\n };\n if (score >= 40)\n return {\n barColor: 'bg-amber-500',\n textColor: 'text-amber-600 dark:text-amber-400',\n };\n if (score >= 20)\n return {\n barColor: 'bg-orange-500',\n textColor: 'text-orange-600 dark:text-orange-400',\n };\n return {\n barColor: 'bg-gray-400',\n textColor: 'text-gray-600 dark:text-gray-400',\n };\n}\n\n/**\n * Renders engagement score with color-coded progress bar\n */\nexport function EngagementScoreRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const score = Number(value);\n const percentage = Math.min(100, Math.max(0, score));\n const { barColor, textColor } = getEngagementScoreColors(score);\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n <div className=\"h-1.5 w-16 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700\">\n <div\n className={cn('h-full rounded-full transition-all', barColor)}\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span className={cn('text-sm font-medium', textColor)}>{score}</span>\n </div>\n );\n}\n\n// =============================================================================\n// Email Renderer\n// =============================================================================\n\n/**\n * Renders email with mailto link\n */\nexport function EmailRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n return (\n <a\n href={`mailto:${value}`}\n className=\"text-primary-600 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n <MailIcon className=\"h-3 w-3 opacity-60\" />\n <span className=\"truncate\">{value}</span>\n </a>\n );\n}\n\n// =============================================================================\n// Phone Renderer\n// =============================================================================\n\n/**\n * Renders phone with click-to-call\n */\nexport function PhoneRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const displayValue = formatPhoneDisplay(value);\n\n return (\n <a\n href={`tel:${value}`}\n className=\"text-foreground hover:text-primary-600 dark:hover:text-primary-400 inline-flex items-center gap-1.5\"\n onClick={(e) => e.stopPropagation()}\n >\n <PhoneIcon className=\"h-3 w-3 text-green-500 opacity-70\" />\n <span>{displayValue}</span>\n </a>\n );\n}\n\n// =============================================================================\n// Link Renderers\n// =============================================================================\n\n/**\n * Renders a domain/website URL with icon\n */\nexport function DomainRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const url = value.startsWith('http') ? value : `https://${value}`;\n const displayDomain = value.replace(/^https?:\\/\\//, '').replace(/\\/$/, '');\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-600 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n <GlobeIcon className=\"h-3 w-3 opacity-60\" />\n <span className=\"truncate\">{displayDomain}</span>\n </a>\n );\n}\n\n/**\n * Renders a LinkedIn URL with icon\n */\nexport function LinkedInRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n return (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 text-[#0A66C2] hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n <Linkedin className=\"h-4 w-4\" />\n <span className=\"truncate text-sm\">LinkedIn</span>\n </a>\n );\n}\n\n// =============================================================================\n// Currency Renderer\n// =============================================================================\n\n/**\n * Renders currency with proper formatting\n */\nexport function CurrencyRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(value);\n\n return (\n <span className=\"text-foreground font-medium tabular-nums\">\n {formatted}\n </span>\n );\n}\n\n// =============================================================================\n// Number Renderer\n// =============================================================================\n\n/**\n * Renders number with comma formatting\n */\nexport function NumberRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const formatted = Number(value).toLocaleString();\n\n return <span className=\"text-foreground tabular-nums\">{formatted}</span>;\n}\n\n// =============================================================================\n// Date Renderer\n// =============================================================================\n\nexport interface DateRendererProps extends ICellRendererParams {\n format?: 'short' | 'medium' | 'long' | 'relative' | 'datetime';\n}\n\n/**\n * Renders date with formatting options\n */\nexport function DateRenderer(props: DateRendererProps): React.ReactElement {\n const { value, format = 'medium' } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const date = value instanceof Date ? value : new Date(value);\n\n if (isNaN(date.getTime())) {\n return <span className=\"text-muted-foreground\">--</span>;\n }\n\n if (format === 'relative') {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\n let relativeText: string;\n if (days === 0) {\n relativeText = 'Today';\n } else if (days === 1) {\n relativeText = 'Yesterday';\n } else if (days < 7) {\n relativeText = `${days} days ago`;\n } else if (days < 30) {\n const weeks = Math.floor(days / 7);\n relativeText = `${weeks} week${weeks > 1 ? 's' : ''} ago`;\n } else if (days < 365) {\n const months = Math.floor(days / 30);\n relativeText = `${months} month${months > 1 ? 's' : ''} ago`;\n } else {\n const years = Math.floor(days / 365);\n relativeText = `${years} year${years > 1 ? 's' : ''} ago`;\n }\n\n return <span className=\"text-muted-foreground\">{relativeText}</span>;\n }\n\n const dateOptions: Intl.DateTimeFormatOptions =\n format === 'short'\n ? { month: 'numeric', day: 'numeric' }\n : format === 'long'\n ? { month: 'long', day: 'numeric', year: 'numeric' }\n : { month: 'short', day: 'numeric', year: 'numeric' };\n\n if (format === 'datetime') {\n const formatted = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n return <span className=\"text-foreground\">{formatted}</span>;\n }\n\n const formatted = date.toLocaleDateString('en-US', dateOptions);\n\n return <span className=\"text-foreground\">{formatted}</span>;\n}\n\n// =============================================================================\n// Boolean/Yes-No Renderer\n// =============================================================================\n\n/**\n * Renders boolean as styled Yes/No badge\n */\nexport function BooleanRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const isTrue = Boolean(value);\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n isTrue\n ? 'bg-green-100 text-green-600 dark:bg-green-900/30 dark:text-green-400'\n : 'bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-400'\n )}\n >\n {isTrue ? (\n <CheckCircleIcon className=\"h-3 w-3\" />\n ) : (\n <ClockIcon className=\"h-3 w-3\" />\n )}\n {isTrue ? 'Yes' : 'No'}\n </span>\n );\n}\n\n// =============================================================================\n// Company Renderer\n// =============================================================================\n\ninterface CompanyRendererProps extends ICellRendererParams {\n companyIdField?: string;\n domainField?: string;\n}\n\n/**\n * Renders company name with favicon\n */\nexport function CompanyRenderer(\n props: CompanyRendererProps\n): React.ReactElement {\n const { data, value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const domain =\n props.domainField && data\n ? (getNestedValue(data, props.domainField) as string | undefined)\n : data?.company?.domain || data?.domain;\n\n const faviconUrl = getFaviconUrl(domain);\n\n return (\n <div className=\"flex items-center gap-2 py-0.5\">\n {faviconUrl ? (\n <img\n src={faviconUrl}\n alt={value}\n className=\"h-5 w-5 rounded bg-white object-contain\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const sibling = target.nextElementSibling as HTMLElement;\n if (sibling) sibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"bg-primary-100 text-primary-600 dark:bg-primary-900/30 dark:text-primary-400 flex h-5 w-5 items-center justify-center rounded text-[9px] font-semibold\"\n style={{ display: faviconUrl ? 'none' : 'flex' }}\n >\n {getInitials(value)}\n </div>\n <span className=\"truncate font-medium\">{value}</span>\n </div>\n );\n}\n\n// =============================================================================\n// Progress Renderer\n// =============================================================================\n\nexport interface ProgressRendererProps extends ICellRendererParams {\n /** Color of the progress bar */\n barColor?: string;\n /** Maximum value (default 100) */\n max?: number;\n}\n\n/**\n * Renders a progress bar\n */\nexport function ProgressRenderer(\n props: ProgressRendererProps\n): React.ReactElement {\n const { value, barColor = 'bg-primary-500', max = 100 } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const percentage = Math.min(100, Math.max(0, (Number(value) / max) * 100));\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n <div className=\"h-2 w-20 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700\">\n <div\n className={cn('h-full rounded-full transition-all', barColor)}\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span className=\"text-muted-foreground text-xs font-medium\">\n {Math.round(percentage)}%\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// Tags Renderer\n// =============================================================================\n\n/**\n * Renders an array of tags as badges\n */\nexport function TagsRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value || !Array.isArray(value) || value.length === 0) {\n return <span className=\"text-muted-foreground\">--</span>;\n }\n\n return (\n <div className=\"flex flex-wrap gap-1\">\n {value.slice(0, 3).map((tag: string, index: number) => (\n <span\n key={index}\n className=\"inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-600 dark:bg-gray-800 dark:text-gray-400\"\n >\n {tag}\n </span>\n ))}\n {value.length > 3 && (\n <span className=\"text-muted-foreground text-xs\">\n +{value.length - 3}\n </span>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// Memoized Renderer Exports (for performance)\n// =============================================================================\n\nexport const MemoizedAvatarNameRenderer = memo(\n AvatarNameRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedStatusBadgeRenderer = memo(\n StatusBadgeRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedEngagementScoreRenderer = memo(\n EngagementScoreRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedEmailRenderer = memo(\n EmailRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedPhoneRenderer = memo(\n PhoneRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedLinkedInRenderer = memo(\n LinkedInRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedDomainRenderer = memo(\n DomainRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedCurrencyRenderer = memo(\n CurrencyRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedNumberRenderer = memo(\n NumberRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedDateRenderer = memo(\n DateRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedBooleanRenderer = memo(\n BooleanRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedCompanyRenderer = memo(\n CompanyRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedProgressRenderer = memo(\n ProgressRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedTagsRenderer = memo(\n TagsRenderer,\n cellRendererPropsAreEqual\n);\n\n// =============================================================================\n// Default Export\n// =============================================================================\n\nexport const CellRenderers = {\n // Original renderers\n AvatarNameRenderer,\n StatusBadgeRenderer,\n EngagementScoreRenderer,\n EmailRenderer,\n PhoneRenderer,\n LinkedInRenderer,\n DomainRenderer,\n CurrencyRenderer,\n NumberRenderer,\n DateRenderer,\n BooleanRenderer,\n CompanyRenderer,\n ProgressRenderer,\n TagsRenderer,\n\n // Memoized renderers (recommended for performance)\n MemoizedAvatarNameRenderer,\n MemoizedStatusBadgeRenderer,\n MemoizedEngagementScoreRenderer,\n MemoizedEmailRenderer,\n MemoizedPhoneRenderer,\n MemoizedLinkedInRenderer,\n MemoizedDomainRenderer,\n MemoizedCurrencyRenderer,\n MemoizedNumberRenderer,\n MemoizedDateRenderer,\n MemoizedBooleanRenderer,\n MemoizedCompanyRenderer,\n MemoizedProgressRenderer,\n MemoizedTagsRenderer,\n\n // Utility functions\n formatPhoneDisplay,\n};\n\nexport default CellRenderers;\n"]}
1
+ {"version":3,"sources":["../src/components/AGGrid/AGGrid.tsx","../src/components/AGGrid/CellRenderers.tsx"],"names":["ModuleRegistry","AllCommunityModule","cva","React","jsx","cn","AgGridReact","jsxs","Mail","Phone","Globe","Linkedin","formatted","CheckCircle","Clock","memo"],"mappings":"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","file":"ag-grid.cjs","sourcesContent":["import * as React from 'react';\nimport { AgGridReact, AgGridReactProps } from 'ag-grid-react';\nimport {\n ModuleRegistry,\n AllCommunityModule,\n type GridApi,\n type GridReadyEvent,\n type ColDef as AGColDef,\n type RowClickedEvent,\n type RowSelectionOptions,\n} from 'ag-grid-community';\nimport { cn } from '../../utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type { BrandConfig } from '../../brands/types';\n\n// Register AG Grid Community modules\nModuleRegistry.registerModules([AllCommunityModule]);\n\n// ============================================================================\n// AG Grid Wrapper Styles\n// ============================================================================\n\nconst agGridVariants = cva('ag-theme-custom w-full', {\n variants: {\n /**\n * Visual variant of the grid\n */\n variant: {\n default: '',\n bordered:\n '[&_.ag-root-wrapper]:border [&_.ag-root-wrapper]:border-border [&_.ag-root-wrapper]:rounded-lg',\n striped: '[&_.ag-row-odd]:bg-muted/50',\n card: '[&_.ag-root-wrapper]:shadow-card [&_.ag-root-wrapper]:rounded-lg [&_.ag-root-wrapper]:border-0',\n },\n /**\n * Size/density of the grid rows\n */\n size: {\n xs: '[&_.ag-row]:h-7 [&_.ag-header-row]:h-7 text-xs [&_.ag-cell]:px-2',\n sm: '[&_.ag-row]:h-8 [&_.ag-header-row]:h-8 text-xs [&_.ag-cell]:px-3',\n md: '[&_.ag-row]:h-10 [&_.ag-header-row]:h-10 text-sm [&_.ag-cell]:px-4',\n lg: '[&_.ag-row]:h-12 [&_.ag-header-row]:h-12 text-base [&_.ag-cell]:px-4',\n xl: '[&_.ag-row]:h-14 [&_.ag-header-row]:h-14 text-base [&_.ag-cell]:px-6',\n },\n /**\n * Brand theme variant\n */\n brand: {\n default: '',\n mieweb: 'ag-brand-mieweb',\n bluehive: 'ag-brand-bluehive',\n waggleline: 'ag-brand-waggleline',\n webchart: 'ag-brand-webchart',\n 'enterprise-health': 'ag-brand-enterprise-health',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n brand: 'default',\n },\n});\n\n// ============================================================================\n// AG Grid Component Types\n// ============================================================================\n\nexport interface AGGridProps<TData = unknown>\n extends\n Omit<AgGridReactProps<TData>, 'className' | 'rowSelection'>,\n VariantProps<typeof agGridVariants> {\n /** Additional CSS classes for the grid container */\n className?: string;\n /** Height of the grid container */\n height?: string | number;\n /** Loading state */\n loading?: boolean;\n /** Callback when a row is clicked */\n onRowClick?: (event: RowClickedEvent<TData>) => void;\n /** Reference to access the grid API */\n gridRef?: React.RefObject<AgGridReact<TData> | null>;\n /** Row selection configuration (v35+ object format or legacy string) */\n rowSelection?: RowSelectionOptions | 'single' | 'multiple';\n /** Brand configuration for theming */\n brandConfig?: BrandConfig;\n /** Show pagination controls */\n pagination?: boolean;\n /** Enable column resizing */\n resizable?: boolean;\n /** Enable sorting */\n sortable?: boolean;\n /** Enable filtering */\n filterable?: boolean;\n /** Custom empty state message */\n noDataMessage?: string;\n /** Custom loading message */\n loadingMessage?: string;\n}\n\n// ============================================================================\n// Default Column Definitions\n// ============================================================================\n\n// Size to pixel height mapping for AG Grid (row heights + default container heights)\nconst sizeToRowHeight: Record<\n string,\n { rowHeight: number; headerHeight: number; containerHeight: number }\n> = {\n xs: { rowHeight: 28, headerHeight: 28, containerHeight: 280 },\n sm: { rowHeight: 32, headerHeight: 32, containerHeight: 320 },\n md: { rowHeight: 40, headerHeight: 40, containerHeight: 400 },\n lg: { rowHeight: 48, headerHeight: 48, containerHeight: 480 },\n xl: { rowHeight: 56, headerHeight: 56, containerHeight: 560 },\n};\n\n// Enhanced default column definitions with brand awareness\nconst getDefaultColDef = (\n sortable: boolean,\n filterable: boolean,\n resizable: boolean\n): AGColDef => ({\n sortable,\n filter: filterable,\n resizable,\n minWidth: 100,\n flex: 1,\n suppressMovable: false,\n headerClass: 'ag-header-cell-custom',\n cellClass: 'ag-cell-custom',\n});\n\n// ============================================================================\n// AG Grid Component\n// ============================================================================\n\n/**\n * A themed AG Grid wrapper component that integrates with the MIE Web UI design system.\n *\n * This component wraps AG Grid Community Edition and provides:\n * - Consistent theming with CSS variables\n * - Size variants (sm, md, lg)\n * - Visual variants (default, bordered, striped)\n * - Loading states\n * - Simplified API while maintaining full AG Grid capabilities\n *\n * @example\n * ```tsx\n * const columnDefs = [\n * { field: 'name', headerName: 'Name' },\n * { field: 'email', headerName: 'Email' },\n * { field: 'status', headerName: 'Status' },\n * ];\n *\n * const rowData = [\n * { name: 'John Doe', email: 'john@example.com', status: 'Active' },\n * { name: 'Jane Smith', email: 'jane@example.com', status: 'Pending' },\n * ];\n *\n * <AGGrid\n * columnDefs={columnDefs}\n * rowData={rowData}\n * variant=\"bordered\"\n * size=\"md\"\n * />\n * ```\n */\nfunction AGGridInner<TData = unknown>(\n {\n className,\n variant,\n size,\n brand,\n height,\n loading = false,\n columnDefs,\n rowData,\n defaultColDef: userDefaultColDef,\n onGridReady,\n onRowClick,\n gridRef,\n rowSelection,\n brandConfig,\n pagination = false,\n resizable = true,\n sortable = true,\n filterable = true,\n noDataMessage = 'No data to display',\n loadingMessage = 'Loading...',\n ...props\n }: AGGridProps<TData>,\n ref: React.ForwardedRef<AgGridReact<TData>>\n) {\n const internalRef = React.useRef<AgGridReact<TData>>(null);\n const gridApiRef = React.useRef<GridApi<TData> | null>(null);\n\n // Use provided ref or internal ref\n const resolvedRef = gridRef || ref || internalRef;\n\n // Handle grid ready\n const handleGridReady = React.useCallback(\n (event: GridReadyEvent<TData>) => {\n gridApiRef.current = event.api;\n onGridReady?.(event);\n },\n [onGridReady]\n );\n\n // Handle row click\n const handleRowClicked = React.useCallback(\n (event: RowClickedEvent<TData>) => {\n onRowClick?.(event);\n },\n [onRowClick]\n );\n\n // Merge default column definitions with feature toggles\n const mergedDefaultColDef = React.useMemo(\n () =>\n ({\n ...getDefaultColDef(sortable, filterable, resizable),\n ...userDefaultColDef,\n }) as AGColDef<TData>,\n [userDefaultColDef, sortable, filterable, resizable]\n );\n\n // Convert legacy rowSelection string to v35+ object format\n const resolvedRowSelection = React.useMemo(():\n | RowSelectionOptions\n | undefined => {\n if (!rowSelection) return undefined;\n\n // If already in object format, use as-is\n if (typeof rowSelection === 'object') {\n return rowSelection;\n }\n\n // Convert legacy string format to v35+ object format\n if (rowSelection === 'multiple') {\n return {\n mode: 'multiRow',\n enableClickSelection: true,\n };\n }\n\n if (rowSelection === 'single') {\n return {\n mode: 'singleRow',\n enableClickSelection: true,\n };\n }\n\n return undefined;\n }, [rowSelection]);\n\n // Show loading overlay when loading prop changes\n React.useEffect(() => {\n if (gridApiRef.current) {\n if (loading) {\n gridApiRef.current.showLoadingOverlay();\n } else {\n gridApiRef.current.hideOverlay();\n }\n }\n }, [loading]);\n\n // Get row/header heights based on size prop\n const sizeConfig = sizeToRowHeight[size || 'md'];\n\n // Use provided height or default based on size\n const resolvedHeight = height ?? sizeConfig.containerHeight;\n\n return (\n <div\n data-slot=\"ag-grid\"\n className={cn(agGridVariants({ variant, size, brand }), className)}\n style={{\n height:\n typeof resolvedHeight === 'number'\n ? `${resolvedHeight}px`\n : resolvedHeight,\n ...(brandConfig &&\n ({\n '--ag-primary-color': brandConfig.colors.primary[600],\n '--ag-font-family':\n brandConfig.typography.fontFamily.sans.join(', '),\n } as React.CSSProperties)),\n }}\n data-brand={brand}\n >\n <AgGridReact<TData>\n ref={resolvedRef as React.RefObject<AgGridReact<TData>>}\n columnDefs={columnDefs}\n rowData={rowData}\n defaultColDef={mergedDefaultColDef}\n onGridReady={handleGridReady}\n onRowClicked={handleRowClicked}\n animateRows={true}\n enableBrowserTooltips={true}\n rowSelection={resolvedRowSelection}\n pagination={pagination}\n paginationPageSize={pagination ? 50 : undefined}\n paginationPageSizeSelector={pagination ? [25, 50, 100, 200] : undefined}\n rowHeight={sizeConfig.rowHeight}\n headerHeight={sizeConfig.headerHeight}\n noRowsOverlayComponent={() => (\n <div className=\"text-muted-foreground py-8 text-center\">\n {noDataMessage}\n </div>\n )}\n loadingOverlayComponent={() => (\n <div className=\"text-muted-foreground py-8 text-center\">\n {loadingMessage}\n </div>\n )}\n theme=\"legacy\"\n {...props}\n />\n </div>\n );\n}\n\n// Forward ref with generic support\nexport const AGGrid = React.forwardRef(AGGridInner) as <TData = unknown>(\n props: AGGridProps<TData> & { ref?: React.ForwardedRef<AgGridReact<TData>> }\n) => React.ReactElement;\n\n// Display name for debugging\n(AGGrid as React.FC).displayName = 'AGGrid';\n\n// ============================================================================\n// Re-export AG Grid types for convenience\n// ============================================================================\n\n// Export ColDef with the original name for external use\nexport type { ColDef as AGColDef } from 'ag-grid-community';\n\n// Also export as ColDef for convenience\nexport type ColDef<TData = unknown, TValue = unknown> = AGColDef<TData, TValue>;\n\nexport type {\n GridApi,\n GridReadyEvent,\n RowClickedEvent,\n CellClickedEvent,\n CellValueChangedEvent,\n SelectionChangedEvent,\n FilterChangedEvent,\n SortChangedEvent,\n RowSelectedEvent,\n FirstDataRenderedEvent,\n} from 'ag-grid-community';\n\nexport { AgGridReact } from 'ag-grid-react';\n","/**\n * AG Grid Cell Renderers\n *\n * Rich, visually appealing cell renderers for AG Grid tables.\n * Based on Waggleline's production-tested implementations with\n * full dark mode support and design system integration.\n *\n * All renderers are memoized with React.memo for performance optimization.\n */\n\nimport * as React from 'react';\nimport { memo } from 'react';\nimport type { ICellRendererParams } from 'ag-grid-community';\nimport { cn } from '../../utils/cn';\nimport {\n MailIcon,\n PhoneIcon,\n GlobeIcon,\n CheckCircleIcon,\n ClockIcon,\n} from '../Icons';\nimport { Linkedin } from 'lucide-react';\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get a nested value from an object using dot notation (e.g., 'company.domain')\n */\nfunction getNestedValue(\n obj: Record<string, unknown> | undefined | null,\n path: string\n): unknown {\n if (!obj || !path) return undefined;\n const parts = path.split('.');\n let current: unknown = obj;\n for (const part of parts) {\n if (current === null || current === undefined) return undefined;\n if (typeof current === 'object') {\n current = (current as Record<string, unknown>)[part];\n } else {\n return undefined;\n }\n }\n return current;\n}\n\n/**\n * Get favicon URL from a domain using Google's favicon service\n */\nfunction getFaviconUrl(domain: string | null | undefined): string | null {\n if (!domain || typeof domain !== 'string') return null;\n const cleanDomain = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/.*$/, '')\n .trim();\n if (!cleanDomain) return null;\n return `https://www.google.com/s2/favicons?domain=${cleanDomain}&sz=64`;\n}\n\n/**\n * Format a phone number with dashes for display\n */\nexport function formatPhoneDisplay(phone: string | null | undefined): string {\n if (!phone) return '';\n const cleaned = phone.replace(/\\D/g, '');\n if (cleaned.length === 10) {\n return `${cleaned.slice(0, 3)}-${cleaned.slice(3, 6)}-${cleaned.slice(6)}`;\n }\n if (cleaned.length === 11 && cleaned.startsWith('1')) {\n return `${cleaned[0]}-${cleaned.slice(1, 4)}-${cleaned.slice(4, 7)}-${cleaned.slice(7)}`;\n }\n return phone;\n}\n\n/**\n * Generate initials from a name\n */\nfunction getInitials(name: string): string {\n if (!name || typeof name !== 'string') return '??';\n const parts = name.split(' ').filter(Boolean);\n if (parts.length >= 2) {\n return `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase();\n }\n return name.substring(0, 2).toUpperCase();\n}\n\n/**\n * Generate a consistent avatar color based on a name\n */\nfunction getAvatarColor(name: string): string {\n const colors = [\n 'bg-primary-800',\n 'bg-green-600',\n 'bg-orange-600',\n 'bg-secondary-600',\n 'bg-pink-600',\n 'bg-primary-700',\n 'bg-teal-600',\n 'bg-amber-600',\n ];\n if (!name || typeof name !== 'string') return colors[0];\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return colors[Math.abs(hash) % colors.length];\n}\n\n/**\n * Custom comparison function for AG Grid cell renderers.\n */\nfunction cellRendererPropsAreEqual(\n prevProps: ICellRendererParams,\n nextProps: ICellRendererParams\n): boolean {\n if (prevProps.value !== nextProps.value) return false;\n if (prevProps.data !== nextProps.data) return false;\n if (prevProps.node?.rowIndex !== nextProps.node?.rowIndex) return false;\n return true;\n}\n\n// =============================================================================\n// Status Configuration Types\n// =============================================================================\n\nexport interface StatusConfig {\n label: string;\n bgClass: string;\n textClass: string;\n iconName?: string;\n}\n\n// =============================================================================\n// Default Status Colors\n// =============================================================================\n\nexport const statusColors: Record<string, StatusConfig> = {\n active: {\n label: 'Active',\n bgClass: 'bg-green-100 dark:bg-green-900/30',\n textClass: 'text-green-700 dark:text-green-400',\n },\n inactive: {\n label: 'Inactive',\n bgClass: 'bg-gray-200 dark:bg-gray-700',\n textClass: 'text-gray-600 dark:text-gray-300',\n },\n closed_won: {\n label: 'Closed Won',\n bgClass: 'bg-green-100 dark:bg-green-900/30',\n textClass: 'text-green-700 dark:text-green-400',\n },\n closed_lost: {\n label: 'Closed Lost',\n bgClass: 'bg-red-100 dark:bg-red-900/30',\n textClass: 'text-red-700 dark:text-red-400',\n },\n pending: {\n label: 'Pending',\n bgClass: 'bg-amber-100 dark:bg-amber-900/30',\n textClass: 'text-amber-700 dark:text-amber-400',\n },\n new: {\n label: 'New',\n bgClass: 'bg-primary-100 dark:bg-primary-900/30',\n textClass: 'text-green-700 dark:text-green-400',\n },\n verified: {\n label: 'Verified',\n bgClass: 'bg-green-100 dark:bg-green-900/30',\n textClass: 'text-green-700 dark:text-green-400',\n },\n flagged: {\n label: 'Flagged',\n bgClass: 'bg-red-100 dark:bg-red-900/30',\n textClass: 'text-red-700 dark:text-red-400',\n },\n};\n\n// =============================================================================\n// Avatar Name Renderer\n// =============================================================================\n\ninterface AvatarNameRendererProps extends ICellRendererParams {\n avatarField?: string;\n domainField?: string;\n}\n\n/**\n * Renders an avatar with name, suitable for contact/owner columns\n */\nexport function AvatarNameRenderer(\n props: AvatarNameRendererProps\n): React.ReactElement {\n const { data, value } = props;\n if (!data && !value) return <span className=\"text-muted-foreground\">--</span>;\n\n const displayName = typeof value === 'string' && value ? value : 'Unknown';\n const isSystemValue = ['Unknown', 'Unassigned', 'System'].includes(\n displayName\n );\n\n const avatarUrl =\n props.avatarField && data\n ? (getNestedValue(data, props.avatarField) as string | undefined)\n : data?.avatarUrl;\n\n const domain =\n props.domainField && data\n ? (getNestedValue(data, props.domainField) as string | undefined)\n : data?.company?.domain || data?.domain;\n\n const faviconUrl = getFaviconUrl(domain);\n const initials = getInitials(displayName);\n const imageUrl = avatarUrl || faviconUrl;\n\n if (isSystemValue) {\n return (\n <div className=\"flex items-center gap-2 py-1\">\n <div className=\"dark:text-muted-foreground flex h-7 w-7 items-center justify-center rounded-full bg-gray-200 text-xs font-semibold text-gray-400 dark:bg-gray-700\">\n {displayName === 'Unassigned' ? '—' : '??'}\n </div>\n <span className=\"dark:text-muted-foreground truncate text-gray-400 italic\">\n {displayName}\n </span>\n </div>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={displayName}\n className=\"h-7 w-7 rounded-full bg-white object-cover ring-2 ring-white dark:ring-gray-700\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const sibling = target.nextElementSibling as HTMLElement;\n if (sibling) sibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold text-white',\n getAvatarColor(displayName)\n )}\n style={{ display: imageUrl ? 'none' : 'flex' }}\n >\n {initials}\n </div>\n <span className=\"text-foreground truncate font-medium\">\n {displayName}\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// Status Badge Renderer\n// =============================================================================\n\nexport interface StatusBadgeRendererProps extends ICellRendererParams {\n /** Custom status color configuration */\n statusConfig?: Record<string, StatusConfig>;\n}\n\n/**\n * Renders a colorful status badge\n */\nexport function StatusBadgeRenderer(\n props: StatusBadgeRendererProps\n): React.ReactElement {\n const { value, statusConfig = statusColors } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const normalizedValue = String(value).toLowerCase().replace(/\\s+/g, '_');\n const config = statusConfig[normalizedValue] || {\n label: value,\n bgClass: 'bg-gray-200 dark:bg-gray-700',\n textClass: 'text-gray-600 dark:text-gray-300',\n };\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n config.bgClass,\n config.textClass\n )}\n >\n {config.label}\n </span>\n );\n}\n\n// =============================================================================\n// Engagement Score Renderer\n// =============================================================================\n\n/**\n * Get engagement score colors based on threshold\n */\nfunction getEngagementScoreColors(score: number): {\n barColor: string;\n textColor: string;\n} {\n if (score >= 70)\n return {\n barColor: 'bg-green-500',\n textColor: 'text-green-700 dark:text-green-400',\n };\n if (score >= 40)\n return {\n barColor: 'bg-amber-500',\n textColor: 'text-amber-700 dark:text-amber-400',\n };\n if (score >= 20)\n return {\n barColor: 'bg-orange-500',\n textColor: 'text-orange-700 dark:text-orange-400',\n };\n return {\n barColor: 'bg-gray-400',\n textColor: 'text-muted-foreground',\n };\n}\n\n/**\n * Renders engagement score with color-coded progress bar\n */\nexport function EngagementScoreRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const score = Number(value);\n const percentage = Math.min(100, Math.max(0, score));\n const { barColor, textColor } = getEngagementScoreColors(score);\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n <div className=\"h-1.5 w-16 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700\">\n <div\n className={cn('h-full rounded-full transition-all', barColor)}\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span className={cn('text-sm font-medium', textColor)}>{score}</span>\n </div>\n );\n}\n\n// =============================================================================\n// Email Renderer\n// =============================================================================\n\n/**\n * Renders email with mailto link\n */\nexport function EmailRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n return (\n <a\n href={`mailto:${value}`}\n className=\"text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n <MailIcon className=\"h-3 w-3 opacity-60\" />\n <span className=\"truncate\">{value}</span>\n </a>\n );\n}\n\n// =============================================================================\n// Phone Renderer\n// =============================================================================\n\n/**\n * Renders phone with click-to-call\n */\nexport function PhoneRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const displayValue = formatPhoneDisplay(value);\n\n return (\n <a\n href={`tel:${value}`}\n className=\"text-foreground hover:text-primary-800 dark:hover:text-primary-400 inline-flex items-center gap-1.5\"\n onClick={(e) => e.stopPropagation()}\n >\n <PhoneIcon className=\"h-3 w-3 text-green-500 opacity-70\" />\n <span>{displayValue}</span>\n </a>\n );\n}\n\n// =============================================================================\n// Link Renderers\n// =============================================================================\n\n/**\n * Renders a domain/website URL with icon\n */\nexport function DomainRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const url = value.startsWith('http') ? value : `https://${value}`;\n const displayDomain = value.replace(/^https?:\\/\\//, '').replace(/\\/$/, '');\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n <GlobeIcon className=\"h-3 w-3 opacity-60\" />\n <span className=\"truncate\">{displayDomain}</span>\n </a>\n );\n}\n\n/**\n * Renders a LinkedIn URL with icon\n */\nexport function LinkedInRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n return (\n <a\n href={value}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 text-[#0A66C2] hover:underline\"\n onClick={(e) => e.stopPropagation()}\n >\n <Linkedin className=\"h-4 w-4\" />\n <span className=\"truncate text-sm\">LinkedIn</span>\n </a>\n );\n}\n\n// =============================================================================\n// Currency Renderer\n// =============================================================================\n\n/**\n * Renders currency with proper formatting\n */\nexport function CurrencyRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const formatted = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(value);\n\n return (\n <span className=\"text-foreground font-medium tabular-nums\">\n {formatted}\n </span>\n );\n}\n\n// =============================================================================\n// Number Renderer\n// =============================================================================\n\n/**\n * Renders number with comma formatting\n */\nexport function NumberRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const formatted = Number(value).toLocaleString();\n\n return <span className=\"text-foreground tabular-nums\">{formatted}</span>;\n}\n\n// =============================================================================\n// Date Renderer\n// =============================================================================\n\nexport interface DateRendererProps extends ICellRendererParams {\n format?: 'short' | 'medium' | 'long' | 'relative' | 'datetime';\n}\n\n/**\n * Renders date with formatting options\n */\nexport function DateRenderer(props: DateRendererProps): React.ReactElement {\n const { value, format = 'medium' } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const date = value instanceof Date ? value : new Date(value);\n\n if (isNaN(date.getTime())) {\n return <span className=\"text-muted-foreground\">--</span>;\n }\n\n if (format === 'relative') {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n\n let relativeText: string;\n if (days === 0) {\n relativeText = 'Today';\n } else if (days === 1) {\n relativeText = 'Yesterday';\n } else if (days < 7) {\n relativeText = `${days} days ago`;\n } else if (days < 30) {\n const weeks = Math.floor(days / 7);\n relativeText = `${weeks} week${weeks > 1 ? 's' : ''} ago`;\n } else if (days < 365) {\n const months = Math.floor(days / 30);\n relativeText = `${months} month${months > 1 ? 's' : ''} ago`;\n } else {\n const years = Math.floor(days / 365);\n relativeText = `${years} year${years > 1 ? 's' : ''} ago`;\n }\n\n return <span className=\"text-muted-foreground\">{relativeText}</span>;\n }\n\n const dateOptions: Intl.DateTimeFormatOptions =\n format === 'short'\n ? { month: 'numeric', day: 'numeric' }\n : format === 'long'\n ? { month: 'long', day: 'numeric', year: 'numeric' }\n : { month: 'short', day: 'numeric', year: 'numeric' };\n\n if (format === 'datetime') {\n const formatted = date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n });\n return <span className=\"text-foreground\">{formatted}</span>;\n }\n\n const formatted = date.toLocaleDateString('en-US', dateOptions);\n\n return <span className=\"text-foreground\">{formatted}</span>;\n}\n\n// =============================================================================\n// Boolean/Yes-No Renderer\n// =============================================================================\n\n/**\n * Renders boolean as styled Yes/No badge\n */\nexport function BooleanRenderer(\n props: ICellRendererParams\n): React.ReactElement {\n const { value } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const isTrue = Boolean(value);\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium',\n isTrue\n ? 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400'\n : 'bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-300'\n )}\n >\n {isTrue ? (\n <CheckCircleIcon className=\"h-3 w-3\" />\n ) : (\n <ClockIcon className=\"h-3 w-3\" />\n )}\n {isTrue ? 'Yes' : 'No'}\n </span>\n );\n}\n\n// =============================================================================\n// Company Renderer\n// =============================================================================\n\ninterface CompanyRendererProps extends ICellRendererParams {\n companyIdField?: string;\n domainField?: string;\n}\n\n/**\n * Renders company name with favicon\n */\nexport function CompanyRenderer(\n props: CompanyRendererProps\n): React.ReactElement {\n const { data, value } = props;\n if (!value) return <span className=\"text-muted-foreground\">--</span>;\n\n const domain =\n props.domainField && data\n ? (getNestedValue(data, props.domainField) as string | undefined)\n : data?.company?.domain || data?.domain;\n\n const faviconUrl = getFaviconUrl(domain);\n\n return (\n <div className=\"flex items-center gap-2 py-0.5\">\n {faviconUrl ? (\n <img\n src={faviconUrl}\n alt={value}\n className=\"h-5 w-5 rounded bg-white object-contain\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const sibling = target.nextElementSibling as HTMLElement;\n if (sibling) sibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"bg-primary-100 text-primary-800 dark:bg-primary-900/30 dark:text-primary-400 flex h-5 w-5 items-center justify-center rounded text-[9px] font-semibold\"\n style={{ display: faviconUrl ? 'none' : 'flex' }}\n >\n {getInitials(value)}\n </div>\n <span className=\"truncate font-medium\">{value}</span>\n </div>\n );\n}\n\n// =============================================================================\n// Progress Renderer\n// =============================================================================\n\nexport interface ProgressRendererProps extends ICellRendererParams {\n /** Color of the progress bar */\n barColor?: string;\n /** Maximum value (default 100) */\n max?: number;\n}\n\n/**\n * Renders a progress bar\n */\nexport function ProgressRenderer(\n props: ProgressRendererProps\n): React.ReactElement {\n const { value, barColor = 'bg-primary-800', max = 100 } = props;\n if (value == null) return <span className=\"text-muted-foreground\">--</span>;\n\n const percentage = Math.min(100, Math.max(0, (Number(value) / max) * 100));\n\n return (\n <div className=\"flex items-center gap-2 py-1\">\n <div className=\"h-2 w-20 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700\">\n <div\n className={cn('h-full rounded-full transition-all', barColor)}\n style={{ width: `${percentage}%` }}\n />\n </div>\n <span className=\"text-muted-foreground text-xs font-medium\">\n {Math.round(percentage)}%\n </span>\n </div>\n );\n}\n\n// =============================================================================\n// Tags Renderer\n// =============================================================================\n\n/**\n * Renders an array of tags as badges\n */\nexport function TagsRenderer(props: ICellRendererParams): React.ReactElement {\n const { value } = props;\n if (!value || !Array.isArray(value) || value.length === 0) {\n return <span className=\"text-muted-foreground\">--</span>;\n }\n\n return (\n <div className=\"flex flex-wrap gap-1\">\n {value.slice(0, 3).map((tag: string, index: number) => (\n <span\n key={index}\n className=\"text-foreground inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium dark:bg-gray-800\"\n >\n {tag}\n </span>\n ))}\n {value.length > 3 && (\n <span className=\"text-muted-foreground text-xs\">\n +{value.length - 3}\n </span>\n )}\n </div>\n );\n}\n\n// =============================================================================\n// Memoized Renderer Exports (for performance)\n// =============================================================================\n\nexport const MemoizedAvatarNameRenderer = memo(\n AvatarNameRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedStatusBadgeRenderer = memo(\n StatusBadgeRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedEngagementScoreRenderer = memo(\n EngagementScoreRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedEmailRenderer = memo(\n EmailRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedPhoneRenderer = memo(\n PhoneRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedLinkedInRenderer = memo(\n LinkedInRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedDomainRenderer = memo(\n DomainRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedCurrencyRenderer = memo(\n CurrencyRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedNumberRenderer = memo(\n NumberRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedDateRenderer = memo(\n DateRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedBooleanRenderer = memo(\n BooleanRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedCompanyRenderer = memo(\n CompanyRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedProgressRenderer = memo(\n ProgressRenderer,\n cellRendererPropsAreEqual\n);\nexport const MemoizedTagsRenderer = memo(\n TagsRenderer,\n cellRendererPropsAreEqual\n);\n\n// =============================================================================\n// Default Export\n// =============================================================================\n\nexport const CellRenderers = {\n // Original renderers\n AvatarNameRenderer,\n StatusBadgeRenderer,\n EngagementScoreRenderer,\n EmailRenderer,\n PhoneRenderer,\n LinkedInRenderer,\n DomainRenderer,\n CurrencyRenderer,\n NumberRenderer,\n DateRenderer,\n BooleanRenderer,\n CompanyRenderer,\n ProgressRenderer,\n TagsRenderer,\n\n // Memoized renderers (recommended for performance)\n MemoizedAvatarNameRenderer,\n MemoizedStatusBadgeRenderer,\n MemoizedEngagementScoreRenderer,\n MemoizedEmailRenderer,\n MemoizedPhoneRenderer,\n MemoizedLinkedInRenderer,\n MemoizedDomainRenderer,\n MemoizedCurrencyRenderer,\n MemoizedNumberRenderer,\n MemoizedDateRenderer,\n MemoizedBooleanRenderer,\n MemoizedCompanyRenderer,\n MemoizedProgressRenderer,\n MemoizedTagsRenderer,\n\n // Utility functions\n formatPhoneDisplay,\n};\n\nexport default CellRenderers;\n"]}