@mieweb/ui 0.3.0-dev.73 → 0.3.0-dev.75
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.
- package/dist/ag-grid.cjs +31 -21
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.js +31 -21
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/bluehive.css +5 -5
- package/dist/brands/mieweb.css +5 -5
- package/dist/brands/ozwell.css +5 -5
- package/dist/brands/webchart.css +5 -5
- package/dist/{chunk-N2YMRZ7P.cjs → chunk-2EPJ5SMX.cjs} +5 -5
- package/dist/{chunk-N2YMRZ7P.cjs.map → chunk-2EPJ5SMX.cjs.map} +1 -1
- package/dist/{chunk-QDGZBDBI.cjs → chunk-2LF7PSSX.cjs} +3 -3
- package/dist/{chunk-QDGZBDBI.cjs.map → chunk-2LF7PSSX.cjs.map} +1 -1
- package/dist/{chunk-O43QBXRX.js → chunk-43GBCUSQ.js} +3 -3
- package/dist/{chunk-O43QBXRX.js.map → chunk-43GBCUSQ.js.map} +1 -1
- package/dist/{chunk-MOULJE34.js → chunk-4DMZAVB2.js} +6 -6
- package/dist/chunk-4DMZAVB2.js.map +1 -0
- package/dist/{chunk-OJ64Q3A5.js → chunk-5PUEQH2L.js} +3 -3
- package/dist/{chunk-OJ64Q3A5.js.map → chunk-5PUEQH2L.js.map} +1 -1
- package/dist/{chunk-VKTQQOUH.js → chunk-5U7IIMKH.js} +4 -4
- package/dist/{chunk-VKTQQOUH.js.map → chunk-5U7IIMKH.js.map} +1 -1
- package/dist/{chunk-TSZRR2ZK.cjs → chunk-67QT2WYS.cjs} +3 -3
- package/dist/{chunk-TSZRR2ZK.cjs.map → chunk-67QT2WYS.cjs.map} +1 -1
- package/dist/{chunk-LXHPW2ZF.cjs → chunk-7BARESXI.cjs} +3 -3
- package/dist/{chunk-LXHPW2ZF.cjs.map → chunk-7BARESXI.cjs.map} +1 -1
- package/dist/{chunk-BBQZNIB4.js → chunk-AL6ASCL6.js} +9 -9
- package/dist/{chunk-BBQZNIB4.js.map → chunk-AL6ASCL6.js.map} +1 -1
- package/dist/{chunk-AUXHRAID.cjs → chunk-CHMMHFOW.cjs} +9 -9
- package/dist/{chunk-AUXHRAID.cjs.map → chunk-CHMMHFOW.cjs.map} +1 -1
- package/dist/{chunk-JDI45GEY.js → chunk-CWDQ7OPJ.js} +3 -3
- package/dist/{chunk-JDI45GEY.js.map → chunk-CWDQ7OPJ.js.map} +1 -1
- package/dist/{chunk-Z4HZ35KX.cjs → chunk-DEZ7XSTG.cjs} +3 -3
- package/dist/{chunk-Z4HZ35KX.cjs.map → chunk-DEZ7XSTG.cjs.map} +1 -1
- package/dist/{chunk-GPBQCGKA.cjs → chunk-DT4CHRTJ.cjs} +382 -380
- package/dist/chunk-DT4CHRTJ.cjs.map +1 -0
- package/dist/{chunk-QMQE4PDD.cjs → chunk-E3GBBYAO.cjs} +6 -6
- package/dist/{chunk-QMQE4PDD.cjs.map → chunk-E3GBBYAO.cjs.map} +1 -1
- package/dist/{chunk-IMNLYVXJ.cjs → chunk-EUUQVDXX.cjs} +6 -6
- package/dist/{chunk-IMNLYVXJ.cjs.map → chunk-EUUQVDXX.cjs.map} +1 -1
- package/dist/{chunk-TF5OZDFU.js → chunk-FMGX2AM2.js} +6 -6
- package/dist/{chunk-TF5OZDFU.js.map → chunk-FMGX2AM2.js.map} +1 -1
- package/dist/{chunk-5NSURWMM.js → chunk-FYEK4RZ3.js} +4 -4
- package/dist/{chunk-5NSURWMM.js.map → chunk-FYEK4RZ3.js.map} +1 -1
- package/dist/{chunk-DLLVXNAQ.js → chunk-G7P5X2F4.js} +5 -5
- package/dist/{chunk-DLLVXNAQ.js.map → chunk-G7P5X2F4.js.map} +1 -1
- package/dist/{chunk-QEAIFTUL.cjs → chunk-HT3SXDFF.cjs} +5 -5
- package/dist/{chunk-QEAIFTUL.cjs.map → chunk-HT3SXDFF.cjs.map} +1 -1
- package/dist/{chunk-DCDXOT3A.js → chunk-IEVAVY43.js} +3 -3
- package/dist/{chunk-DCDXOT3A.js.map → chunk-IEVAVY43.js.map} +1 -1
- package/dist/{chunk-EMMQPDOY.cjs → chunk-KLLGX5O3.cjs} +4 -4
- package/dist/{chunk-EMMQPDOY.cjs.map → chunk-KLLGX5O3.cjs.map} +1 -1
- package/dist/{chunk-ND75VHB7.cjs → chunk-MIGLLTTD.cjs} +4 -4
- package/dist/{chunk-ND75VHB7.cjs.map → chunk-MIGLLTTD.cjs.map} +1 -1
- package/dist/{chunk-3DM6LMZG.js → chunk-MUYTGWGE.js} +4 -3
- package/dist/chunk-MUYTGWGE.js.map +1 -0
- package/dist/{chunk-VQW36LLX.cjs → chunk-NVHAQOHH.cjs} +3 -3
- package/dist/{chunk-VQW36LLX.cjs.map → chunk-NVHAQOHH.cjs.map} +1 -1
- package/dist/{chunk-4ASPCSWT.js → chunk-PU6ZC4GI.js} +3 -3
- package/dist/{chunk-4ASPCSWT.js.map → chunk-PU6ZC4GI.js.map} +1 -1
- package/dist/{chunk-JE4AH2TZ.cjs → chunk-Q2EWNXIB.cjs} +6 -6
- package/dist/chunk-Q2EWNXIB.cjs.map +1 -0
- package/dist/{chunk-PLIK3DN6.cjs → chunk-QASIWBXU.cjs} +4 -3
- package/dist/chunk-QASIWBXU.cjs.map +1 -0
- package/dist/{chunk-V2O636JO.js → chunk-QBFNONJD.js} +5 -5
- package/dist/{chunk-V2O636JO.js.map → chunk-QBFNONJD.js.map} +1 -1
- package/dist/{chunk-YR365F2H.cjs → chunk-QG7CJH4O.cjs} +3 -3
- package/dist/{chunk-YR365F2H.cjs.map → chunk-QG7CJH4O.cjs.map} +1 -1
- package/dist/{chunk-ZGSPFVGL.cjs → chunk-QNTUYH6G.cjs} +4 -4
- package/dist/{chunk-ZGSPFVGL.cjs.map → chunk-QNTUYH6G.cjs.map} +1 -1
- package/dist/{chunk-YN3ZIUYC.js → chunk-TRZXK57D.js} +6 -6
- package/dist/{chunk-YN3ZIUYC.js.map → chunk-TRZXK57D.js.map} +1 -1
- package/dist/{chunk-NDHW3ZRF.js → chunk-VCO2IZOG.js} +3 -3
- package/dist/{chunk-NDHW3ZRF.js.map → chunk-VCO2IZOG.js.map} +1 -1
- package/dist/{chunk-7XWPUWSL.js → chunk-WFS6R2F5.js} +3 -3
- package/dist/{chunk-7XWPUWSL.js.map → chunk-WFS6R2F5.js.map} +1 -1
- package/dist/{chunk-JCHVLSXS.js → chunk-WORZLEUZ.js} +382 -380
- package/dist/chunk-WORZLEUZ.js.map +1 -0
- package/dist/{chunk-RCMF6KZA.js → chunk-YTZPVEIO.js} +3 -3
- package/dist/{chunk-RCMF6KZA.js.map → chunk-YTZPVEIO.js.map} +1 -1
- package/dist/{chunk-6EN6ZIW3.js → chunk-YY23MK3V.js} +4 -4
- package/dist/{chunk-6EN6ZIW3.js.map → chunk-YY23MK3V.js.map} +1 -1
- package/dist/{chunk-QXJMKJJV.cjs → chunk-ZKFVGYBK.cjs} +3 -3
- package/dist/{chunk-QXJMKJJV.cjs.map → chunk-ZKFVGYBK.cjs.map} +1 -1
- package/dist/{chunk-Z2ABQA5Z.cjs → chunk-ZRI6OXQD.cjs} +3 -3
- package/dist/{chunk-Z2ABQA5Z.cjs.map → chunk-ZRI6OXQD.cjs.map} +1 -1
- package/dist/components/AudioPlayer/index.cjs +6 -6
- package/dist/components/AudioPlayer/index.js +1 -1
- package/dist/components/AudioRecorder/index.cjs +6 -6
- package/dist/components/AudioRecorder/index.js +1 -1
- package/dist/components/Card/index.cjs +15 -15
- package/dist/components/Card/index.js +1 -1
- package/dist/components/Checkbox/index.cjs +4 -4
- package/dist/components/Checkbox/index.js +1 -1
- package/dist/components/CountryCodeDropdown/index.cjs +4 -4
- package/dist/components/CountryCodeDropdown/index.js +1 -1
- package/dist/components/DateInput/index.cjs +2 -2
- package/dist/components/DateInput/index.js +1 -1
- package/dist/components/Dropdown/index.cjs +7 -7
- package/dist/components/Dropdown/index.js +1 -1
- package/dist/components/Pagination/index.cjs +4 -4
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PhoneInput/index.cjs +3 -3
- package/dist/components/PhoneInput/index.js +1 -1
- package/dist/components/Progress/index.cjs +6 -6
- package/dist/components/Progress/index.js +1 -1
- package/dist/components/QuickAction/index.cjs +6 -6
- package/dist/components/QuickAction/index.js +1 -1
- package/dist/components/Radio/index.cjs +4 -4
- package/dist/components/Radio/index.js +1 -1
- package/dist/components/SchedulePicker/index.cjs +10 -10
- package/dist/components/SchedulePicker/index.js +1 -1
- package/dist/components/Select/index.cjs +3 -3
- package/dist/components/Select/index.js +1 -1
- package/dist/components/Slider/index.cjs +5 -5
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/Spinner/index.cjs +5 -5
- package/dist/components/Spinner/index.js +1 -1
- package/dist/components/Switch/index.cjs +4 -4
- package/dist/components/Switch/index.js +1 -1
- package/dist/components/Tabs/index.cjs +7 -7
- package/dist/components/Tabs/index.js +1 -1
- package/dist/components/Text/index.cjs +4 -4
- package/dist/components/Text/index.js +1 -1
- package/dist/index.cjs +773 -804
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +489 -520
- package/dist/index.js.map +1 -1
- package/dist/styles/init.css +24 -11
- package/dist/styles.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-3DM6LMZG.js.map +0 -1
- package/dist/chunk-GPBQCGKA.cjs.map +0 -1
- package/dist/chunk-JCHVLSXS.js.map +0 -1
- package/dist/chunk-JE4AH2TZ.cjs.map +0 -1
- package/dist/chunk-MOULJE34.js.map +0 -1
- package/dist/chunk-PLIK3DN6.cjs.map +0 -1
package/dist/ag-grid.cjs
CHANGED
|
@@ -244,7 +244,7 @@ function getInitials(name) {
|
|
|
244
244
|
}
|
|
245
245
|
function getAvatarColor(name) {
|
|
246
246
|
const colors = [
|
|
247
|
-
"bg-primary-
|
|
247
|
+
"bg-primary-800",
|
|
248
248
|
"bg-green-600",
|
|
249
249
|
"bg-orange-600",
|
|
250
250
|
"bg-secondary-600",
|
|
@@ -270,32 +270,42 @@ var statusColors = {
|
|
|
270
270
|
active: {
|
|
271
271
|
label: "Active",
|
|
272
272
|
bgClass: "bg-green-100 dark:bg-green-900/30",
|
|
273
|
-
textClass: "text-green-
|
|
273
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
274
274
|
},
|
|
275
275
|
inactive: {
|
|
276
276
|
label: "Inactive",
|
|
277
277
|
bgClass: "bg-gray-200 dark:bg-gray-700",
|
|
278
|
-
textClass: "text-gray-600 dark:text-gray-
|
|
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"
|
|
279
289
|
},
|
|
280
290
|
pending: {
|
|
281
291
|
label: "Pending",
|
|
282
292
|
bgClass: "bg-amber-100 dark:bg-amber-900/30",
|
|
283
|
-
textClass: "text-amber-
|
|
293
|
+
textClass: "text-amber-700 dark:text-amber-400"
|
|
284
294
|
},
|
|
285
295
|
new: {
|
|
286
296
|
label: "New",
|
|
287
297
|
bgClass: "bg-primary-100 dark:bg-primary-900/30",
|
|
288
|
-
textClass: "text-
|
|
298
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
289
299
|
},
|
|
290
300
|
verified: {
|
|
291
301
|
label: "Verified",
|
|
292
302
|
bgClass: "bg-green-100 dark:bg-green-900/30",
|
|
293
|
-
textClass: "text-green-
|
|
303
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
294
304
|
},
|
|
295
305
|
flagged: {
|
|
296
306
|
label: "Flagged",
|
|
297
307
|
bgClass: "bg-red-100 dark:bg-red-900/30",
|
|
298
|
-
textClass: "text-red-
|
|
308
|
+
textClass: "text-red-700 dark:text-red-400"
|
|
299
309
|
}
|
|
300
310
|
};
|
|
301
311
|
function AvatarNameRenderer(props) {
|
|
@@ -312,8 +322,8 @@ function AvatarNameRenderer(props) {
|
|
|
312
322
|
const imageUrl = avatarUrl || faviconUrl;
|
|
313
323
|
if (isSystemValue) {
|
|
314
324
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-1", children: [
|
|
315
|
-
/* @__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
|
|
316
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate text-gray-400 italic
|
|
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 })
|
|
317
327
|
] });
|
|
318
328
|
}
|
|
319
329
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-1", children: [
|
|
@@ -352,7 +362,7 @@ function StatusBadgeRenderer(props) {
|
|
|
352
362
|
const config = statusConfig[normalizedValue] || {
|
|
353
363
|
label: value,
|
|
354
364
|
bgClass: "bg-gray-200 dark:bg-gray-700",
|
|
355
|
-
textClass: "text-gray-600 dark:text-gray-
|
|
365
|
+
textClass: "text-gray-600 dark:text-gray-300"
|
|
356
366
|
};
|
|
357
367
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
358
368
|
"span",
|
|
@@ -370,21 +380,21 @@ function getEngagementScoreColors(score) {
|
|
|
370
380
|
if (score >= 70)
|
|
371
381
|
return {
|
|
372
382
|
barColor: "bg-green-500",
|
|
373
|
-
textColor: "text-green-
|
|
383
|
+
textColor: "text-green-700 dark:text-green-400"
|
|
374
384
|
};
|
|
375
385
|
if (score >= 40)
|
|
376
386
|
return {
|
|
377
387
|
barColor: "bg-amber-500",
|
|
378
|
-
textColor: "text-amber-
|
|
388
|
+
textColor: "text-amber-700 dark:text-amber-400"
|
|
379
389
|
};
|
|
380
390
|
if (score >= 20)
|
|
381
391
|
return {
|
|
382
392
|
barColor: "bg-orange-500",
|
|
383
|
-
textColor: "text-orange-
|
|
393
|
+
textColor: "text-orange-700 dark:text-orange-400"
|
|
384
394
|
};
|
|
385
395
|
return {
|
|
386
396
|
barColor: "bg-gray-400",
|
|
387
|
-
textColor: "text-
|
|
397
|
+
textColor: "text-muted-foreground"
|
|
388
398
|
};
|
|
389
399
|
}
|
|
390
400
|
function EngagementScoreRenderer(props) {
|
|
@@ -411,7 +421,7 @@ function EmailRenderer(props) {
|
|
|
411
421
|
"a",
|
|
412
422
|
{
|
|
413
423
|
href: `mailto:${value}`,
|
|
414
|
-
className: "text-primary-
|
|
424
|
+
className: "text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
|
|
415
425
|
onClick: (e) => e.stopPropagation(),
|
|
416
426
|
children: [
|
|
417
427
|
/* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Mail, { className: "h-3 w-3 opacity-60" }),
|
|
@@ -428,7 +438,7 @@ function PhoneRenderer(props) {
|
|
|
428
438
|
"a",
|
|
429
439
|
{
|
|
430
440
|
href: `tel:${value}`,
|
|
431
|
-
className: "text-foreground hover:text-primary-
|
|
441
|
+
className: "text-foreground hover:text-primary-800 dark:hover:text-primary-400 inline-flex items-center gap-1.5",
|
|
432
442
|
onClick: (e) => e.stopPropagation(),
|
|
433
443
|
children: [
|
|
434
444
|
/* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Phone, { className: "h-3 w-3 text-green-500 opacity-70" }),
|
|
@@ -448,7 +458,7 @@ function DomainRenderer(props) {
|
|
|
448
458
|
href: url,
|
|
449
459
|
target: "_blank",
|
|
450
460
|
rel: "noopener noreferrer",
|
|
451
|
-
className: "text-primary-
|
|
461
|
+
className: "text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
|
|
452
462
|
onClick: (e) => e.stopPropagation(),
|
|
453
463
|
children: [
|
|
454
464
|
/* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Globe, { className: "h-3 w-3 opacity-60" }),
|
|
@@ -545,7 +555,7 @@ function BooleanRenderer(props) {
|
|
|
545
555
|
{
|
|
546
556
|
className: chunkOR5DRJCW_cjs.cn(
|
|
547
557
|
"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",
|
|
548
|
-
isTrue ? "bg-green-100 text-green-
|
|
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"
|
|
549
559
|
),
|
|
550
560
|
children: [
|
|
551
561
|
isTrue ? /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.CheckCircle, { className: "h-3 w-3" }) : /* @__PURE__ */ jsxRuntime.jsx(chunk4ZU53GNR_cjs.Clock, { className: "h-3 w-3" }),
|
|
@@ -577,7 +587,7 @@ function CompanyRenderer(props) {
|
|
|
577
587
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
578
588
|
"div",
|
|
579
589
|
{
|
|
580
|
-
className: "bg-primary-100 text-primary-
|
|
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",
|
|
581
591
|
style: { display: faviconUrl ? "none" : "flex" },
|
|
582
592
|
children: getInitials(value)
|
|
583
593
|
}
|
|
@@ -586,7 +596,7 @@ function CompanyRenderer(props) {
|
|
|
586
596
|
] });
|
|
587
597
|
}
|
|
588
598
|
function ProgressRenderer(props) {
|
|
589
|
-
const { value, barColor = "bg-primary-
|
|
599
|
+
const { value, barColor = "bg-primary-800", max = 100 } = props;
|
|
590
600
|
if (value == null) return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "--" });
|
|
591
601
|
const percentage = Math.min(100, Math.max(0, Number(value) / max * 100));
|
|
592
602
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 py-1", children: [
|
|
@@ -612,7 +622,7 @@ function TagsRenderer(props) {
|
|
|
612
622
|
value.slice(0, 3).map((tag, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
613
623
|
"span",
|
|
614
624
|
{
|
|
615
|
-
className: "inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium
|
|
625
|
+
className: "text-muted-foreground inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium dark:bg-gray-800",
|
|
616
626
|
children: tag
|
|
617
627
|
},
|
|
618
628
|
index
|
package/dist/ag-grid.cjs.map
CHANGED
|
@@ -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 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-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-muted-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"]}
|
package/dist/ag-grid.js
CHANGED
|
@@ -224,7 +224,7 @@ function getInitials(name) {
|
|
|
224
224
|
}
|
|
225
225
|
function getAvatarColor(name) {
|
|
226
226
|
const colors = [
|
|
227
|
-
"bg-primary-
|
|
227
|
+
"bg-primary-800",
|
|
228
228
|
"bg-green-600",
|
|
229
229
|
"bg-orange-600",
|
|
230
230
|
"bg-secondary-600",
|
|
@@ -250,32 +250,42 @@ var statusColors = {
|
|
|
250
250
|
active: {
|
|
251
251
|
label: "Active",
|
|
252
252
|
bgClass: "bg-green-100 dark:bg-green-900/30",
|
|
253
|
-
textClass: "text-green-
|
|
253
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
254
254
|
},
|
|
255
255
|
inactive: {
|
|
256
256
|
label: "Inactive",
|
|
257
257
|
bgClass: "bg-gray-200 dark:bg-gray-700",
|
|
258
|
-
textClass: "text-gray-600 dark:text-gray-
|
|
258
|
+
textClass: "text-gray-600 dark:text-gray-300"
|
|
259
|
+
},
|
|
260
|
+
closed_won: {
|
|
261
|
+
label: "Closed Won",
|
|
262
|
+
bgClass: "bg-green-100 dark:bg-green-900/30",
|
|
263
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
264
|
+
},
|
|
265
|
+
closed_lost: {
|
|
266
|
+
label: "Closed Lost",
|
|
267
|
+
bgClass: "bg-red-100 dark:bg-red-900/30",
|
|
268
|
+
textClass: "text-red-700 dark:text-red-400"
|
|
259
269
|
},
|
|
260
270
|
pending: {
|
|
261
271
|
label: "Pending",
|
|
262
272
|
bgClass: "bg-amber-100 dark:bg-amber-900/30",
|
|
263
|
-
textClass: "text-amber-
|
|
273
|
+
textClass: "text-amber-700 dark:text-amber-400"
|
|
264
274
|
},
|
|
265
275
|
new: {
|
|
266
276
|
label: "New",
|
|
267
277
|
bgClass: "bg-primary-100 dark:bg-primary-900/30",
|
|
268
|
-
textClass: "text-
|
|
278
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
269
279
|
},
|
|
270
280
|
verified: {
|
|
271
281
|
label: "Verified",
|
|
272
282
|
bgClass: "bg-green-100 dark:bg-green-900/30",
|
|
273
|
-
textClass: "text-green-
|
|
283
|
+
textClass: "text-green-700 dark:text-green-400"
|
|
274
284
|
},
|
|
275
285
|
flagged: {
|
|
276
286
|
label: "Flagged",
|
|
277
287
|
bgClass: "bg-red-100 dark:bg-red-900/30",
|
|
278
|
-
textClass: "text-red-
|
|
288
|
+
textClass: "text-red-700 dark:text-red-400"
|
|
279
289
|
}
|
|
280
290
|
};
|
|
281
291
|
function AvatarNameRenderer(props) {
|
|
@@ -292,8 +302,8 @@ function AvatarNameRenderer(props) {
|
|
|
292
302
|
const imageUrl = avatarUrl || faviconUrl;
|
|
293
303
|
if (isSystemValue) {
|
|
294
304
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 py-1", children: [
|
|
295
|
-
/* @__PURE__ */ 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
|
|
296
|
-
/* @__PURE__ */ jsx("span", { className: "truncate text-gray-400 italic
|
|
305
|
+
/* @__PURE__ */ 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" : "??" }),
|
|
306
|
+
/* @__PURE__ */ jsx("span", { className: "dark:text-muted-foreground truncate text-gray-400 italic", children: displayName })
|
|
297
307
|
] });
|
|
298
308
|
}
|
|
299
309
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 py-1", children: [
|
|
@@ -332,7 +342,7 @@ function StatusBadgeRenderer(props) {
|
|
|
332
342
|
const config = statusConfig[normalizedValue] || {
|
|
333
343
|
label: value,
|
|
334
344
|
bgClass: "bg-gray-200 dark:bg-gray-700",
|
|
335
|
-
textClass: "text-gray-600 dark:text-gray-
|
|
345
|
+
textClass: "text-gray-600 dark:text-gray-300"
|
|
336
346
|
};
|
|
337
347
|
return /* @__PURE__ */ jsx(
|
|
338
348
|
"span",
|
|
@@ -350,21 +360,21 @@ function getEngagementScoreColors(score) {
|
|
|
350
360
|
if (score >= 70)
|
|
351
361
|
return {
|
|
352
362
|
barColor: "bg-green-500",
|
|
353
|
-
textColor: "text-green-
|
|
363
|
+
textColor: "text-green-700 dark:text-green-400"
|
|
354
364
|
};
|
|
355
365
|
if (score >= 40)
|
|
356
366
|
return {
|
|
357
367
|
barColor: "bg-amber-500",
|
|
358
|
-
textColor: "text-amber-
|
|
368
|
+
textColor: "text-amber-700 dark:text-amber-400"
|
|
359
369
|
};
|
|
360
370
|
if (score >= 20)
|
|
361
371
|
return {
|
|
362
372
|
barColor: "bg-orange-500",
|
|
363
|
-
textColor: "text-orange-
|
|
373
|
+
textColor: "text-orange-700 dark:text-orange-400"
|
|
364
374
|
};
|
|
365
375
|
return {
|
|
366
376
|
barColor: "bg-gray-400",
|
|
367
|
-
textColor: "text-
|
|
377
|
+
textColor: "text-muted-foreground"
|
|
368
378
|
};
|
|
369
379
|
}
|
|
370
380
|
function EngagementScoreRenderer(props) {
|
|
@@ -391,7 +401,7 @@ function EmailRenderer(props) {
|
|
|
391
401
|
"a",
|
|
392
402
|
{
|
|
393
403
|
href: `mailto:${value}`,
|
|
394
|
-
className: "text-primary-
|
|
404
|
+
className: "text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
|
|
395
405
|
onClick: (e) => e.stopPropagation(),
|
|
396
406
|
children: [
|
|
397
407
|
/* @__PURE__ */ jsx(Mail, { className: "h-3 w-3 opacity-60" }),
|
|
@@ -408,7 +418,7 @@ function PhoneRenderer(props) {
|
|
|
408
418
|
"a",
|
|
409
419
|
{
|
|
410
420
|
href: `tel:${value}`,
|
|
411
|
-
className: "text-foreground hover:text-primary-
|
|
421
|
+
className: "text-foreground hover:text-primary-800 dark:hover:text-primary-400 inline-flex items-center gap-1.5",
|
|
412
422
|
onClick: (e) => e.stopPropagation(),
|
|
413
423
|
children: [
|
|
414
424
|
/* @__PURE__ */ jsx(Phone, { className: "h-3 w-3 text-green-500 opacity-70" }),
|
|
@@ -428,7 +438,7 @@ function DomainRenderer(props) {
|
|
|
428
438
|
href: url,
|
|
429
439
|
target: "_blank",
|
|
430
440
|
rel: "noopener noreferrer",
|
|
431
|
-
className: "text-primary-
|
|
441
|
+
className: "text-primary-800 dark:text-primary-400 inline-flex items-center gap-1.5 hover:underline",
|
|
432
442
|
onClick: (e) => e.stopPropagation(),
|
|
433
443
|
children: [
|
|
434
444
|
/* @__PURE__ */ jsx(Globe, { className: "h-3 w-3 opacity-60" }),
|
|
@@ -525,7 +535,7 @@ function BooleanRenderer(props) {
|
|
|
525
535
|
{
|
|
526
536
|
className: cn(
|
|
527
537
|
"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium",
|
|
528
|
-
isTrue ? "bg-green-100 text-green-
|
|
538
|
+
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"
|
|
529
539
|
),
|
|
530
540
|
children: [
|
|
531
541
|
isTrue ? /* @__PURE__ */ jsx(CheckCircle, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx(Clock, { className: "h-3 w-3" }),
|
|
@@ -557,7 +567,7 @@ function CompanyRenderer(props) {
|
|
|
557
567
|
/* @__PURE__ */ jsx(
|
|
558
568
|
"div",
|
|
559
569
|
{
|
|
560
|
-
className: "bg-primary-100 text-primary-
|
|
570
|
+
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",
|
|
561
571
|
style: { display: faviconUrl ? "none" : "flex" },
|
|
562
572
|
children: getInitials(value)
|
|
563
573
|
}
|
|
@@ -566,7 +576,7 @@ function CompanyRenderer(props) {
|
|
|
566
576
|
] });
|
|
567
577
|
}
|
|
568
578
|
function ProgressRenderer(props) {
|
|
569
|
-
const { value, barColor = "bg-primary-
|
|
579
|
+
const { value, barColor = "bg-primary-800", max = 100 } = props;
|
|
570
580
|
if (value == null) return /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "--" });
|
|
571
581
|
const percentage = Math.min(100, Math.max(0, Number(value) / max * 100));
|
|
572
582
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 py-1", children: [
|
|
@@ -592,7 +602,7 @@ function TagsRenderer(props) {
|
|
|
592
602
|
value.slice(0, 3).map((tag, index) => /* @__PURE__ */ jsx(
|
|
593
603
|
"span",
|
|
594
604
|
{
|
|
595
|
-
className: "inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium
|
|
605
|
+
className: "text-muted-foreground inline-flex items-center rounded-full bg-gray-100 px-2 py-0.5 text-xs font-medium dark:bg-gray-800",
|
|
596
606
|
children: tag
|
|
597
607
|
},
|
|
598
608
|
index
|