version-pill-react 1.2.6 β†’ 1.2.7

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport clsx from \"clsx\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface Version {\n version: string;\n type: \"major\" | \"minor\" | \"patch\";\n title: string;\n description?: string | null;\n emoji?: string | null;\n features?: string[];\n date: string | number;\n tasks?: { title: string; type: string }[];\n}\n\nexport interface RoadmapTask {\n id: string;\n title: string;\n type: string;\n priority: string;\n column: string;\n isPublic?: boolean;\n}\n\nexport interface Idea {\n id: string;\n title: string;\n description?: string;\n status: string;\n votes: number;\n hasVoted?: boolean;\n}\n\nexport interface ProjectInfo {\n name: string;\n slug: string;\n icon?: string | null;\n currentVersion?: string | null;\n}\n\nexport interface ChangelogAPIResponse {\n project: ProjectInfo;\n changelog: Version[];\n}\n\nexport interface RoadmapAPIResponse {\n project: ProjectInfo;\n tasks: RoadmapTask[];\n}\n\nexport interface BadgeAPIResponse {\n version: string | null;\n name: string;\n slug: string;\n}\n\nexport interface VersionPillConfig {\n projectId: string;\n baseUrl?: string;\n}\n\nexport type BadgeStyle = \"dot\" | \"pill\" | \"minimal\" | \"glass\" | \"gradient\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\nexport type ModalTab = \"changelog\" | \"roadmap\" | \"ideas\";\n\nexport interface VersionPillProps extends VersionPillConfig {\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"inline\";\n className?: string;\n theme?: \"light\" | \"dark\" | \"auto\";\n style?: BadgeStyle;\n size?: BadgeSize;\n showBranding?: boolean;\n accent?: \"green\" | \"blue\" | \"purple\" | \"orange\" | \"neutral\";\n onNewVersion?: (version: Version) => void;\n onClick?: () => void;\n}\n\nexport interface ChangelogProps extends VersionPillConfig {\n maxHeight?: number;\n theme?: \"light\" | \"dark\" | \"auto\";\n className?: string;\n}\n\nexport interface RoadmapProps extends VersionPillConfig {\n maxHeight?: number;\n theme?: \"light\" | \"dark\" | \"auto\";\n className?: string;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst DEFAULT_BASE_URL = \"https://www.versionpill.com\";\n\nconst ACCENT_COLORS = {\n green: {\n light: { bg: \"rgba(34,197,94,0.1)\", border: \"rgba(34,197,94,0.25)\", text: \"#16a34a\", dot: \"#22c55e\" },\n dark: { bg: \"rgba(34,197,94,0.15)\", border: \"rgba(34,197,94,0.3)\", text: \"#4ade80\", dot: \"#22c55e\" },\n },\n blue: {\n light: { bg: \"rgba(59,130,246,0.1)\", border: \"rgba(59,130,246,0.25)\", text: \"#2563eb\", dot: \"#3b82f6\" },\n dark: { bg: \"rgba(59,130,246,0.15)\", border: \"rgba(59,130,246,0.3)\", text: \"#60a5fa\", dot: \"#3b82f6\" },\n },\n purple: {\n light: { bg: \"rgba(147,51,234,0.1)\", border: \"rgba(147,51,234,0.25)\", text: \"#7c3aed\", dot: \"#a855f7\" },\n dark: { bg: \"rgba(147,51,234,0.15)\", border: \"rgba(147,51,234,0.3)\", text: \"#c084fc\", dot: \"#a855f7\" },\n },\n orange: {\n light: { bg: \"rgba(249,115,22,0.1)\", border: \"rgba(249,115,22,0.25)\", text: \"#ea580c\", dot: \"#f97316\" },\n dark: { bg: \"rgba(249,115,22,0.15)\", border: \"rgba(249,115,22,0.3)\", text: \"#fb923c\", dot: \"#f97316\" },\n },\n neutral: {\n light: { bg: \"rgba(0,0,0,0.05)\", border: \"rgba(0,0,0,0.1)\", text: \"#52525b\", dot: \"#71717a\" },\n dark: { bg: \"rgba(255,255,255,0.08)\", border: \"rgba(255,255,255,0.12)\", text: \"#a1a1aa\", dot: \"#71717a\" },\n },\n};\n\nconst SIZE_CONFIG = {\n sm: { height: 22, padding: \"0 8px\", gap: 4, font: 10, dotSize: 5 },\n md: { height: 26, padding: \"0 10px\", gap: 5, font: 11, dotSize: 6 },\n lg: { height: 30, padding: \"0 12px\", gap: 6, font: 12, dotSize: 7 },\n};\n\nconst TYPE_COLORS: Record<string, string> = {\n feature: \"#a855f7\",\n bug: \"#ef4444\",\n improvement: \"#3b82f6\",\n chore: \"#71717a\",\n};\n\nconst COLUMN_LABELS: Record<string, string> = {\n backlog: \"Backlog\",\n todo: \"Planned\",\n \"in-progress\": \"In Progress\",\n done: \"Shipped\",\n};\n\n// =============================================================================\n// HOOKS\n// =============================================================================\n\nfunction useTheme(theme: \"light\" | \"dark\" | \"auto\"): \"light\" | \"dark\" {\n const [resolved, setResolved] = useState<\"light\" | \"dark\">(\"light\");\n\n useEffect(() => {\n if (theme === \"auto\") {\n const isDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n setResolved(isDark ? \"dark\" : \"light\");\n\n const listener = (e: MediaQueryListEvent) => setResolved(e.matches ? \"dark\" : \"light\");\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n mq.addEventListener(\"change\", listener);\n return () => mq.removeEventListener(\"change\", listener);\n } else {\n setResolved(theme);\n }\n }, [theme]);\n\n return resolved;\n}\n\n// =============================================================================\n// VERSION PILL COMPONENT (with full modal)\n// =============================================================================\n\nexport function VersionPill({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n position = \"inline\",\n className,\n theme = \"auto\",\n style = \"glass\",\n size = \"md\",\n showBranding = true,\n accent = \"green\",\n onNewVersion,\n onClick,\n}: VersionPillProps) {\n const [project, setProject] = useState<ProjectInfo | null>(null);\n const [versions, setVersions] = useState<Version[]>([]);\n const [roadmapTasks, setRoadmapTasks] = useState<RoadmapTask[]>([]);\n const [ideas, setIdeas] = useState<Idea[]>([]);\n const [loading, setLoading] = useState(true);\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<ModalTab>(\"changelog\");\n const [hasNewVersion, setHasNewVersion] = useState(false);\n\n const resolvedTheme = useTheme(theme);\n const isLight = resolvedTheme === \"light\";\n const sizeConfig = SIZE_CONFIG[size];\n\n // Fetch version from badge API\n const fetchVersion = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/badge/${projectId}`);\n if (!response.ok) {\n setLoading(false);\n return;\n }\n const data: BadgeAPIResponse = await response.json();\n if (data.version) {\n setProject({ name: data.name, slug: data.slug, currentVersion: data.version });\n const storedVersion = localStorage.getItem(`vp_${projectId}_seen`);\n if (data.version !== storedVersion) {\n setHasNewVersion(true);\n }\n }\n } catch {\n // Silently fail\n } finally {\n setLoading(false);\n }\n }, [projectId, baseUrl]);\n\n // Fetch changelog\n const fetchChangelog = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/changelog/${projectId}?limit=10`);\n if (!response.ok) return;\n const data: ChangelogAPIResponse = await response.json();\n setVersions(data.changelog || []);\n setProject(data.project);\n if (data.changelog && data.changelog.length > 0) {\n const storedVersion = localStorage.getItem(`vp_${projectId}_seen`);\n if (data.changelog[0].version !== storedVersion) {\n setHasNewVersion(true);\n onNewVersion?.(data.changelog[0]);\n }\n }\n } catch {\n // Silently fail\n }\n }, [projectId, baseUrl, onNewVersion]);\n\n // Fetch roadmap\n const fetchRoadmap = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/roadmap/${projectId}`);\n if (!response.ok) return;\n const data: RoadmapAPIResponse = await response.json();\n setRoadmapTasks(data.tasks || []);\n } catch {\n // Silently fail\n }\n }, [projectId, baseUrl]);\n\n // Fetch ideas (silently fails if API unavailable)\n const fetchIdeas = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/ideas/${projectId}`);\n if (!response.ok) return;\n const data = await response.json();\n setIdeas(data.ideas || []);\n } catch {\n // Silently fail - ideas API might not exist\n }\n }, [projectId, baseUrl]);\n\n useEffect(() => {\n fetchVersion();\n }, [fetchVersion]);\n\n const handleOpen = () => {\n if (onClick) {\n onClick();\n return;\n }\n setIsOpen(true);\n fetchChangelog();\n fetchRoadmap();\n fetchIdeas();\n if (project?.currentVersion) {\n localStorage.setItem(`vp_${projectId}_seen`, project.currentVersion);\n setHasNewVersion(false);\n }\n };\n\n const currentVersion = project?.currentVersion;\n\n const positionStyles: Record<string, string> = {\n \"top-left\": \"fixed top-4 left-4 z-[9999]\",\n \"top-right\": \"fixed top-4 right-4 z-[9999]\",\n \"bottom-left\": \"fixed bottom-4 left-4 z-[9999]\",\n \"bottom-right\": \"fixed bottom-4 right-4 z-[9999]\",\n inline: \"\",\n };\n\n // Get badge style based on style prop\n const getBadgeStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: sizeConfig.gap,\n height: sizeConfig.height,\n padding: sizeConfig.padding,\n fontSize: sizeConfig.font,\n fontFamily: \"ui-monospace, monospace\",\n fontWeight: 600,\n borderRadius: 999,\n cursor: \"pointer\",\n transition: \"all 150ms ease\",\n outline: \"none\",\n };\n\n if (style === \"gradient\") {\n return {\n ...base,\n background: \"linear-gradient(135deg, #22c55e 0%, #16a34a 100%)\",\n border: \"none\",\n color: \"#fff\",\n boxShadow: \"0 2px 8px rgba(34,197,94,0.3)\",\n };\n }\n\n // Glass style (default)\n return {\n ...base,\n background: isLight\n ? \"rgba(34, 197, 94, 0.12)\"\n : \"rgba(34, 197, 94, 0.18)\",\n backdropFilter: \"blur(8px)\",\n WebkitBackdropFilter: \"blur(8px)\",\n border: isLight\n ? \"1px solid rgba(34, 197, 94, 0.25)\"\n : \"1px solid rgba(34, 197, 94, 0.35)\",\n color: isLight ? \"#16a34a\" : \"#4ade80\",\n boxShadow: isLight\n ? \"0 2px 8px rgba(34, 197, 94, 0.15), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 2px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.1)\",\n };\n };\n\n const getDotStyle = (): React.CSSProperties => ({\n width: sizeConfig.dotSize,\n height: sizeConfig.dotSize,\n borderRadius: \"50%\",\n background: style === \"gradient\" ? \"#fff\" : \"#22c55e\",\n boxShadow: style === \"gradient\"\n ? \"0 0 6px rgba(255,255,255,0.8)\"\n : \"0 0 6px rgba(34,197,94,0.6)\",\n flexShrink: 0,\n });\n\n // Loading state\n if (loading) {\n const loadingStyle = getBadgeStyle();\n return (\n <div className={clsx(positionStyles[position], className)} style={{ display: \"inline-flex\" }}>\n <span style={{ ...loadingStyle, opacity: 0.6, cursor: \"default\" }}>\n <span style={{ ...getDotStyle(), opacity: 0.6 }} />\n <span style={{\n width: 32,\n height: sizeConfig.font,\n background: style === \"gradient\" ? \"rgba(255,255,255,0.3)\" : \"rgba(34,197,94,0.3)\",\n borderRadius: 2\n }} />\n </span>\n </div>\n );\n }\n\n if (!currentVersion) return null;\n\n // Render the badge\n const renderBadge = () => {\n const badgeStyle = getBadgeStyle();\n const dotStyle = getDotStyle();\n\n return (\n <button\n onClick={handleOpen}\n style={badgeStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = \"scale(1.02)\";\n e.currentTarget.style.boxShadow = style === \"gradient\"\n ? \"0 4px 12px rgba(34,197,94,0.4)\"\n : isLight\n ? \"0 4px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 4px 16px rgba(34, 197, 94, 0.35), inset 0 1px 0 rgba(255,255,255,0.1)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = \"scale(1)\";\n e.currentTarget.style.boxShadow = style === \"gradient\"\n ? \"0 2px 8px rgba(34,197,94,0.3)\"\n : isLight\n ? \"0 2px 8px rgba(34, 197, 94, 0.15), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 2px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.1)\";\n }}\n >\n <span style={dotStyle} />\n <span>v{currentVersion}</span>\n {hasNewVersion && (\n <span\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: \"#fbbf24\",\n marginLeft: 2,\n }}\n />\n )}\n </button>\n );\n };\n\n // Safe arrays\n const versionsArray = Array.isArray(versions) ? versions : [];\n const tasksArray = Array.isArray(roadmapTasks) ? roadmapTasks : [];\n const ideasArray = Array.isArray(ideas) ? ideas : [];\n\n // Group roadmap tasks by column\n const groupedTasks = tasksArray.reduce((acc, task) => {\n const col = task.column || \"backlog\";\n if (!acc[col]) acc[col] = [];\n acc[col].push(task);\n return acc;\n }, {} as Record<string, RoadmapTask[]>);\n\n return (\n <>\n <div className={clsx(positionStyles[position], className)} style={{ display: \"inline-flex\" }}>\n {renderBadge()}\n </div>\n\n {isOpen && (\n <div style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: \"100vw\",\n height: \"100vh\",\n zIndex: 2147483647,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 20,\n boxSizing: \"border-box\",\n }}>\n {/* Backdrop */}\n <div\n onClick={() => setIsOpen(false)}\n style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n width: \"100vw\",\n height: \"100vh\",\n background: isLight ? \"rgba(0,0,0,0.5)\" : \"rgba(0,0,0,0.7)\",\n backdropFilter: \"blur(4px)\",\n WebkitBackdropFilter: \"blur(4px)\",\n }}\n />\n\n {/* Modal Panel */}\n <div\n style={{\n position: \"relative\",\n zIndex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n maxWidth: 400,\n maxHeight: \"min(480px, 70vh)\",\n borderRadius: 12,\n boxShadow: isLight\n ? \"0 20px 40px -10px rgba(0,0,0,0.15), 0 0 0 1px rgba(0,0,0,0.05)\"\n : \"0 20px 40px -10px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.1)\",\n background: isLight ? \"#fff\" : \"#1a1a1a\",\n overflow: \"hidden\",\n }}\n >\n {/* Header - Fixed height */}\n <div\n style={{\n flexShrink: 0,\n padding: \"14px 16px\",\n borderBottom: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n {project?.icon && <span style={{ fontSize: 18 }}>{project.icon}</span>}\n <div>\n <h2 style={{ fontWeight: 600, fontSize: 15, color: isLight ? \"#18181b\" : \"#fff\", margin: 0 }}>\n {project?.name || \"What's New\"}\n </h2>\n <p style={{ fontSize: 11, color: isLight ? \"#71717a\" : \"#a1a1aa\", margin: 0 }}>\n v{currentVersion}\n </p>\n </div>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n style={{\n width: 28,\n height: 28,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 6,\n background: isLight ? \"#f5f5f5\" : \"#2a2a2a\",\n border: \"none\",\n cursor: \"pointer\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n transition: \"background 150ms\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.background = isLight ? \"#e5e5e5\" : \"#3a3a3a\"}\n onMouseLeave={(e) => e.currentTarget.style.background = isLight ? \"#f5f5f5\" : \"#2a2a2a\"}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Tabs - Fixed height */}\n <div\n style={{\n flexShrink: 0,\n display: \"flex\",\n gap: 2,\n padding: \"8px 12px\",\n borderBottom: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fafafa\" : \"#151515\",\n }}\n >\n {([\"changelog\", \"roadmap\", \"ideas\"] as ModalTab[]).map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n padding: \"6px 10px\",\n borderRadius: 6,\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n background: activeTab === tab\n ? (isLight ? \"#fff\" : \"#2a2a2a\")\n : \"transparent\",\n color: activeTab === tab\n ? (isLight ? \"#18181b\" : \"#fff\")\n : (isLight ? \"#71717a\" : \"#71717a\"),\n boxShadow: activeTab === tab\n ? (isLight ? \"0 1px 2px rgba(0,0,0,0.05)\" : \"0 1px 2px rgba(0,0,0,0.2)\")\n : \"none\",\n transition: \"all 150ms\",\n }}\n >\n {tab === \"changelog\" && \"Changelog\"}\n {tab === \"roadmap\" && \"Roadmap\"}\n {tab === \"ideas\" && \"Ideas\"}\n </button>\n ))}\n </div>\n\n {/* Content - Scrollable, takes remaining space */}\n <div style={{ flex: 1, overflowY: \"auto\", padding: 12, minHeight: 0 }}>\n {/* Changelog Tab */}\n {activeTab === \"changelog\" && (\n <div>\n {versionsArray.length === 0 ? (\n <div style={{ textAlign: \"center\", padding: 30, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <div style={{ fontSize: 24, marginBottom: 6 }}>πŸš€</div>\n <div style={{ fontSize: 13 }}>No releases yet</div>\n </div>\n ) : (\n versionsArray.slice(0, 5).map((version, idx) => (\n <div key={idx} style={{ marginBottom: 12, paddingBottom: 12, borderBottom: idx < versionsArray.length - 1 && idx < 4 ? `1px solid ${isLight ? \"#f0f0f0\" : \"#252525\"}` : \"none\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, marginBottom: 3 }}>\n <span style={{ fontSize: 14 }}>{version.emoji || \"πŸ“¦\"}</span>\n <span style={{ fontWeight: 600, fontSize: 13, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {version.title}\n </span>\n <span\n style={{\n padding: \"1px 5px\",\n fontSize: 9,\n fontWeight: 500,\n borderRadius: 3,\n background: version.type === \"major\" ? \"#f3e8ff\" : version.type === \"minor\" ? \"#dbeafe\" : (isLight ? \"#f4f4f5\" : \"#2a2a2a\"),\n color: version.type === \"major\" ? \"#7c3aed\" : version.type === \"minor\" ? \"#2563eb\" : (isLight ? \"#52525b\" : \"#a1a1aa\"),\n }}\n >\n {version.type}\n </span>\n </div>\n <div style={{ fontSize: 11, color: isLight ? \"#71717a\" : \"#71717a\", marginBottom: 6 }}>\n v{version.version} Β· {new Date(version.date).toLocaleDateString()}\n </div>\n {version.description && (\n <p style={{ fontSize: 12, color: isLight ? \"#52525b\" : \"#a1a1aa\", margin: \"0 0 6px 0\", lineHeight: 1.5 }}>\n {version.description}\n </p>\n )}\n {version.features && version.features.length > 0 && (\n <ul style={{ margin: 0, paddingLeft: 0, listStyle: \"none\" }}>\n {version.features.slice(0, 4).map((feature, i) => (\n <li key={i} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 6, fontSize: 12, color: isLight ? \"#52525b\" : \"#a1a1aa\", marginBottom: 2, lineHeight: 1.4 }}>\n <span style={{ color: \"#22c55e\", fontSize: 11 }}>βœ“</span>\n {feature}\n </li>\n ))}\n {version.features.length > 4 && (\n <li style={{ fontSize: 11, color: isLight ? \"#a1a1aa\" : \"#525252\", marginTop: 2 }}>\n +{version.features.length - 4} more...\n </li>\n )}\n </ul>\n )}\n </div>\n ))\n )}\n </div>\n )}\n\n {/* Roadmap Tab */}\n {activeTab === \"roadmap\" && (\n <div>\n {Object.keys(groupedTasks).length === 0 ? (\n <div style={{ textAlign: \"center\", padding: 30, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <div style={{ fontSize: 24, marginBottom: 6 }}>πŸ—ΊοΈ</div>\n <div style={{ fontSize: 13 }}>No public roadmap items</div>\n </div>\n ) : (\n [\"in-progress\", \"todo\", \"backlog\"].map((col) => {\n const tasks = groupedTasks[col];\n if (!tasks || tasks.length === 0) return null;\n return (\n <div key={col} style={{ marginBottom: 12 }}>\n <h3 style={{ fontSize: 10, fontWeight: 600, color: isLight ? \"#a1a1aa\" : \"#71717a\", marginBottom: 6, textTransform: \"uppercase\", letterSpacing: \"0.5px\" }}>\n {COLUMN_LABELS[col] || col} ({tasks.length})\n </h3>\n {tasks.slice(0, 4).map((task) => (\n <div\n key={task.id}\n style={{\n padding: \"8px 10px\",\n marginBottom: 4,\n borderRadius: 5,\n background: isLight ? \"#f5f5f5\" : \"#252525\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <span\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: TYPE_COLORS[task.type] || \"#71717a\",\n flexShrink: 0,\n }}\n />\n <span style={{ fontSize: 12, color: isLight ? \"#18181b\" : \"#fff\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {task.title}\n </span>\n </div>\n </div>\n ))}\n {tasks.length > 4 && (\n <div style={{ fontSize: 10, color: isLight ? \"#a1a1aa\" : \"#525252\", marginTop: 4 }}>\n +{tasks.length - 4} more...\n </div>\n )}\n </div>\n );\n })\n )}\n </div>\n )}\n\n {/* Ideas Tab */}\n {activeTab === \"ideas\" && (\n <div>\n {ideasArray.length === 0 ? (\n <div style={{ textAlign: \"center\", padding: 30, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <div style={{ fontSize: 24, marginBottom: 6 }}>πŸ’‘</div>\n <div style={{ fontSize: 13 }}>No feature requests yet</div>\n </div>\n ) : (\n ideasArray.slice(0, 5).map((idea) => (\n <div\n key={idea.id}\n style={{\n padding: 10,\n marginBottom: 6,\n borderRadius: 6,\n background: isLight ? \"#f5f5f5\" : \"#252525\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 10,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"3px 6px\",\n borderRadius: 4,\n background: isLight ? \"#fff\" : \"#1a1a1a\",\n minWidth: 32,\n }}\n >\n <span style={{ fontSize: 12, fontWeight: 600, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {idea.votes}\n </span>\n <span style={{ fontSize: 9, color: isLight ? \"#71717a\" : \"#71717a\" }}>votes</span>\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 12, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\", marginBottom: 2 }}>\n {idea.title}\n </div>\n {idea.description && (\n <div style={{ fontSize: 11, color: isLight ? \"#71717a\" : \"#71717a\", overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {idea.description.slice(0, 80)}\n </div>\n )}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n\n {/* Footer - Fixed height */}\n <div\n style={{\n flexShrink: 0,\n padding: \"10px 12px\",\n borderTop: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fafafa\" : \"#151515\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n {showBranding && (\n <a\n href=\"https://versionpill.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: 10, color: isLight ? \"#a1a1aa\" : \"#525252\", textDecoration: \"none\" }}\n >\n Powered by Version Pill\n </a>\n )}\n <a\n href={`${baseUrl}/${projectId}/${activeTab === \"ideas\" ? \"feature-requests\" : activeTab}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n padding: \"5px 10px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 5,\n background: \"#22c55e\",\n color: \"#fff\",\n textDecoration: \"none\",\n transition: \"background 150ms\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.background = \"#16a34a\"}\n onMouseLeave={(e) => e.currentTarget.style.background = \"#22c55e\"}\n >\n View All β†’\n </a>\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\n// =============================================================================\n// VERSION BADGE COMPONENT (No Modal - just badge)\n// =============================================================================\n\nexport interface VersionBadgeProps {\n projectId: string;\n baseUrl?: string;\n theme?: \"light\" | \"dark\" | \"auto\";\n style?: BadgeStyle;\n size?: BadgeSize;\n accent?: \"green\" | \"blue\" | \"purple\" | \"orange\" | \"neutral\";\n className?: string;\n href?: string;\n}\n\nexport function VersionBadge({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n theme = \"auto\",\n style = \"glass\",\n size = \"md\",\n accent = \"green\",\n className,\n href,\n}: VersionBadgeProps) {\n const [version, setVersion] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n\n const resolvedTheme = useTheme(theme);\n const isLight = resolvedTheme === \"light\";\n const colors = ACCENT_COLORS[accent][isLight ? \"light\" : \"dark\"];\n const sizeConfig = SIZE_CONFIG[size];\n\n useEffect(() => {\n fetch(`${baseUrl}/api/badge/${projectId}`)\n .then((res) => res.json())\n .then((data) => setVersion(data.version))\n .catch(() => setVersion(null))\n .finally(() => setLoading(false));\n }, [projectId, baseUrl]);\n\n // Style configurations\n const getStyleConfig = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: sizeConfig.gap,\n height: sizeConfig.height,\n padding: sizeConfig.padding,\n fontSize: sizeConfig.font,\n fontFamily: \"ui-monospace, monospace\",\n fontWeight: 600,\n borderRadius: 999,\n textDecoration: \"none\",\n transition: \"all 150ms ease\",\n cursor: \"pointer\",\n };\n\n switch (style) {\n case \"glass\":\n return {\n ...base,\n background: isLight\n ? \"rgba(34, 197, 94, 0.12)\"\n : \"rgba(34, 197, 94, 0.18)\",\n backdropFilter: \"blur(8px)\",\n WebkitBackdropFilter: \"blur(8px)\",\n border: isLight\n ? \"1px solid rgba(34, 197, 94, 0.25)\"\n : \"1px solid rgba(34, 197, 94, 0.35)\",\n color: isLight ? \"#16a34a\" : \"#4ade80\",\n boxShadow: isLight\n ? \"0 2px 8px rgba(34, 197, 94, 0.15), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 2px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.1)\",\n };\n case \"gradient\":\n return {\n ...base,\n background: \"linear-gradient(135deg, #22c55e 0%, #16a34a 100%)\",\n color: \"#fff\",\n boxShadow: \"0 2px 8px rgba(34,197,94,0.3)\",\n };\n case \"pill\":\n return {\n ...base,\n background: colors.bg,\n border: `1px solid ${colors.border}`,\n color: colors.text,\n };\n case \"minimal\":\n return {\n ...base,\n background: \"transparent\",\n color: colors.text,\n padding: \"0 4px\",\n };\n case \"dot\":\n return {\n ...base,\n background: colors.bg,\n border: `1px solid ${colors.border}`,\n color: colors.text,\n };\n default:\n return {\n ...base,\n background: isLight\n ? \"rgba(34, 197, 94, 0.12)\"\n : \"rgba(34, 197, 94, 0.18)\",\n backdropFilter: \"blur(8px)\",\n border: isLight\n ? \"1px solid rgba(34, 197, 94, 0.25)\"\n : \"1px solid rgba(34, 197, 94, 0.35)\",\n color: isLight ? \"#16a34a\" : \"#4ade80\",\n boxShadow: \"0 2px 8px rgba(34, 197, 94, 0.15)\",\n };\n }\n };\n\n const getDotStyle = (): React.CSSProperties => {\n const isGlassOrPill = style === \"glass\" || style === \"pill\" || style === \"dot\";\n return {\n width: sizeConfig.dotSize,\n height: sizeConfig.dotSize,\n borderRadius: \"50%\",\n background: style === \"gradient\" ? \"#fff\" : \"#22c55e\",\n boxShadow: style === \"gradient\"\n ? \"0 0 6px rgba(255,255,255,0.8)\"\n : \"0 0 6px rgba(34,197,94,0.6)\",\n flexShrink: 0,\n };\n };\n\n if (loading) {\n const loadingStyle = getStyleConfig();\n return (\n <span className={className} style={{ ...loadingStyle, opacity: 0.6 }}>\n <span style={{ ...getDotStyle(), opacity: 0.6 }} />\n <span style={{\n width: 32,\n height: sizeConfig.font,\n background: style === \"gradient\" ? \"rgba(255,255,255,0.3)\" : \"rgba(34,197,94,0.3)\",\n borderRadius: 2\n }} />\n </span>\n );\n }\n\n if (!version) return null;\n\n const badgeStyle = getStyleConfig();\n const dotStyle = getDotStyle();\n\n const content = (\n <>\n <span style={dotStyle} />\n <span>v{version}</span>\n </>\n );\n\n if (href) {\n return (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={className} style={badgeStyle}>\n {content}\n </a>\n );\n }\n\n return (\n <span className={className} style={badgeStyle}>\n {content}\n </span>\n );\n}\n\n// =============================================================================\n// USE VERSION HOOK\n// =============================================================================\n\nexport interface UseVersionOptions {\n projectId: string;\n baseUrl?: string;\n refetchInterval?: number;\n}\n\nexport interface UseVersionResult {\n version: string | null;\n name: string | null;\n slug: string | null;\n loading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\nconst versionCache: Record<string, { version: string | null; name: string | null; slug: string | null }> = {};\n\nexport function useVersion({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n refetchInterval = 0,\n}: UseVersionOptions): UseVersionResult {\n const cacheKey = `${baseUrl}:${projectId}`;\n const cached = versionCache[cacheKey];\n\n const [version, setVersion] = useState<string | null>(cached?.version ?? null);\n const [name, setName] = useState<string | null>(cached?.name ?? null);\n const [slug, setSlug] = useState<string | null>(cached?.slug ?? null);\n const [loading, setLoading] = useState(!cached);\n const [error, setError] = useState<string | null>(null);\n\n const fetchVersion = useCallback(async () => {\n if (typeof window === \"undefined\") return;\n\n try {\n setError(null);\n const response = await fetch(`${baseUrl}/api/badge/${projectId}`);\n if (!response.ok) throw new Error(\"Failed to fetch version\");\n\n const data: BadgeAPIResponse = await response.json();\n versionCache[cacheKey] = { version: data.version, name: data.name, slug: data.slug };\n\n setVersion(data.version);\n setName(data.name);\n setSlug(data.slug);\n } catch (err: any) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n }, [projectId, baseUrl, cacheKey]);\n\n useEffect(() => {\n if (!cached) {\n fetchVersion();\n }\n }, [fetchVersion, cached]);\n\n useEffect(() => {\n if (refetchInterval > 0) {\n const interval = setInterval(fetchVersion, refetchInterval);\n return () => clearInterval(interval);\n }\n }, [refetchInterval, fetchVersion]);\n\n return { version, name, slug, loading, error, refetch: fetchVersion };\n}\n\n// =============================================================================\n// EMBED COMPONENTS\n// =============================================================================\n\nexport function Changelog({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n maxHeight = 600,\n theme = \"auto\",\n className,\n}: ChangelogProps) {\n const resolvedTheme = useTheme(theme);\n\n return (\n <iframe\n src={`${baseUrl}/embed/${projectId}/changelog?theme=${resolvedTheme}`}\n className={className}\n style={{ width: \"100%\", height: maxHeight, border: \"none\" }}\n title=\"Changelog\"\n />\n );\n}\n\nexport function Roadmap({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n maxHeight = 800,\n theme = \"auto\",\n className,\n}: RoadmapProps) {\n const resolvedTheme = useTheme(theme);\n\n return (\n <iframe\n src={`${baseUrl}/embed/${projectId}/roadmap?theme=${resolvedTheme}`}\n className={className}\n style={{ width: \"100%\", height: maxHeight, border: \"none\" }}\n title=\"Roadmap\"\n />\n );\n}\n\n// =============================================================================\n// DEFAULT EXPORT\n// =============================================================================\n\nexport default VersionPill;\n"],"mappings":"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","names":["clsx"]}
1
+ {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport clsx from \"clsx\";\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface Version {\n version: string;\n type: \"major\" | \"minor\" | \"patch\";\n title: string;\n description?: string | null;\n emoji?: string | null;\n features?: string[];\n date: string | number;\n tasks?: { title: string; type: string }[];\n}\n\nexport interface RoadmapTask {\n id: string;\n title: string;\n type: string;\n priority: string;\n column: string;\n isPublic?: boolean;\n}\n\nexport interface Idea {\n id: string;\n title: string;\n description?: string;\n status: string;\n votes: number;\n hasVoted?: boolean;\n}\n\nexport interface ProjectInfo {\n name: string;\n slug: string;\n icon?: string | null;\n currentVersion?: string | null;\n}\n\nexport interface ChangelogAPIResponse {\n project: ProjectInfo;\n changelog: Version[];\n}\n\nexport interface RoadmapAPIResponse {\n project: ProjectInfo;\n tasks: RoadmapTask[];\n}\n\nexport interface BadgeAPIResponse {\n version: string | null;\n name: string;\n slug: string;\n}\n\nexport interface VersionPillConfig {\n projectId: string;\n baseUrl?: string;\n}\n\nexport type BadgeStyle = \"dot\" | \"pill\" | \"minimal\" | \"glass\" | \"gradient\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\nexport type ModalTab = \"changelog\" | \"roadmap\" | \"ideas\";\n\nexport interface VersionPillProps extends VersionPillConfig {\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\" | \"inline\";\n className?: string;\n theme?: \"light\" | \"dark\" | \"auto\";\n style?: BadgeStyle;\n size?: BadgeSize;\n showBranding?: boolean;\n accent?: \"green\" | \"blue\" | \"purple\" | \"orange\" | \"neutral\";\n onNewVersion?: (version: Version) => void;\n onClick?: () => void;\n}\n\nexport interface ChangelogProps extends VersionPillConfig {\n maxHeight?: number;\n theme?: \"light\" | \"dark\" | \"auto\";\n className?: string;\n}\n\nexport interface RoadmapProps extends VersionPillConfig {\n maxHeight?: number;\n theme?: \"light\" | \"dark\" | \"auto\";\n className?: string;\n}\n\n// =============================================================================\n// CONSTANTS\n// =============================================================================\n\nconst DEFAULT_BASE_URL = \"https://www.versionpill.com\";\n\nconst ACCENT_COLORS = {\n green: {\n light: { bg: \"rgba(34,197,94,0.1)\", border: \"rgba(34,197,94,0.25)\", text: \"#16a34a\", dot: \"#22c55e\" },\n dark: { bg: \"rgba(34,197,94,0.15)\", border: \"rgba(34,197,94,0.3)\", text: \"#4ade80\", dot: \"#22c55e\" },\n },\n blue: {\n light: { bg: \"rgba(59,130,246,0.1)\", border: \"rgba(59,130,246,0.25)\", text: \"#2563eb\", dot: \"#3b82f6\" },\n dark: { bg: \"rgba(59,130,246,0.15)\", border: \"rgba(59,130,246,0.3)\", text: \"#60a5fa\", dot: \"#3b82f6\" },\n },\n purple: {\n light: { bg: \"rgba(147,51,234,0.1)\", border: \"rgba(147,51,234,0.25)\", text: \"#7c3aed\", dot: \"#a855f7\" },\n dark: { bg: \"rgba(147,51,234,0.15)\", border: \"rgba(147,51,234,0.3)\", text: \"#c084fc\", dot: \"#a855f7\" },\n },\n orange: {\n light: { bg: \"rgba(249,115,22,0.1)\", border: \"rgba(249,115,22,0.25)\", text: \"#ea580c\", dot: \"#f97316\" },\n dark: { bg: \"rgba(249,115,22,0.15)\", border: \"rgba(249,115,22,0.3)\", text: \"#fb923c\", dot: \"#f97316\" },\n },\n neutral: {\n light: { bg: \"rgba(0,0,0,0.05)\", border: \"rgba(0,0,0,0.1)\", text: \"#52525b\", dot: \"#71717a\" },\n dark: { bg: \"rgba(255,255,255,0.08)\", border: \"rgba(255,255,255,0.12)\", text: \"#a1a1aa\", dot: \"#71717a\" },\n },\n};\n\nconst SIZE_CONFIG = {\n sm: { height: 22, padding: \"0 8px\", gap: 4, font: 10, dotSize: 5 },\n md: { height: 26, padding: \"0 10px\", gap: 5, font: 11, dotSize: 6 },\n lg: { height: 30, padding: \"0 12px\", gap: 6, font: 12, dotSize: 7 },\n};\n\nconst TYPE_COLORS: Record<string, string> = {\n feature: \"#a855f7\",\n bug: \"#ef4444\",\n improvement: \"#3b82f6\",\n chore: \"#71717a\",\n};\n\nconst COLUMN_LABELS: Record<string, string> = {\n backlog: \"Backlog\",\n todo: \"Planned\",\n \"in-progress\": \"In Progress\",\n done: \"Shipped\",\n};\n\n// =============================================================================\n// HOOKS\n// =============================================================================\n\nfunction useTheme(theme: \"light\" | \"dark\" | \"auto\"): \"light\" | \"dark\" {\n const [resolved, setResolved] = useState<\"light\" | \"dark\">(\"light\");\n\n useEffect(() => {\n if (theme === \"auto\") {\n const isDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n setResolved(isDark ? \"dark\" : \"light\");\n\n const listener = (e: MediaQueryListEvent) => setResolved(e.matches ? \"dark\" : \"light\");\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n mq.addEventListener(\"change\", listener);\n return () => mq.removeEventListener(\"change\", listener);\n } else {\n setResolved(theme);\n }\n }, [theme]);\n\n return resolved;\n}\n\n// =============================================================================\n// VERSION PILL COMPONENT (with full modal)\n// =============================================================================\n\nexport function VersionPill({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n position = \"inline\",\n className,\n theme = \"auto\",\n style = \"glass\",\n size = \"md\",\n showBranding = true,\n accent = \"green\",\n onNewVersion,\n onClick,\n}: VersionPillProps) {\n const [project, setProject] = useState<ProjectInfo | null>(null);\n const [versions, setVersions] = useState<Version[]>([]);\n const [roadmapTasks, setRoadmapTasks] = useState<RoadmapTask[]>([]);\n const [ideas, setIdeas] = useState<Idea[]>([]);\n const [loading, setLoading] = useState(true);\n const [isOpen, setIsOpen] = useState(false);\n const [activeTab, setActiveTab] = useState<ModalTab>(\"changelog\");\n const [hasNewVersion, setHasNewVersion] = useState(false);\n\n const resolvedTheme = useTheme(theme);\n const isLight = resolvedTheme === \"light\";\n const sizeConfig = SIZE_CONFIG[size];\n\n // Fetch version from badge API\n const fetchVersion = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/badge/${projectId}`);\n if (!response.ok) {\n setLoading(false);\n return;\n }\n const data: BadgeAPIResponse = await response.json();\n if (data.version) {\n setProject({ name: data.name, slug: data.slug, currentVersion: data.version });\n const storedVersion = localStorage.getItem(`vp_${projectId}_seen`);\n if (data.version !== storedVersion) {\n setHasNewVersion(true);\n }\n }\n } catch {\n // Silently fail\n } finally {\n setLoading(false);\n }\n }, [projectId, baseUrl]);\n\n // Fetch changelog\n const fetchChangelog = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/changelog/${projectId}?limit=10`);\n if (!response.ok) return;\n const data: ChangelogAPIResponse = await response.json();\n setVersions(data.changelog || []);\n setProject(data.project);\n if (data.changelog && data.changelog.length > 0) {\n const storedVersion = localStorage.getItem(`vp_${projectId}_seen`);\n if (data.changelog[0].version !== storedVersion) {\n setHasNewVersion(true);\n onNewVersion?.(data.changelog[0]);\n }\n }\n } catch {\n // Silently fail\n }\n }, [projectId, baseUrl, onNewVersion]);\n\n // Fetch roadmap\n const fetchRoadmap = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/roadmap/${projectId}`);\n if (!response.ok) return;\n const data: RoadmapAPIResponse = await response.json();\n setRoadmapTasks(data.tasks || []);\n } catch {\n // Silently fail\n }\n }, [projectId, baseUrl]);\n\n // Fetch ideas (silently fails if API unavailable)\n const fetchIdeas = useCallback(async () => {\n try {\n const response = await fetch(`${baseUrl}/api/ideas/${projectId}`);\n if (!response.ok) return;\n const data = await response.json();\n setIdeas(data.ideas || []);\n } catch {\n // Silently fail - ideas API might not exist\n }\n }, [projectId, baseUrl]);\n\n useEffect(() => {\n fetchVersion();\n }, [fetchVersion]);\n\n const handleOpen = () => {\n if (onClick) {\n onClick();\n return;\n }\n setIsOpen(true);\n fetchChangelog();\n fetchRoadmap();\n fetchIdeas();\n if (project?.currentVersion) {\n localStorage.setItem(`vp_${projectId}_seen`, project.currentVersion);\n setHasNewVersion(false);\n }\n };\n\n const currentVersion = project?.currentVersion;\n\n const positionStyles: Record<string, string> = {\n \"top-left\": \"fixed top-4 left-4 z-[9999]\",\n \"top-right\": \"fixed top-4 right-4 z-[9999]\",\n \"bottom-left\": \"fixed bottom-4 left-4 z-[9999]\",\n \"bottom-right\": \"fixed bottom-4 right-4 z-[9999]\",\n inline: \"\",\n };\n\n // Get badge style based on style prop\n const getBadgeStyle = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: sizeConfig.gap,\n height: sizeConfig.height,\n padding: sizeConfig.padding,\n fontSize: sizeConfig.font,\n fontFamily: \"ui-monospace, monospace\",\n fontWeight: 600,\n borderRadius: 999,\n cursor: \"pointer\",\n transition: \"all 150ms ease\",\n outline: \"none\",\n };\n\n if (style === \"gradient\") {\n return {\n ...base,\n background: \"linear-gradient(135deg, #22c55e 0%, #16a34a 100%)\",\n border: \"none\",\n color: \"#fff\",\n boxShadow: \"0 2px 8px rgba(34,197,94,0.3)\",\n };\n }\n\n // Glass style (default)\n return {\n ...base,\n background: isLight\n ? \"rgba(34, 197, 94, 0.12)\"\n : \"rgba(34, 197, 94, 0.18)\",\n backdropFilter: \"blur(8px)\",\n WebkitBackdropFilter: \"blur(8px)\",\n border: isLight\n ? \"1px solid rgba(34, 197, 94, 0.25)\"\n : \"1px solid rgba(34, 197, 94, 0.35)\",\n color: isLight ? \"#16a34a\" : \"#4ade80\",\n boxShadow: isLight\n ? \"0 2px 8px rgba(34, 197, 94, 0.15), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 2px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.1)\",\n };\n };\n\n const getDotStyle = (): React.CSSProperties => ({\n width: sizeConfig.dotSize,\n height: sizeConfig.dotSize,\n borderRadius: \"50%\",\n background: style === \"gradient\" ? \"#fff\" : \"#22c55e\",\n boxShadow: style === \"gradient\"\n ? \"0 0 6px rgba(255,255,255,0.8)\"\n : \"0 0 6px rgba(34,197,94,0.6)\",\n flexShrink: 0,\n });\n\n // Loading state\n if (loading) {\n const loadingStyle = getBadgeStyle();\n return (\n <div className={clsx(positionStyles[position], className)} style={{ display: \"inline-flex\" }}>\n <span style={{ ...loadingStyle, opacity: 0.6, cursor: \"default\" }}>\n <span style={{ ...getDotStyle(), opacity: 0.6 }} />\n <span style={{\n width: 32,\n height: sizeConfig.font,\n background: style === \"gradient\" ? \"rgba(255,255,255,0.3)\" : \"rgba(34,197,94,0.3)\",\n borderRadius: 2\n }} />\n </span>\n </div>\n );\n }\n\n if (!currentVersion) return null;\n\n // Render the badge\n const renderBadge = () => {\n const badgeStyle = getBadgeStyle();\n const dotStyle = getDotStyle();\n\n return (\n <button\n onClick={handleOpen}\n style={badgeStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = \"scale(1.02)\";\n e.currentTarget.style.boxShadow = style === \"gradient\"\n ? \"0 4px 12px rgba(34,197,94,0.4)\"\n : isLight\n ? \"0 4px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 4px 16px rgba(34, 197, 94, 0.35), inset 0 1px 0 rgba(255,255,255,0.1)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = \"scale(1)\";\n e.currentTarget.style.boxShadow = style === \"gradient\"\n ? \"0 2px 8px rgba(34,197,94,0.3)\"\n : isLight\n ? \"0 2px 8px rgba(34, 197, 94, 0.15), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 2px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.1)\";\n }}\n >\n <span style={dotStyle} />\n <span>v{currentVersion}</span>\n {hasNewVersion && (\n <span\n style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: \"#fbbf24\",\n marginLeft: 2,\n }}\n />\n )}\n </button>\n );\n };\n\n // Safe arrays\n const versionsArray = Array.isArray(versions) ? versions : [];\n const tasksArray = Array.isArray(roadmapTasks) ? roadmapTasks : [];\n const ideasArray = Array.isArray(ideas) ? ideas : [];\n\n // Group roadmap tasks by column\n const groupedTasks = tasksArray.reduce((acc, task) => {\n const col = task.column || \"backlog\";\n if (!acc[col]) acc[col] = [];\n acc[col].push(task);\n return acc;\n }, {} as Record<string, RoadmapTask[]>);\n\n return (\n <>\n <div className={clsx(positionStyles[position], className)} style={{ display: \"inline-flex\" }}>\n {renderBadge()}\n </div>\n\n {isOpen && (\n <div style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: \"100vw\",\n height: \"100vh\",\n zIndex: 2147483647,\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n background: isLight ? \"#fff\" : \"#0a0a0a\",\n }}>\n {/* Full Page Modal */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n width: \"100%\",\n height: \"100%\",\n borderRadius: 12,\n overflow: \"hidden\",\n }}\n >\n {/* Header */}\n <div\n style={{\n flexShrink: 0,\n padding: \"16px 20px\",\n borderBottom: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 12 }}>\n {project?.icon && <span style={{ fontSize: 24 }}>{project.icon}</span>}\n <div>\n <h2 style={{ fontWeight: 600, fontSize: 18, color: isLight ? \"#18181b\" : \"#fff\", margin: 0 }}>\n {project?.name || \"What's New\"}\n </h2>\n <p style={{ fontSize: 13, color: isLight ? \"#71717a\" : \"#a1a1aa\", margin: 0 }}>\n v{currentVersion}\n </p>\n </div>\n </div>\n <button\n onClick={() => setIsOpen(false)}\n style={{\n width: 36,\n height: 36,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 8,\n background: isLight ? \"#f5f5f5\" : \"#1f1f1f\",\n border: \"none\",\n cursor: \"pointer\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n transition: \"background 150ms\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.background = isLight ? \"#e5e5e5\" : \"#2a2a2a\"}\n onMouseLeave={(e) => e.currentTarget.style.background = isLight ? \"#f5f5f5\" : \"#1f1f1f\"}\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n <div\n style={{\n flexShrink: 0,\n display: \"flex\",\n gap: 4,\n padding: \"12px 20px\",\n borderBottom: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n }}\n >\n {([\"changelog\", \"roadmap\", \"ideas\"] as ModalTab[]).map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n padding: \"10px 16px\",\n borderRadius: 8,\n border: \"none\",\n cursor: \"pointer\",\n fontSize: 14,\n fontWeight: 500,\n background: activeTab === tab\n ? (isLight ? \"#18181b\" : \"#fff\")\n : \"transparent\",\n color: activeTab === tab\n ? (isLight ? \"#fff\" : \"#18181b\")\n : (isLight ? \"#71717a\" : \"#71717a\"),\n transition: \"all 150ms\",\n }}\n >\n {tab === \"changelog\" && \"πŸš€ Changelog\"}\n {tab === \"roadmap\" && \"πŸ—ΊοΈ Roadmap\"}\n {tab === \"ideas\" && \"πŸ’‘ Ideas\"}\n </button>\n ))}\n </div>\n\n {/* Content - Scrollable */}\n <div style={{ flex: 1, overflowY: \"auto\", padding: \"20px 24px\", minHeight: 0 }}>\n {/* Changelog Tab */}\n {activeTab === \"changelog\" && (\n <div style={{ maxWidth: 640 }}>\n {versionsArray.length === 0 ? (\n <div style={{ textAlign: \"center\", padding: 60, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <div style={{ fontSize: 48, marginBottom: 12 }}>πŸš€</div>\n <div style={{ fontSize: 16 }}>No releases yet</div>\n </div>\n ) : (\n versionsArray.slice(0, 10).map((version, idx) => (\n <div key={idx} style={{ marginBottom: 24, paddingBottom: 24, borderBottom: idx < versionsArray.length - 1 && idx < 9 ? `1px solid ${isLight ? \"#f0f0f0\" : \"#1f1f1f\"}` : \"none\" }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 6 }}>\n <span style={{ fontSize: 20 }}>{version.emoji || \"πŸ“¦\"}</span>\n <span style={{ fontWeight: 600, fontSize: 18, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {version.title}\n </span>\n <span\n style={{\n padding: \"3px 8px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 4,\n background: version.type === \"major\" ? \"#f3e8ff\" : version.type === \"minor\" ? \"#dbeafe\" : (isLight ? \"#f4f4f5\" : \"#1f1f1f\"),\n color: version.type === \"major\" ? \"#7c3aed\" : version.type === \"minor\" ? \"#2563eb\" : (isLight ? \"#52525b\" : \"#a1a1aa\"),\n }}\n >\n {version.type}\n </span>\n </div>\n <div style={{ fontSize: 13, color: isLight ? \"#71717a\" : \"#71717a\", marginBottom: 10 }}>\n v{version.version} Β· {new Date(version.date).toLocaleDateString()}\n </div>\n {version.description && (\n <p style={{ fontSize: 15, color: isLight ? \"#52525b\" : \"#a1a1aa\", margin: \"0 0 12px 0\", lineHeight: 1.6 }}>\n {version.description}\n </p>\n )}\n {version.features && version.features.length > 0 && (\n <ul style={{ margin: 0, paddingLeft: 0, listStyle: \"none\" }}>\n {version.features.map((feature, i) => (\n <li key={i} style={{ display: \"flex\", alignItems: \"flex-start\", gap: 10, fontSize: 14, color: isLight ? \"#52525b\" : \"#a1a1aa\", marginBottom: 6, lineHeight: 1.5 }}>\n <span style={{ color: \"#22c55e\", fontSize: 14, marginTop: 2 }}>βœ“</span>\n {feature}\n </li>\n ))}\n </ul>\n )}\n </div>\n ))\n )}\n </div>\n )}\n\n {/* Roadmap Tab */}\n {activeTab === \"roadmap\" && (\n <div style={{ maxWidth: 640 }}>\n {Object.keys(groupedTasks).length === 0 ? (\n <div style={{ textAlign: \"center\", padding: 60, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <div style={{ fontSize: 48, marginBottom: 12 }}>πŸ—ΊοΈ</div>\n <div style={{ fontSize: 16 }}>No public roadmap items</div>\n </div>\n ) : (\n [\"in-progress\", \"todo\", \"backlog\"].map((col) => {\n const tasks = groupedTasks[col];\n if (!tasks || tasks.length === 0) return null;\n return (\n <div key={col} style={{ marginBottom: 24 }}>\n <h3 style={{ fontSize: 12, fontWeight: 600, color: isLight ? \"#a1a1aa\" : \"#71717a\", marginBottom: 12, textTransform: \"uppercase\", letterSpacing: \"0.5px\" }}>\n {COLUMN_LABELS[col] || col} ({tasks.length})\n </h3>\n {tasks.map((task) => (\n <div\n key={task.id}\n style={{\n padding: \"12px 16px\",\n marginBottom: 8,\n borderRadius: 8,\n background: isLight ? \"#f5f5f5\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <span\n style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: TYPE_COLORS[task.type] || \"#71717a\",\n flexShrink: 0,\n }}\n />\n <span style={{ fontSize: 14, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {task.title}\n </span>\n </div>\n </div>\n ))}\n </div>\n );\n })\n )}\n </div>\n )}\n\n {/* Ideas Tab */}\n {activeTab === \"ideas\" && (\n <div style={{ maxWidth: 640 }}>\n {ideasArray.length === 0 ? (\n <div style={{ textAlign: \"center\", padding: 60, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <div style={{ fontSize: 48, marginBottom: 12 }}>πŸ’‘</div>\n <div style={{ fontSize: 16 }}>No feature requests yet</div>\n </div>\n ) : (\n ideasArray.map((idea) => (\n <div\n key={idea.id}\n style={{\n padding: 16,\n marginBottom: 12,\n borderRadius: 8,\n background: isLight ? \"#f5f5f5\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: 16,\n }}\n >\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"8px 12px\",\n borderRadius: 6,\n background: isLight ? \"#fff\" : \"#0a0a0a\",\n minWidth: 50,\n }}\n >\n <span style={{ fontSize: 18, fontWeight: 600, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {idea.votes}\n </span>\n <span style={{ fontSize: 11, color: isLight ? \"#71717a\" : \"#71717a\" }}>votes</span>\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: 16, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\", marginBottom: 4 }}>\n {idea.title}\n </div>\n {idea.description && (\n <div style={{ fontSize: 14, color: isLight ? \"#71717a\" : \"#71717a\", lineHeight: 1.5 }}>\n {idea.description}\n </div>\n )}\n </div>\n </div>\n ))\n )}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div\n style={{\n flexShrink: 0,\n padding: \"16px 24px\",\n borderTop: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n }}\n >\n {showBranding && (\n <a\n href=\"https://versionpill.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: 12, color: isLight ? \"#a1a1aa\" : \"#525252\", textDecoration: \"none\" }}\n >\n Powered by Version Pill\n </a>\n )}\n <a\n href={`${baseUrl}/${projectId}/${activeTab === \"ideas\" ? \"feature-requests\" : activeTab}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n padding: \"10px 20px\",\n fontSize: 14,\n fontWeight: 500,\n borderRadius: 8,\n background: \"#22c55e\",\n color: \"#fff\",\n textDecoration: \"none\",\n transition: \"background 150ms\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.background = \"#16a34a\"}\n onMouseLeave={(e) => e.currentTarget.style.background = \"#22c55e\"}\n >\n View Full {activeTab === \"changelog\" ? \"Changelog\" : activeTab === \"roadmap\" ? \"Roadmap\" : \"Ideas\"} β†’\n </a>\n </div>\n </div>\n </div>\n )}\n </>\n );\n}\n\n// =============================================================================\n// VERSION BADGE COMPONENT (No Modal - just badge)\n// =============================================================================\n\nexport interface VersionBadgeProps {\n projectId: string;\n baseUrl?: string;\n theme?: \"light\" | \"dark\" | \"auto\";\n style?: BadgeStyle;\n size?: BadgeSize;\n accent?: \"green\" | \"blue\" | \"purple\" | \"orange\" | \"neutral\";\n className?: string;\n href?: string;\n}\n\nexport function VersionBadge({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n theme = \"auto\",\n style = \"glass\",\n size = \"md\",\n accent = \"green\",\n className,\n href,\n}: VersionBadgeProps) {\n const [version, setVersion] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n\n const resolvedTheme = useTheme(theme);\n const isLight = resolvedTheme === \"light\";\n const colors = ACCENT_COLORS[accent][isLight ? \"light\" : \"dark\"];\n const sizeConfig = SIZE_CONFIG[size];\n\n useEffect(() => {\n fetch(`${baseUrl}/api/badge/${projectId}`)\n .then((res) => res.json())\n .then((data) => setVersion(data.version))\n .catch(() => setVersion(null))\n .finally(() => setLoading(false));\n }, [projectId, baseUrl]);\n\n // Style configurations\n const getStyleConfig = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: sizeConfig.gap,\n height: sizeConfig.height,\n padding: sizeConfig.padding,\n fontSize: sizeConfig.font,\n fontFamily: \"ui-monospace, monospace\",\n fontWeight: 600,\n borderRadius: 999,\n textDecoration: \"none\",\n transition: \"all 150ms ease\",\n cursor: \"pointer\",\n };\n\n switch (style) {\n case \"glass\":\n return {\n ...base,\n background: isLight\n ? \"rgba(34, 197, 94, 0.12)\"\n : \"rgba(34, 197, 94, 0.18)\",\n backdropFilter: \"blur(8px)\",\n WebkitBackdropFilter: \"blur(8px)\",\n border: isLight\n ? \"1px solid rgba(34, 197, 94, 0.25)\"\n : \"1px solid rgba(34, 197, 94, 0.35)\",\n color: isLight ? \"#16a34a\" : \"#4ade80\",\n boxShadow: isLight\n ? \"0 2px 8px rgba(34, 197, 94, 0.15), inset 0 1px 0 rgba(255,255,255,0.5)\"\n : \"0 2px 12px rgba(34, 197, 94, 0.25), inset 0 1px 0 rgba(255,255,255,0.1)\",\n };\n case \"gradient\":\n return {\n ...base,\n background: \"linear-gradient(135deg, #22c55e 0%, #16a34a 100%)\",\n color: \"#fff\",\n boxShadow: \"0 2px 8px rgba(34,197,94,0.3)\",\n };\n case \"pill\":\n return {\n ...base,\n background: colors.bg,\n border: `1px solid ${colors.border}`,\n color: colors.text,\n };\n case \"minimal\":\n return {\n ...base,\n background: \"transparent\",\n color: colors.text,\n padding: \"0 4px\",\n };\n case \"dot\":\n return {\n ...base,\n background: colors.bg,\n border: `1px solid ${colors.border}`,\n color: colors.text,\n };\n default:\n return {\n ...base,\n background: isLight\n ? \"rgba(34, 197, 94, 0.12)\"\n : \"rgba(34, 197, 94, 0.18)\",\n backdropFilter: \"blur(8px)\",\n border: isLight\n ? \"1px solid rgba(34, 197, 94, 0.25)\"\n : \"1px solid rgba(34, 197, 94, 0.35)\",\n color: isLight ? \"#16a34a\" : \"#4ade80\",\n boxShadow: \"0 2px 8px rgba(34, 197, 94, 0.15)\",\n };\n }\n };\n\n const getDotStyle = (): React.CSSProperties => {\n const isGlassOrPill = style === \"glass\" || style === \"pill\" || style === \"dot\";\n return {\n width: sizeConfig.dotSize,\n height: sizeConfig.dotSize,\n borderRadius: \"50%\",\n background: style === \"gradient\" ? \"#fff\" : \"#22c55e\",\n boxShadow: style === \"gradient\"\n ? \"0 0 6px rgba(255,255,255,0.8)\"\n : \"0 0 6px rgba(34,197,94,0.6)\",\n flexShrink: 0,\n };\n };\n\n if (loading) {\n const loadingStyle = getStyleConfig();\n return (\n <span className={className} style={{ ...loadingStyle, opacity: 0.6 }}>\n <span style={{ ...getDotStyle(), opacity: 0.6 }} />\n <span style={{\n width: 32,\n height: sizeConfig.font,\n background: style === \"gradient\" ? \"rgba(255,255,255,0.3)\" : \"rgba(34,197,94,0.3)\",\n borderRadius: 2\n }} />\n </span>\n );\n }\n\n if (!version) return null;\n\n const badgeStyle = getStyleConfig();\n const dotStyle = getDotStyle();\n\n const content = (\n <>\n <span style={dotStyle} />\n <span>v{version}</span>\n </>\n );\n\n if (href) {\n return (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\" className={className} style={badgeStyle}>\n {content}\n </a>\n );\n }\n\n return (\n <span className={className} style={badgeStyle}>\n {content}\n </span>\n );\n}\n\n// =============================================================================\n// USE VERSION HOOK\n// =============================================================================\n\nexport interface UseVersionOptions {\n projectId: string;\n baseUrl?: string;\n refetchInterval?: number;\n}\n\nexport interface UseVersionResult {\n version: string | null;\n name: string | null;\n slug: string | null;\n loading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\nconst versionCache: Record<string, { version: string | null; name: string | null; slug: string | null }> = {};\n\nexport function useVersion({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n refetchInterval = 0,\n}: UseVersionOptions): UseVersionResult {\n const cacheKey = `${baseUrl}:${projectId}`;\n const cached = versionCache[cacheKey];\n\n const [version, setVersion] = useState<string | null>(cached?.version ?? null);\n const [name, setName] = useState<string | null>(cached?.name ?? null);\n const [slug, setSlug] = useState<string | null>(cached?.slug ?? null);\n const [loading, setLoading] = useState(!cached);\n const [error, setError] = useState<string | null>(null);\n\n const fetchVersion = useCallback(async () => {\n if (typeof window === \"undefined\") return;\n\n try {\n setError(null);\n const response = await fetch(`${baseUrl}/api/badge/${projectId}`);\n if (!response.ok) throw new Error(\"Failed to fetch version\");\n\n const data: BadgeAPIResponse = await response.json();\n versionCache[cacheKey] = { version: data.version, name: data.name, slug: data.slug };\n\n setVersion(data.version);\n setName(data.name);\n setSlug(data.slug);\n } catch (err: any) {\n setError(err.message);\n } finally {\n setLoading(false);\n }\n }, [projectId, baseUrl, cacheKey]);\n\n useEffect(() => {\n if (!cached) {\n fetchVersion();\n }\n }, [fetchVersion, cached]);\n\n useEffect(() => {\n if (refetchInterval > 0) {\n const interval = setInterval(fetchVersion, refetchInterval);\n return () => clearInterval(interval);\n }\n }, [refetchInterval, fetchVersion]);\n\n return { version, name, slug, loading, error, refetch: fetchVersion };\n}\n\n// =============================================================================\n// EMBED COMPONENTS\n// =============================================================================\n\nexport function Changelog({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n maxHeight = 600,\n theme = \"auto\",\n className,\n}: ChangelogProps) {\n const resolvedTheme = useTheme(theme);\n\n return (\n <iframe\n src={`${baseUrl}/embed/${projectId}/changelog?theme=${resolvedTheme}`}\n className={className}\n style={{ width: \"100%\", height: maxHeight, border: \"none\" }}\n title=\"Changelog\"\n />\n );\n}\n\nexport function Roadmap({\n projectId,\n baseUrl = DEFAULT_BASE_URL,\n maxHeight = 800,\n theme = \"auto\",\n className,\n}: RoadmapProps) {\n const resolvedTheme = useTheme(theme);\n\n return (\n <iframe\n src={`${baseUrl}/embed/${projectId}/roadmap?theme=${resolvedTheme}`}\n className={className}\n style={{ width: \"100%\", height: maxHeight, border: \"none\" }}\n title=\"Roadmap\"\n />\n );\n}\n\n// =============================================================================\n// DEFAULT EXPORT\n// =============================================================================\n\nexport default VersionPill;\n"],"mappings":"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","names":["clsx"]}