@boostyourleads/antigravity-sdk 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +11 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +18 -0
- package/dist/ui/GlassmorphicCard.d.ts +14 -0
- package/dist/ui/GlassmorphicCard.js +76 -0
- package/dist/ui/PremiumChart.d.ts +11 -0
- package/dist/ui/PremiumChart.js +64 -0
- package/dist/ui/PremiumMetricCard.d.ts +15 -0
- package/dist/ui/PremiumMetricCard.js +39 -0
- package/dist/ui/cn.d.ts +2 -0
- package/dist/ui/cn.js +8 -0
- package/package.json +11 -2
package/dist/cli.js
CHANGED
|
@@ -69,8 +69,18 @@ const handleLogin = async () => {
|
|
|
69
69
|
<div style="font-family: Outfit, sans-serif; background-color: #09090b; color: white; min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center;">
|
|
70
70
|
<h2 style="color: #10b981; margin-bottom: 8px;">Authentication Successful!</h2>
|
|
71
71
|
<p style="color: #a1a1aa; font-size: 14px; margin-bottom: 24px;">The Antigravity SDK has been configured on your local machine.</p>
|
|
72
|
-
<p style="color: #71717a; font-size: 11px;">
|
|
72
|
+
<p style="color: #71717a; font-size: 11px;">Redirecting back to BoostYourLeads...</p>
|
|
73
73
|
</div>
|
|
74
|
+
<script>
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
// Try closing the tab/window
|
|
77
|
+
window.close();
|
|
78
|
+
// Fallback to portal redirection if close is blocked by the browser
|
|
79
|
+
setTimeout(() => {
|
|
80
|
+
window.location.href = "${PORTAL_URL}";
|
|
81
|
+
}, 500);
|
|
82
|
+
}, 1500);
|
|
83
|
+
</script>
|
|
74
84
|
`);
|
|
75
85
|
console.log("✅ Successfully authenticated! Config saved to ~/.boostyourleads/config.json");
|
|
76
86
|
// Graceful shut down
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
18
|
};
|
|
@@ -92,3 +106,7 @@ class AntigravityAgent {
|
|
|
92
106
|
}
|
|
93
107
|
}
|
|
94
108
|
exports.AntigravityAgent = AntigravityAgent;
|
|
109
|
+
// UI Components Export
|
|
110
|
+
__exportStar(require("./ui/GlassmorphicCard"), exports);
|
|
111
|
+
__exportStar(require("./ui/PremiumMetricCard"), exports);
|
|
112
|
+
__exportStar(require("./ui/PremiumChart"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface GlassmorphicCardProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
className?: string;
|
|
5
|
+
glowColor?: "indigo" | "purple" | "emerald" | "rose" | "amber" | "blue" | "neutral";
|
|
6
|
+
hoverEffect?: boolean;
|
|
7
|
+
hoverVariant?: "3d" | "flat";
|
|
8
|
+
onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
|
|
9
|
+
contentClassName?: string;
|
|
10
|
+
style?: React.CSSProperties;
|
|
11
|
+
overflow?: "hidden" | "visible" | "auto";
|
|
12
|
+
}
|
|
13
|
+
export declare const GlassmorphicCard: ({ children, className, glowColor, hoverEffect, hoverVariant, onClick, contentClassName, style, overflow }: GlassmorphicCardProps) => React.JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.GlassmorphicCard = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const cn_1 = require("./cn");
|
|
8
|
+
const framer_motion_1 = require("framer-motion");
|
|
9
|
+
const GlassmorphicCard = ({ children, className, glowColor, hoverEffect = true, hoverVariant = "3d", onClick, contentClassName, style, overflow = "hidden" }) => {
|
|
10
|
+
const cardRef = (0, react_1.useRef)(null);
|
|
11
|
+
const [rotateX, setRotateX] = (0, react_1.useState)(0);
|
|
12
|
+
const [rotateY, setRotateY] = (0, react_1.useState)(0);
|
|
13
|
+
const [isHovered, setIsHovered] = (0, react_1.useState)(false);
|
|
14
|
+
const handleMouseMove = (e) => {
|
|
15
|
+
if (!hoverEffect || hoverVariant === "flat" || !cardRef.current)
|
|
16
|
+
return;
|
|
17
|
+
const rect = cardRef.current.getBoundingClientRect();
|
|
18
|
+
const width = rect.width;
|
|
19
|
+
const height = rect.height;
|
|
20
|
+
const mouseX = e.clientX - rect.left - width / 2;
|
|
21
|
+
const mouseY = e.clientY - rect.top - height / 2;
|
|
22
|
+
const rX = -(mouseY / (height / 2)) * 6;
|
|
23
|
+
const rY = (mouseX / (width / 2)) * 6;
|
|
24
|
+
setRotateX(rX);
|
|
25
|
+
setRotateY(rY);
|
|
26
|
+
};
|
|
27
|
+
const handleMouseEnter = () => {
|
|
28
|
+
if (!hoverEffect)
|
|
29
|
+
return;
|
|
30
|
+
setIsHovered(true);
|
|
31
|
+
};
|
|
32
|
+
const handleMouseLeave = () => {
|
|
33
|
+
if (!hoverEffect)
|
|
34
|
+
return;
|
|
35
|
+
setIsHovered(false);
|
|
36
|
+
setRotateX(0);
|
|
37
|
+
setRotateY(0);
|
|
38
|
+
};
|
|
39
|
+
const getGlowStyles = () => {
|
|
40
|
+
switch (glowColor) {
|
|
41
|
+
case "indigo":
|
|
42
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(99,102,241,0.12)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(99,102,241,0.25)] border-indigo-500/20 hover:border-indigo-500/30";
|
|
43
|
+
case "purple":
|
|
44
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(168,85,247,0.12)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(168,85,247,0.25)] border-purple-500/20 hover:border-purple-500/30";
|
|
45
|
+
case "emerald":
|
|
46
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(16,185,129,0.12)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(16,185,129,0.25)] border-emerald-500/20 hover:border-emerald-500/30";
|
|
47
|
+
case "rose":
|
|
48
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(244,63,94,0.12)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(244,63,94,0.25)] border-rose-500/20 hover:border-rose-500/30";
|
|
49
|
+
case "amber":
|
|
50
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(245,158,11,0.12)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(245,158,11,0.25)] border-amber-500/20 hover:border-amber-500/30";
|
|
51
|
+
case "blue":
|
|
52
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(59,130,246,0.12)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(59,130,246,0.25)] border-blue-500/20 hover:border-blue-500/30";
|
|
53
|
+
case "neutral":
|
|
54
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8),0_0_40px_-15px_rgba(255,255,255,0.06)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9),0_0_50px_-10px_rgba(255,255,255,0.15)] border-white/15 hover:border-white/25";
|
|
55
|
+
default:
|
|
56
|
+
return "shadow-[0_20px_50px_rgba(0,0,0,0.8)] hover:shadow-[0_30px_60px_rgba(0,0,0,0.9)] border-white/10 hover:border-white/20";
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const getTransform = () => {
|
|
60
|
+
if (!hoverEffect || !isHovered)
|
|
61
|
+
return "translateY(0px) scale(1)";
|
|
62
|
+
if (hoverVariant === "flat") {
|
|
63
|
+
return "translateY(-4px) scale(1.01)";
|
|
64
|
+
}
|
|
65
|
+
return `perspective(1000px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) translateY(-3px) scale(1)`;
|
|
66
|
+
};
|
|
67
|
+
return ((0, jsx_runtime_1.jsxs)(framer_motion_1.motion.div, { ref: cardRef, initial: { opacity: 0, y: 10 }, animate: { opacity: 1, y: 0 }, onClick: onClick, onMouseMove: handleMouseMove, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, className: (0, cn_1.cn)("rounded-[2rem] bg-[#0c0c0e]/85 backdrop-blur-2xl border transition-all duration-300 ease-out", getGlowStyles(), overflow === "hidden" ? "overflow-hidden" : "overflow-visible", className), style: {
|
|
68
|
+
...style,
|
|
69
|
+
transformStyle: hoverVariant === "3d" ? "preserve-3d" : undefined,
|
|
70
|
+
transform: getTransform()
|
|
71
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { className: "absolute inset-0 bg-gradient-to-br from-white/5 via-transparent to-transparent opacity-0 hover:opacity-100 transition-opacity duration-700 pointer-events-none" }), (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("relative z-10 transition-transform duration-300 ease-out", contentClassName), style: {
|
|
72
|
+
transform: isHovered && hoverVariant === "3d" ? "translateZ(20px)" : undefined,
|
|
73
|
+
transformStyle: hoverVariant === "3d" ? "preserve-3d" : undefined
|
|
74
|
+
}, children: children })] }));
|
|
75
|
+
};
|
|
76
|
+
exports.GlassmorphicCard = GlassmorphicCard;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface PremiumChartProps {
|
|
3
|
+
data: any[];
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
subtitle?: string;
|
|
8
|
+
glowColor?: "indigo" | "purple" | "emerald";
|
|
9
|
+
}
|
|
10
|
+
export declare const PremiumChart: ({ data, children, className, title, subtitle, glowColor }: PremiumChartProps) => React.JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.PremiumChart = void 0;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
|
+
const recharts_1 = require("recharts");
|
|
41
|
+
const cn_1 = require("./cn");
|
|
42
|
+
const framer_motion_1 = require("framer-motion");
|
|
43
|
+
const PremiumChart = ({ data, children, className, title, subtitle, glowColor = "indigo" }) => {
|
|
44
|
+
const containerRef = (0, react_1.useRef)(null);
|
|
45
|
+
const [dimensions, setDimensions] = (0, react_1.useState)({ width: 0, height: 0 });
|
|
46
|
+
const [isMeasured, setIsMeasured] = (0, react_1.useState)(false);
|
|
47
|
+
(0, react_1.useEffect)(() => {
|
|
48
|
+
if (!containerRef.current)
|
|
49
|
+
return;
|
|
50
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
51
|
+
if (!entries || entries.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
const entry = entries[0];
|
|
54
|
+
const { width, height } = entry.contentRect;
|
|
55
|
+
setDimensions({ width, height: height || 300 });
|
|
56
|
+
setIsMeasured(true);
|
|
57
|
+
});
|
|
58
|
+
resizeObserver.observe(containerRef.current);
|
|
59
|
+
return () => resizeObserver.disconnect();
|
|
60
|
+
}, []);
|
|
61
|
+
const aspect = dimensions.width > 0 ? dimensions.width / (dimensions.height || 300) : undefined;
|
|
62
|
+
return ((0, jsx_runtime_1.jsxs)(framer_motion_1.motion.div, { initial: { opacity: 0, y: 15 }, animate: { opacity: 1, y: 0 }, className: (0, cn_1.cn)("relative bg-[#0c0c0e]/85 backdrop-blur-2xl border border-white/5 rounded-[2.5rem] p-6 lg:p-8", "hover:border-white/10 transition-all duration-500", className), children: [(title || subtitle) && ((0, jsx_runtime_1.jsxs)("div", { className: "mb-6", children: [title && ((0, jsx_runtime_1.jsx)("h3", { className: "text-lg font-black text-white uppercase tracking-tight", children: title })), subtitle && ((0, jsx_runtime_1.jsx)("p", { className: "text-[10px] font-bold text-zinc-500 uppercase tracking-widest mt-1", children: subtitle }))] })), (0, jsx_runtime_1.jsx)("div", { ref: containerRef, className: "w-full relative min-h-[250px] flex flex-col", style: { height: "300px" }, children: isMeasured && dimensions.width > 0 && dimensions.height > 0 ? ((0, jsx_runtime_1.jsx)("div", { className: "flex-1 w-full h-full", children: (0, jsx_runtime_1.jsx)(recharts_1.ResponsiveContainer, { width: "100%", height: "100%", minWidth: 10, minHeight: 250, aspect: aspect, children: react_1.default.cloneElement(children, { data }) }) })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-full h-full flex items-center justify-center bg-zinc-900/5 rounded-2xl border border-dashed border-zinc-800/30", children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col items-center gap-2", children: [(0, jsx_runtime_1.jsx)("div", { className: "w-5 h-5 border-2 border-indigo-500/30 border-t-indigo-500 rounded-full animate-spin" }), (0, jsx_runtime_1.jsx)("span", { className: "text-[9px] font-black uppercase tracking-widest text-zinc-500", children: "Initializing Chart..." })] }) })) }), (0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("absolute top-0 right-0 w-32 h-32 blur-3xl rounded-full pointer-events-none opacity-20", glowColor === "indigo" && "bg-indigo-500", glowColor === "purple" && "bg-purple-500", glowColor === "emerald" && "bg-emerald-500") })] }));
|
|
63
|
+
};
|
|
64
|
+
exports.PremiumChart = PremiumChart;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { LucideIcon } from "lucide-react";
|
|
3
|
+
interface PremiumMetricCardProps {
|
|
4
|
+
title: string;
|
|
5
|
+
value: string | number;
|
|
6
|
+
change?: number;
|
|
7
|
+
icon?: LucideIcon;
|
|
8
|
+
trend?: "up" | "down" | "neutral";
|
|
9
|
+
positiveIsGood?: boolean;
|
|
10
|
+
glowColor?: "indigo" | "purple" | "emerald" | "rose" | "amber" | "blue";
|
|
11
|
+
delay?: number;
|
|
12
|
+
subtitle?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const PremiumMetricCard: React.FC<PremiumMetricCardProps>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.PremiumMetricCard = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const framer_motion_1 = require("framer-motion");
|
|
7
|
+
const lucide_react_1 = require("lucide-react");
|
|
8
|
+
const cn_1 = require("./cn");
|
|
9
|
+
const trendColors = {
|
|
10
|
+
up: "text-emerald-400 border-emerald-500/20 bg-emerald-500/5",
|
|
11
|
+
down: "text-rose-400 border-rose-500/20 bg-rose-500/5",
|
|
12
|
+
neutral: "text-zinc-500 border-white/5 bg-white/5"
|
|
13
|
+
};
|
|
14
|
+
const glowGradients = {
|
|
15
|
+
indigo: "from-indigo-500/10 to-purple-500/10",
|
|
16
|
+
purple: "from-purple-500/10 to-pink-500/10",
|
|
17
|
+
emerald: "from-emerald-500/10 to-green-500/10",
|
|
18
|
+
rose: "from-rose-500/10 to-pink-500/10",
|
|
19
|
+
amber: "from-amber-500/10 to-orange-500/10",
|
|
20
|
+
blue: "from-blue-500/10 to-indigo-500/10"
|
|
21
|
+
};
|
|
22
|
+
const PremiumMetricCard = ({ title, value, change, icon: Icon, trend = "neutral", positiveIsGood = true, glowColor = "indigo", delay = 0, subtitle }) => {
|
|
23
|
+
const lowerTitle = title.toLowerCase();
|
|
24
|
+
const isInverted = lowerTitle.includes("cpl") ||
|
|
25
|
+
lowerTitle.includes("cpc") ||
|
|
26
|
+
lowerTitle.includes("cps") ||
|
|
27
|
+
lowerTitle.includes("cost per") ||
|
|
28
|
+
lowerTitle.includes("age");
|
|
29
|
+
const effectivePositiveIsGood = positiveIsGood === false ? false : !isInverted;
|
|
30
|
+
const isGood = trend === "neutral" ? null : effectivePositiveIsGood ? trend === "up" : trend === "down";
|
|
31
|
+
return ((0, jsx_runtime_1.jsxs)(framer_motion_1.motion.div, { initial: { opacity: 0, y: 15 }, animate: { opacity: 1, y: 0 }, transition: { duration: 0.4, delay }, className: "group relative bg-[#0c0c0e]/85 backdrop-blur-2xl border border-white/5 rounded-[2rem] p-6 hover:border-white/10 transition-all duration-500 overflow-hidden", children: [(0, jsx_runtime_1.jsx)("div", { className: (0, cn_1.cn)("absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-500", "bg-gradient-to-br blur-3xl", glowGradients[glowColor]) }), (0, jsx_runtime_1.jsxs)("div", { className: "relative z-10 flex flex-col h-full min-h-[140px]", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-3 mb-auto", children: [Icon && ((0, jsx_runtime_1.jsx)("div", { className: "w-9 h-9 rounded-xl flex items-center justify-center bg-zinc-900 border border-white/5 shadow-2xl", children: (0, jsx_runtime_1.jsx)(Icon, { className: "w-4.5 h-4.5 text-white/50" }) })), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-0.5", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-[9px] font-black uppercase tracking-[0.25em] text-zinc-500 truncate", children: title }), subtitle && ((0, jsx_runtime_1.jsx)("p", { className: "text-[8px] font-black uppercase tracking-widest text-emerald-500/80 truncate", children: subtitle }))] })] }), (0, jsx_runtime_1.jsxs)("div", { className: "flex-1 flex flex-col items-start justify-end mt-4", children: [(0, jsx_runtime_1.jsx)("span", { className: "font-black tracking-tighter text-white leading-none transition-all", style: {
|
|
32
|
+
fontSize: `clamp(1.5rem, ${String(value).length > 8 ? "3vw" : "4.5vw"}, 2.25rem)`
|
|
33
|
+
}, children: value }), change !== undefined && ((0, jsx_runtime_1.jsxs)("div", { className: (0, cn_1.cn)("flex items-center gap-1 text-[10px] font-bold tracking-tight mt-3 px-2.5 py-0.5 rounded-full border", isGood === true
|
|
34
|
+
? trendColors.up
|
|
35
|
+
: isGood === false
|
|
36
|
+
? trendColors.down
|
|
37
|
+
: trendColors.neutral), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.TrendingUp, { className: (0, cn_1.cn)("w-3 h-3", trend === "down" && "rotate-180") }), change > 0 ? "+" : "", Math.round(change), "%"] }))] })] })] }));
|
|
38
|
+
};
|
|
39
|
+
exports.PremiumMetricCard = PremiumMetricCard;
|
package/dist/ui/cn.d.ts
ADDED
package/dist/ui/cn.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cn = cn;
|
|
4
|
+
const clsx_1 = require("clsx");
|
|
5
|
+
const tailwind_merge_1 = require("tailwind-merge");
|
|
6
|
+
function cn(...inputs) {
|
|
7
|
+
return (0, tailwind_merge_1.twMerge)((0, clsx_1.clsx)(inputs));
|
|
8
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@boostyourleads/antigravity-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "BoostYourLeads SDK integration for custom AI agents and Antigravity.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,10 +15,19 @@
|
|
|
15
15
|
"build": "tsc"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"axios": "^1.6.0"
|
|
18
|
+
"axios": "^1.6.0",
|
|
19
|
+
"clsx": "^2.1.1",
|
|
20
|
+
"framer-motion": "^12.42.0",
|
|
21
|
+
"lucide-react": "^1.21.0",
|
|
22
|
+
"react": "^19.2.4",
|
|
23
|
+
"react-dom": "^19.2.4",
|
|
24
|
+
"recharts": "^3.9.0",
|
|
25
|
+
"tailwind-merge": "^3.6.0"
|
|
19
26
|
},
|
|
20
27
|
"devDependencies": {
|
|
21
28
|
"@types/node": "^20.0.0",
|
|
29
|
+
"@types/react": "^19.0.0",
|
|
30
|
+
"@types/react-dom": "^19.0.0",
|
|
22
31
|
"typescript": "^5.0.0"
|
|
23
32
|
}
|
|
24
33
|
}
|