version-pill-react 1.6.1 β 1.6.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/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -264,7 +264,7 @@ function VersionPill({
|
|
|
264
264
|
headers: { "Content-Type": "application/json" },
|
|
265
265
|
body: JSON.stringify({
|
|
266
266
|
title: ideaTitle.trim(),
|
|
267
|
-
description: ideaDescription.trim() ||
|
|
267
|
+
description: ideaDescription.trim() || "",
|
|
268
268
|
authorName: ideaAuthorName.trim() || void 0,
|
|
269
269
|
authorEmail: ideaAuthorEmail.trim()
|
|
270
270
|
})
|
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 { createPortal } from \"react-dom\";\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 columnId?: string;\n columnName?: string;\n description?: string | null;\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 RoadmapBoardItem {\n id: string;\n title: string;\n description?: string | null;\n type?: string;\n priority?: string;\n votes?: number;\n itemType: \"task\" | \"idea\";\n columnId: string;\n createdAt?: string | number;\n}\n\nexport interface RoadmapBoardColumn {\n id: string;\n name: string;\n}\n\nexport interface RoadmapAPIResponse {\n project: ProjectInfo;\n columns?: RoadmapBoardColumn[];\n items?: RoadmapBoardItem[];\n // Legacy format\n tasks?: RoadmapTask[] | { inProgress?: RoadmapTask[]; planned?: 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 \"in progress\": \"In Progress\",\n inProgress: \"In Progress\",\n done: \"Shipped\",\n shipped: \"Shipped\",\n completed: \"Shipped\",\n};\n\nconst TYPE_EMOJIS: Record<string, string> = {\n feature: \"β¨\",\n bug: \"π\",\n improvement: \"π\",\n chore: \"π§\",\n idea: \"π‘\",\n};\n\nconst PRIORITY_COLORS: Record<string, string> = {\n urgent: \"#ef4444\",\n high: \"#f97316\",\n medium: \"#3b82f6\",\n low: \"#9ca3af\",\n};\n\nconst STATUS_CONFIG: Record<string, { color: string; label: string }> = {\n new: { color: \"#3b82f6\", label: \"New\" },\n \"under review\": { color: \"#f59e0b\", label: \"Under Review\" },\n planned: { color: \"#8b5cf6\", label: \"Planned\" },\n \"in progress\": { color: \"#3b82f6\", label: \"In Progress\" },\n shipped: { color: \"#22c55e\", label: \"Shipped\" },\n declined: { color: \"#ef4444\", label: \"Declined\" },\n};\n\nconst FADE_IN_KEYFRAMES = `\n@keyframes vpFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes vpSlideUp {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\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 [roadmapColumns, setRoadmapColumns] = useState<RoadmapBoardColumn[]>([]);\n const [roadmapItems, setRoadmapItems] = useState<RoadmapBoardItem[]>([]);\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 // Idea submission state\n const [showIdeaForm, setShowIdeaForm] = useState(false);\n const [ideaTitle, setIdeaTitle] = useState(\"\");\n const [ideaDescription, setIdeaDescription] = useState(\"\");\n const [ideaAuthorName, setIdeaAuthorName] = useState(\"\");\n const [ideaAuthorEmail, setIdeaAuthorEmail] = useState(\"\");\n const [submittingIdea, setSubmittingIdea] = useState(false);\n const [ideaSubmitMessage, setIdeaSubmitMessage] = useState<{ type: 'success' | 'error', text: string } | null>(null);\n\n // Enhanced UX state\n const [roadmapView, setRoadmapView] = useState<\"board\" | \"list\">(\"board\");\n const [isMobile, setIsMobile] = useState(false);\n const [votedIdeas, setVotedIdeas] = useState<Set<string>>(new Set());\n const [collapsedColumns, setCollapsedColumns] = useState<Set<string>>(new Set());\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\n // New format: columns + items (3-column board)\n if (data.columns && data.items) {\n setRoadmapColumns(data.columns);\n setRoadmapItems(data.items);\n return;\n }\n\n // Legacy fallback: flatten grouped tasks into board items\n let tasks: RoadmapTask[] = [];\n if (Array.isArray(data.tasks)) {\n tasks = data.tasks;\n } else if (data.tasks && typeof data.tasks === 'object') {\n const grouped = data.tasks as { inProgress?: any[]; planned?: any[] };\n const mapTask = (t: any, defaultColumn: string): RoadmapTask => ({\n id: t.id || t._id,\n title: t.title,\n description: t.description,\n type: t.type || 'feature',\n priority: t.priority || 'medium',\n column: t.columnId || defaultColumn,\n columnId: t.columnId,\n columnName: t.columnName,\n });\n const inProgress = (grouped.inProgress || []).map(t => mapTask(t, 'in-progress'));\n const planned = (grouped.planned || []).map(t => mapTask(t, 'todo'));\n tasks = [...inProgress, ...planned];\n }\n\n // Convert legacy tasks to board format\n setRoadmapColumns([\n { id: \"planned\", name: \"Planned\" },\n { id: \"in_progress\", name: \"In Progress\" },\n { id: \"completed\", name: \"Completed\" },\n ]);\n setRoadmapItems(tasks.map(t => ({\n id: t.id,\n title: t.title,\n description: t.description,\n type: t.type,\n priority: t.priority,\n itemType: \"task\" as const,\n columnId: t.column === \"in-progress\" ? \"in_progress\" : t.column === \"done\" || t.column === \"shipped\" ? \"completed\" : \"planned\",\n })));\n setRoadmapTasks(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 // Submit idea\n const submitIdea = useCallback(async () => {\n if (!ideaTitle.trim() || !ideaAuthorEmail.trim()) return;\n setSubmittingIdea(true);\n setIdeaSubmitMessage(null);\n try {\n const response = await fetch(`${baseUrl}/api/ideas/${projectId}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n title: ideaTitle.trim(),\n description: ideaDescription.trim() || undefined,\n authorName: ideaAuthorName.trim() || undefined,\n authorEmail: ideaAuthorEmail.trim(),\n }),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Failed to submit' }));\n throw new Error(error.error || 'Failed to submit idea');\n }\n setIdeaSubmitMessage({ type: 'success', text: 'Thanks! Your idea has been submitted.' });\n setIdeaTitle(\"\");\n setIdeaDescription(\"\");\n setIdeaAuthorName(\"\");\n setIdeaAuthorEmail(\"\");\n setShowIdeaForm(false);\n fetchIdeas();\n } catch (err: any) {\n setIdeaSubmitMessage({ type: 'error', text: err.message || 'Failed to submit idea' });\n } finally {\n setSubmittingIdea(false);\n }\n }, [baseUrl, projectId, ideaTitle, ideaDescription, ideaAuthorName, ideaAuthorEmail, fetchIdeas]);\n\n // Vote on an idea\n const voteIdea = useCallback(async (ideaId: string) => {\n if (votedIdeas.has(ideaId)) return;\n // Optimistic update\n setIdeas(prev => prev.map(i => i.id === ideaId ? { ...i, votes: i.votes + 1 } : i));\n setVotedIdeas(prev => new Set(prev).add(ideaId));\n try {\n await fetch(`${baseUrl}/api/vote/${ideaId}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n });\n } catch {\n // Revert on failure\n setIdeas(prev => prev.map(i => i.id === ideaId ? { ...i, votes: i.votes - 1 } : i));\n setVotedIdeas(prev => { const s = new Set(prev); s.delete(ideaId); return s; });\n }\n }, [baseUrl, projectId, votedIdeas]);\n\n useEffect(() => {\n fetchVersion();\n }, [fetchVersion]);\n\n // Body scroll lock\n useEffect(() => {\n if (isOpen) {\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => { document.body.style.overflow = prev; };\n }\n }, [isOpen]);\n\n // ESC to close\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setIsOpen(false);\n };\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [isOpen]);\n\n // Mobile detection\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < 640);\n check();\n window.addEventListener(\"resize\", check);\n return () => window.removeEventListener(\"resize\", check);\n }, []);\n\n // Inject keyframe animations\n useEffect(() => {\n if (!isOpen) return;\n const id = \"vp-modal-keyframes\";\n if (document.getElementById(id)) return;\n const style = document.createElement(\"style\");\n style.id = id;\n style.textContent = FADE_IN_KEYFRAMES;\n document.head.appendChild(style);\n return () => { document.getElementById(id)?.remove(); };\n }, [isOpen]);\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 ideasArray = Array.isArray(ideas) ? ideas : [];\n\n return (\n <>\n <div className={clsx(positionStyles[position], className)} style={{ display: \"inline-flex\" }}>\n {renderBadge()}\n </div>\n\n {isOpen && createPortal(\n <>\n {/* Backdrop */}\n <div\n onClick={() => setIsOpen(false)}\n style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 2147483646,\n background: \"rgba(0,0,0,0.5)\",\n animation: \"vpFadeIn 200ms ease-out\",\n }}\n />\n {/* Modal */}\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n position: \"fixed\",\n top: isMobile ? 0 : 20,\n left: isMobile ? 0 : 20,\n right: isMobile ? 0 : 20,\n bottom: isMobile ? 0 : 20,\n zIndex: 2147483647,\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n background: isLight ? \"#fff\" : \"#0a0a0a\",\n borderRadius: isMobile ? 0 : 16,\n overflow: \"hidden\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n animation: \"vpSlideUp 250ms ease-out\",\n }}\n >\n {/* Header */}\n <div\n style={{\n flexShrink: 0,\n padding: isMobile ? \"12px 16px\" : \"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: isMobile ? 8 : 12 }}>\n {project?.icon && <span style={{ fontSize: isMobile ? 20 : 24 }}>{project.icon}</span>}\n <div>\n <h2 style={{ fontWeight: 600, fontSize: isMobile ? 16 : 18, color: isLight ? \"#18181b\" : \"#fff\", margin: 0 }}>\n {project?.name || \"What's New\"}\n </h2>\n <p style={{ fontSize: 12, 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 justifyContent: \"center\",\n gap: 2,\n padding: isMobile ? \"8px 12px\" : \"10px 20px\",\n borderBottom: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n overflowX: \"auto\",\n }}\n >\n {([\"changelog\", \"roadmap\", \"ideas\"] as ModalTab[]).map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n padding: isMobile ? \"8px 16px\" : \"8px 20px\",\n borderRadius: 999,\n border: \"none\",\n cursor: \"pointer\",\n fontSize: isMobile ? 13 : 14,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\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 onMouseEnter={(e) => {\n if (activeTab !== tab) {\n e.currentTarget.style.background = isLight ? \"#f4f4f5\" : \"#1f1f1f\";\n }\n }}\n onMouseLeave={(e) => {\n if (activeTab !== tab) {\n e.currentTarget.style.background = \"transparent\";\n }\n }}\n >\n {tab === \"changelog\" && \"π Changelog\"}\n {tab === \"roadmap\" && \"πΊοΈ Roadmap\"}\n {tab === \"ideas\" && \"π‘ Ideas\"}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, overflow: activeTab === \"roadmap\" ? \"hidden\" : \"auto\", padding: isMobile ? \"16px\" : \"20px 24px\", minHeight: 0, display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n {/* Changelog Tab */}\n {activeTab === \"changelog\" && (\n <div style={{ maxWidth: 640, width: \"100%\", overflowY: \"auto\", flex: 1 }}>\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 <>\n {versionsArray.slice(0, 10).map((version, idx) => {\n const isLatest = idx === 0;\n return (\n <div key={idx} style={{\n marginBottom: 24,\n paddingBottom: 24,\n paddingLeft: isLatest ? 16 : 0,\n borderLeft: isLatest ? `3px solid #22c55e` : \"none\",\n borderBottom: idx < versionsArray.length - 1 && idx < 9 ? `1px solid ${isLight ? \"#f0f0f0\" : \"#1f1f1f\"}` : \"none\",\n }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 6, flexWrap: \"wrap\" }}>\n <span style={{ fontSize: isLatest ? 22 : 20 }}>{version.emoji || \"π¦\"}</span>\n <span style={{ fontWeight: 600, fontSize: isLatest ? 20 : 18, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {version.title}\n </span>\n {isLatest && (\n <span style={{\n padding: \"2px 8px\",\n fontSize: 10,\n fontWeight: 600,\n borderRadius: 999,\n background: isLight ? \"#dcfce7\" : \"rgba(34,197,94,0.15)\",\n color: \"#22c55e\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n }}>\n Latest\n </span>\n )}\n <span\n style={{\n padding: \"3px 10px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: version.type === \"major\"\n ? (isLight ? \"#f3e8ff\" : \"rgba(147,51,234,0.15)\")\n : version.type === \"minor\"\n ? (isLight ? \"#dbeafe\" : \"rgba(59,130,246,0.15)\")\n : (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 {version.tasks && version.tasks.length > 0 && (\n <div style={{ marginTop: 10, paddingTop: 10, borderTop: `1px solid ${isLight ? \"#f0f0f0\" : \"#1f1f1f\"}` }}>\n {version.tasks.map((task, i) => (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 8, fontSize: 13, color: isLight ? \"#71717a\" : \"#a1a1aa\", marginBottom: 4 }}>\n <span style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: TYPE_COLORS[task.type] || \"#71717a\",\n flexShrink: 0,\n }} />\n {task.title}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n {versionsArray.length > 10 && (\n <a\n href={`${baseUrl}/${projectId}/changelog`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: \"block\",\n textAlign: \"center\",\n padding: 12,\n fontSize: 14,\n color: \"#22c55e\",\n textDecoration: \"none\",\n }}\n >\n View all releases β\n </a>\n )}\n </>\n )}\n </div>\n )}\n\n {/* Roadmap Tab */}\n {activeTab === \"roadmap\" && (\n <div style={{ display: \"flex\", flexDirection: \"column\", flex: 1, minHeight: 0, width: \"100%\" }}>\n {roadmapItems.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 <>\n {/* View Toggle */}\n <div style={{ display: \"flex\", gap: 4, marginBottom: 12, flexShrink: 0 }}>\n <button\n onClick={() => setRoadmapView(\"board\")}\n style={{\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${roadmapView === \"board\" ? (isLight ? \"#18181b\" : \"#fff\") : (isLight ? \"#e5e5e5\" : \"#2a2a2a\")}`,\n background: roadmapView === \"board\" ? (isLight ? \"#18181b\" : \"#fff\") : \"transparent\",\n color: roadmapView === \"board\" ? (isLight ? \"#fff\" : \"#18181b\") : (isLight ? \"#71717a\" : \"#a1a1aa\"),\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/></svg>\n Board\n </button>\n <button\n onClick={() => setRoadmapView(\"list\")}\n style={{\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${roadmapView === \"list\" ? (isLight ? \"#18181b\" : \"#fff\") : (isLight ? \"#e5e5e5\" : \"#2a2a2a\")}`,\n background: roadmapView === \"list\" ? (isLight ? \"#18181b\" : \"#fff\") : \"transparent\",\n color: roadmapView === \"list\" ? (isLight ? \"#fff\" : \"#18181b\") : (isLight ? \"#71717a\" : \"#a1a1aa\"),\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"/></svg>\n List\n </button>\n </div>\n\n {/* Board View */}\n {roadmapView === \"board\" && (\n <div style={{\n display: \"flex\",\n gap: 12,\n flex: 1,\n minHeight: 0,\n overflow: \"hidden\",\n flexDirection: isMobile ? \"column\" : \"row\",\n overflowY: isMobile ? \"auto\" : \"hidden\",\n }}>\n {roadmapColumns.map((col) => {\n const colItems = roadmapItems.filter(item => item.columnId === col.id);\n const isCollapsed = isMobile && collapsedColumns.has(col.id);\n return (\n <div key={col.id} style={{\n flex: isMobile ? \"none\" : 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: isMobile ? \"auto\" : 0,\n }}>\n <button\n onClick={() => isMobile && setCollapsedColumns(prev => {\n const s = new Set(prev);\n s.has(col.id) ? s.delete(col.id) : s.add(col.id);\n return s;\n })}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n fontWeight: 600,\n color: isLight ? \"#a1a1aa\" : \"#71717a\",\n marginBottom: 8,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n flexShrink: 0,\n background: \"none\",\n border: \"none\",\n cursor: isMobile ? \"pointer\" : \"default\",\n padding: 0,\n width: \"100%\",\n textAlign: \"left\",\n }}\n >\n {isMobile && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" style={{ transform: isCollapsed ? \"rotate(-90deg)\" : \"rotate(0)\", transition: \"transform 150ms\" }}>\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n {col.name}\n <span style={{\n padding: \"1px 6px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n }}>\n {colItems.length}\n </span>\n </button>\n {!isCollapsed && (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n flex: isMobile ? \"none\" : 1,\n overflowY: isMobile ? \"visible\" : \"auto\",\n minHeight: 0,\n paddingRight: isMobile ? 0 : 2,\n paddingBottom: isMobile ? 12 : 0,\n }}>\n {colItems.map((item) => {\n const priorityColor = PRIORITY_COLORS[item.priority || \"\"] || \"transparent\";\n return (\n <div\n key={item.id}\n style={{\n padding: \"12px 14px\",\n borderRadius: 8,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n borderLeft: `3px solid ${priorityColor}`,\n transition: \"border-color 150ms\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.borderColor = isLight ? \"#d4d4d8\" : \"#3f3f46\"}\n onMouseLeave={(e) => e.currentTarget.style.borderColor = isLight ? \"#e5e5e5\" : \"#1f1f1f\"}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, marginBottom: 4 }}>\n <span style={{ fontSize: 13 }}>{TYPE_EMOJIS[item.type || \"\"] || \"π\"}</span>\n <span style={{ fontSize: 13, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {item.title}\n </span>\n </div>\n {item.description && (\n <p style={{\n fontSize: 12,\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n margin: \"0 0 0 0\",\n lineHeight: 1.4,\n overflow: \"hidden\",\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n }}>\n {item.description}\n </p>\n )}\n </div>\n {item.itemType === \"idea\" && (\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: isLight ? \"#ea580c\" : \"#fb923c\",\n background: isLight ? \"rgba(249,115,22,0.1)\" : \"rgba(249,115,22,0.15)\",\n padding: \"2px 6px\",\n borderRadius: 4,\n flexShrink: 0,\n }}>\n {item.votes ?? 0}β\n </span>\n )}\n </div>\n </div>\n );\n })}\n {colItems.length === 0 && (\n <div style={{\n padding: 20,\n textAlign: \"center\",\n fontSize: 13,\n color: isLight ? \"#a1a1aa\" : \"#525252\",\n borderRadius: 8,\n border: `1px dashed ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n }}>\n No items\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* List View */}\n {roadmapView === \"list\" && (\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {roadmapColumns.map((col) => {\n const colItems = roadmapItems.filter(item => item.columnId === col.id);\n if (colItems.length === 0) return null;\n return (\n <div key={col.id} style={{ marginBottom: 20 }}>\n <h3 style={{\n fontSize: 12,\n fontWeight: 600,\n color: isLight ? \"#a1a1aa\" : \"#71717a\",\n marginBottom: 8,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}>\n {col.name}\n <span style={{\n padding: \"1px 6px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n }}>\n {colItems.length}\n </span>\n </h3>\n {colItems.map((item) => (\n <div\n key={item.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"10px 12px\",\n borderRadius: 6,\n marginBottom: 4,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#f0f0f0\" : \"#1a1a1a\"}`,\n }}\n >\n <span style={{ fontSize: 13, flexShrink: 0 }}>{TYPE_EMOJIS[item.type || \"\"] || \"π\"}</span>\n <span style={{ fontSize: 13, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\", flex: 1, minWidth: 0 }}>\n {item.title}\n </span>\n {item.priority && (\n <span style={{\n padding: \"2px 8px\",\n fontSize: 10,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: PRIORITY_COLORS[item.priority] || (isLight ? \"#71717a\" : \"#a1a1aa\"),\n flexShrink: 0,\n }}>\n {item.priority}\n </span>\n )}\n </div>\n ))}\n </div>\n );\n })}\n </div>\n )}\n </>\n )}\n </div>\n )}\n\n {/* Ideas Tab */}\n {activeTab === \"ideas\" && (\n <div style={{ maxWidth: 640, width: \"100%\", overflowY: \"auto\", flex: 1 }}>\n {/* Submit Idea Button/Form */}\n {!showIdeaForm ? (\n <button\n onClick={() => setShowIdeaForm(true)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"12px 16px\",\n marginBottom: 20,\n borderRadius: 999,\n border: `1px solid ${isLight ? \"#22c55e\" : \"rgba(34,197,94,0.4)\"}`,\n background: isLight ? \"rgba(34,197,94,0.05)\" : \"rgba(34,197,94,0.08)\",\n color: \"#22c55e\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n transition: \"all 150ms\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = isLight ? \"rgba(34,197,94,0.1)\" : \"rgba(34,197,94,0.15)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = isLight ? \"rgba(34,197,94,0.05)\" : \"rgba(34,197,94,0.08)\";\n }}\n >\n <span style={{ fontSize: 16 }}>π‘</span>\n Suggest a feature\n </button>\n ) : (\n <div\n style={{\n padding: 16,\n marginBottom: 20,\n borderRadius: 12,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <span style={{ fontWeight: 600, fontSize: 15, color: isLight ? \"#18181b\" : \"#fff\" }}>Suggest a Feature</span>\n <button\n onClick={() => { setShowIdeaForm(false); setIdeaSubmitMessage(null); }}\n style={{ background: \"transparent\", border: \"none\", color: isLight ? \"#71717a\" : \"#a1a1aa\", cursor: \"pointer\", fontSize: 18 }}\n >\n Γ\n </button>\n </div>\n <input\n type=\"text\"\n value={ideaTitle}\n onChange={(e) => setIdeaTitle(e.target.value)}\n placeholder=\"Feature title *\"\n style={{\n width: \"100%\", padding: \"10px 12px\", marginBottom: 8, borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 14, outline: \"none\", boxSizing: \"border-box\",\n }}\n />\n <textarea\n value={ideaDescription}\n onChange={(e) => setIdeaDescription(e.target.value)}\n placeholder=\"Describe your idea...\"\n rows={3}\n style={{\n width: \"100%\", padding: \"10px 12px\", marginBottom: 8, borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 14, outline: \"none\", resize: \"none\", boxSizing: \"border-box\",\n }}\n />\n <div style={{ display: \"grid\", gridTemplateColumns: isMobile ? \"1fr\" : \"1fr 1fr\", gap: 8, marginBottom: 12 }}>\n <input\n type=\"text\"\n value={ideaAuthorName}\n onChange={(e) => setIdeaAuthorName(e.target.value)}\n placeholder=\"Your name\"\n style={{\n width: \"100%\", padding: \"8px 12px\", borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 13, outline: \"none\", boxSizing: \"border-box\",\n }}\n />\n <input\n type=\"email\"\n value={ideaAuthorEmail}\n onChange={(e) => setIdeaAuthorEmail(e.target.value)}\n placeholder=\"Email *\"\n style={{\n width: \"100%\", padding: \"8px 12px\", borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 13, outline: \"none\", boxSizing: \"border-box\",\n }}\n />\n </div>\n {ideaSubmitMessage && (\n <div style={{\n padding: \"8px 12px\", marginBottom: 12, borderRadius: 8,\n background: ideaSubmitMessage.type === 'success' ? (isLight ? \"#dcfce7\" : \"#14532d\") : (isLight ? \"#fee2e2\" : \"#450a0a\"),\n color: ideaSubmitMessage.type === 'success' ? (isLight ? \"#166534\" : \"#86efac\") : (isLight ? \"#dc2626\" : \"#fca5a5\"),\n fontSize: 13,\n }}>\n {ideaSubmitMessage.text}\n </div>\n )}\n <button\n onClick={submitIdea}\n disabled={submittingIdea || !ideaTitle.trim() || !ideaAuthorEmail.trim()}\n style={{\n width: \"100%\", padding: \"10px 16px\", borderRadius: 999,\n border: \"none\", background: \"#22c55e\", color: \"#fff\",\n fontSize: 14, fontWeight: 500,\n cursor: submittingIdea || !ideaTitle.trim() || !ideaAuthorEmail.trim() ? \"not-allowed\" : \"pointer\",\n opacity: submittingIdea || !ideaTitle.trim() || !ideaAuthorEmail.trim() ? 0.6 : 1,\n transition: \"opacity 150ms\",\n }}\n >\n {submittingIdea ? \"Submitting...\" : \"Submit Idea\"}\n </button>\n </div>\n )}\n\n {/* Ideas List - Grouped by Status */}\n {ideasArray.length === 0 && !showIdeaForm ? (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", padding: 60, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" style={{ marginBottom: 12, opacity: 0.5 }}>\n <path d=\"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n <div style={{ fontSize: 16, fontWeight: 500, marginBottom: 8 }}>No feature requests yet</div>\n <div style={{ fontSize: 13, color: isLight ? \"#a1a1aa\" : \"#525252\" }}>Be the first to suggest one!</div>\n </div>\n ) : (\n (() => {\n const statusOrder = [\"under review\", \"planned\", \"in progress\", \"new\", \"shipped\"];\n const grouped: Record<string, Idea[]> = {};\n ideasArray.forEach(idea => {\n const status = (idea.status || \"new\").toLowerCase();\n if (!grouped[status]) grouped[status] = [];\n grouped[status].push(idea);\n });\n\n return statusOrder.map(status => {\n const items = grouped[status];\n if (!items || items.length === 0) return null;\n const cfg = STATUS_CONFIG[status] || { color: \"#71717a\", label: status };\n return (\n <div key={status} style={{ marginBottom: 20 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 10 }}>\n <span style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: cfg.color,\n flexShrink: 0,\n }} />\n <span style={{ fontSize: 13, fontWeight: 600, color: isLight ? \"#52525b\" : \"#a1a1aa\", textTransform: \"uppercase\", letterSpacing: \"0.5px\" }}>\n {cfg.label}\n </span>\n <span style={{\n padding: \"1px 6px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n }}>\n {items.length}\n </span>\n </div>\n {items.map((idea) => {\n const hasVoted = votedIdeas.has(idea.id) || idea.hasVoted;\n return (\n <div\n key={idea.id}\n style={{\n padding: isMobile ? 12 : 16,\n marginBottom: 8,\n borderRadius: 10,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: isMobile ? 10 : 16,\n }}\n >\n {/* Vote Button */}\n <button\n onClick={() => voteIdea(idea.id)}\n disabled={hasVoted}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"8px 12px\",\n borderRadius: 8,\n background: hasVoted\n ? (isLight ? \"#dcfce7\" : \"rgba(34,197,94,0.15)\")\n : (isLight ? \"#fff\" : \"#0a0a0a\"),\n border: `1px solid ${hasVoted ? \"#22c55e\" : (isLight ? \"#e5e5e5\" : \"#2a2a2a\")}`,\n minWidth: 48,\n cursor: hasVoted ? \"default\" : \"pointer\",\n transition: \"all 150ms\",\n }}\n onMouseEnter={(e) => {\n if (!hasVoted) {\n e.currentTarget.style.borderColor = \"#22c55e\";\n e.currentTarget.style.background = isLight ? \"#f0fdf4\" : \"rgba(34,197,94,0.1)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasVoted) {\n e.currentTarget.style.borderColor = isLight ? \"#e5e5e5\" : \"#2a2a2a\";\n e.currentTarget.style.background = isLight ? \"#fff\" : \"#0a0a0a\";\n }\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill={hasVoted ? \"#22c55e\" : \"none\"} stroke={hasVoted ? \"#22c55e\" : (isLight ? \"#71717a\" : \"#a1a1aa\")} strokeWidth=\"2\">\n <path d=\"M18 15l-6-6-6 6\" />\n </svg>\n <span style={{ fontSize: 16, fontWeight: 600, color: hasVoted ? \"#22c55e\" : (isLight ? \"#18181b\" : \"#fff\") }}>\n {idea.votes}\n </span>\n </button>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 4, flexWrap: \"wrap\" }}>\n <a\n href={`${baseUrl}/${projectId}/feature-requests`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: 15, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\", textDecoration: \"none\" }}\n onMouseEnter={(e) => e.currentTarget.style.textDecoration = \"underline\"}\n onMouseLeave={(e) => e.currentTarget.style.textDecoration = \"none\"}\n >\n {idea.title}\n </a>\n {idea.status && (\n <span style={{\n padding: \"2px 8px\",\n fontSize: 10,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? `${cfg.color}15` : `${cfg.color}20`,\n color: cfg.color,\n textTransform: \"uppercase\",\n letterSpacing: \"0.3px\",\n }}>\n {cfg.label}\n </span>\n )}\n </div>\n {idea.description && (\n <div style={{ fontSize: 14, color: isLight ? \"#71717a\" : \"#a1a1aa\", lineHeight: 1.5 }}>\n {idea.description}\n </div>\n )}\n <a\n href={`${baseUrl}/${projectId}/feature-requests`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: 12, color: isLight ? \"#71717a\" : \"#a1a1aa\", textDecoration: \"none\", marginTop: 6, display: \"inline-flex\", alignItems: \"center\", gap: 4 }}\n onMouseEnter={(e) => e.currentTarget.style.color = \"#22c55e\"}\n onMouseLeave={(e) => e.currentTarget.style.color = isLight ? \"#71717a\" : \"#a1a1aa\"}\n >\n Join discussion β\n </a>\n </div>\n </div>\n );\n })}\n </div>\n );\n });\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 </>,\n document.body\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":["style","clsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { createPortal } from \"react-dom\";\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 columnId?: string;\n columnName?: string;\n description?: string | null;\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 RoadmapBoardItem {\n id: string;\n title: string;\n description?: string | null;\n type?: string;\n priority?: string;\n votes?: number;\n itemType: \"task\" | \"idea\";\n columnId: string;\n createdAt?: string | number;\n}\n\nexport interface RoadmapBoardColumn {\n id: string;\n name: string;\n}\n\nexport interface RoadmapAPIResponse {\n project: ProjectInfo;\n columns?: RoadmapBoardColumn[];\n items?: RoadmapBoardItem[];\n // Legacy format\n tasks?: RoadmapTask[] | { inProgress?: RoadmapTask[]; planned?: 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 \"in progress\": \"In Progress\",\n inProgress: \"In Progress\",\n done: \"Shipped\",\n shipped: \"Shipped\",\n completed: \"Shipped\",\n};\n\nconst TYPE_EMOJIS: Record<string, string> = {\n feature: \"β¨\",\n bug: \"π\",\n improvement: \"π\",\n chore: \"π§\",\n idea: \"π‘\",\n};\n\nconst PRIORITY_COLORS: Record<string, string> = {\n urgent: \"#ef4444\",\n high: \"#f97316\",\n medium: \"#3b82f6\",\n low: \"#9ca3af\",\n};\n\nconst STATUS_CONFIG: Record<string, { color: string; label: string }> = {\n new: { color: \"#3b82f6\", label: \"New\" },\n \"under review\": { color: \"#f59e0b\", label: \"Under Review\" },\n planned: { color: \"#8b5cf6\", label: \"Planned\" },\n \"in progress\": { color: \"#3b82f6\", label: \"In Progress\" },\n shipped: { color: \"#22c55e\", label: \"Shipped\" },\n declined: { color: \"#ef4444\", label: \"Declined\" },\n};\n\nconst FADE_IN_KEYFRAMES = `\n@keyframes vpFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n@keyframes vpSlideUp {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\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 [roadmapColumns, setRoadmapColumns] = useState<RoadmapBoardColumn[]>([]);\n const [roadmapItems, setRoadmapItems] = useState<RoadmapBoardItem[]>([]);\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 // Idea submission state\n const [showIdeaForm, setShowIdeaForm] = useState(false);\n const [ideaTitle, setIdeaTitle] = useState(\"\");\n const [ideaDescription, setIdeaDescription] = useState(\"\");\n const [ideaAuthorName, setIdeaAuthorName] = useState(\"\");\n const [ideaAuthorEmail, setIdeaAuthorEmail] = useState(\"\");\n const [submittingIdea, setSubmittingIdea] = useState(false);\n const [ideaSubmitMessage, setIdeaSubmitMessage] = useState<{ type: 'success' | 'error', text: string } | null>(null);\n\n // Enhanced UX state\n const [roadmapView, setRoadmapView] = useState<\"board\" | \"list\">(\"board\");\n const [isMobile, setIsMobile] = useState(false);\n const [votedIdeas, setVotedIdeas] = useState<Set<string>>(new Set());\n const [collapsedColumns, setCollapsedColumns] = useState<Set<string>>(new Set());\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\n // New format: columns + items (3-column board)\n if (data.columns && data.items) {\n setRoadmapColumns(data.columns);\n setRoadmapItems(data.items);\n return;\n }\n\n // Legacy fallback: flatten grouped tasks into board items\n let tasks: RoadmapTask[] = [];\n if (Array.isArray(data.tasks)) {\n tasks = data.tasks;\n } else if (data.tasks && typeof data.tasks === 'object') {\n const grouped = data.tasks as { inProgress?: any[]; planned?: any[] };\n const mapTask = (t: any, defaultColumn: string): RoadmapTask => ({\n id: t.id || t._id,\n title: t.title,\n description: t.description,\n type: t.type || 'feature',\n priority: t.priority || 'medium',\n column: t.columnId || defaultColumn,\n columnId: t.columnId,\n columnName: t.columnName,\n });\n const inProgress = (grouped.inProgress || []).map(t => mapTask(t, 'in-progress'));\n const planned = (grouped.planned || []).map(t => mapTask(t, 'todo'));\n tasks = [...inProgress, ...planned];\n }\n\n // Convert legacy tasks to board format\n setRoadmapColumns([\n { id: \"planned\", name: \"Planned\" },\n { id: \"in_progress\", name: \"In Progress\" },\n { id: \"completed\", name: \"Completed\" },\n ]);\n setRoadmapItems(tasks.map(t => ({\n id: t.id,\n title: t.title,\n description: t.description,\n type: t.type,\n priority: t.priority,\n itemType: \"task\" as const,\n columnId: t.column === \"in-progress\" ? \"in_progress\" : t.column === \"done\" || t.column === \"shipped\" ? \"completed\" : \"planned\",\n })));\n setRoadmapTasks(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 // Submit idea\n const submitIdea = useCallback(async () => {\n if (!ideaTitle.trim() || !ideaAuthorEmail.trim()) return;\n setSubmittingIdea(true);\n setIdeaSubmitMessage(null);\n try {\n const response = await fetch(`${baseUrl}/api/ideas/${projectId}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n title: ideaTitle.trim(),\n description: ideaDescription.trim() || \"\",\n authorName: ideaAuthorName.trim() || undefined,\n authorEmail: ideaAuthorEmail.trim(),\n }),\n });\n if (!response.ok) {\n const error = await response.json().catch(() => ({ error: 'Failed to submit' }));\n throw new Error(error.error || 'Failed to submit idea');\n }\n setIdeaSubmitMessage({ type: 'success', text: 'Thanks! Your idea has been submitted.' });\n setIdeaTitle(\"\");\n setIdeaDescription(\"\");\n setIdeaAuthorName(\"\");\n setIdeaAuthorEmail(\"\");\n setShowIdeaForm(false);\n fetchIdeas();\n } catch (err: any) {\n setIdeaSubmitMessage({ type: 'error', text: err.message || 'Failed to submit idea' });\n } finally {\n setSubmittingIdea(false);\n }\n }, [baseUrl, projectId, ideaTitle, ideaDescription, ideaAuthorName, ideaAuthorEmail, fetchIdeas]);\n\n // Vote on an idea\n const voteIdea = useCallback(async (ideaId: string) => {\n if (votedIdeas.has(ideaId)) return;\n // Optimistic update\n setIdeas(prev => prev.map(i => i.id === ideaId ? { ...i, votes: i.votes + 1 } : i));\n setVotedIdeas(prev => new Set(prev).add(ideaId));\n try {\n await fetch(`${baseUrl}/api/vote/${ideaId}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n });\n } catch {\n // Revert on failure\n setIdeas(prev => prev.map(i => i.id === ideaId ? { ...i, votes: i.votes - 1 } : i));\n setVotedIdeas(prev => { const s = new Set(prev); s.delete(ideaId); return s; });\n }\n }, [baseUrl, projectId, votedIdeas]);\n\n useEffect(() => {\n fetchVersion();\n }, [fetchVersion]);\n\n // Body scroll lock\n useEffect(() => {\n if (isOpen) {\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => { document.body.style.overflow = prev; };\n }\n }, [isOpen]);\n\n // ESC to close\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setIsOpen(false);\n };\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [isOpen]);\n\n // Mobile detection\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < 640);\n check();\n window.addEventListener(\"resize\", check);\n return () => window.removeEventListener(\"resize\", check);\n }, []);\n\n // Inject keyframe animations\n useEffect(() => {\n if (!isOpen) return;\n const id = \"vp-modal-keyframes\";\n if (document.getElementById(id)) return;\n const style = document.createElement(\"style\");\n style.id = id;\n style.textContent = FADE_IN_KEYFRAMES;\n document.head.appendChild(style);\n return () => { document.getElementById(id)?.remove(); };\n }, [isOpen]);\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 ideasArray = Array.isArray(ideas) ? ideas : [];\n\n return (\n <>\n <div className={clsx(positionStyles[position], className)} style={{ display: \"inline-flex\" }}>\n {renderBadge()}\n </div>\n\n {isOpen && createPortal(\n <>\n {/* Backdrop */}\n <div\n onClick={() => setIsOpen(false)}\n style={{\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 2147483646,\n background: \"rgba(0,0,0,0.5)\",\n animation: \"vpFadeIn 200ms ease-out\",\n }}\n />\n {/* Modal */}\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n position: \"fixed\",\n top: isMobile ? 0 : 20,\n left: isMobile ? 0 : 20,\n right: isMobile ? 0 : 20,\n bottom: isMobile ? 0 : 20,\n zIndex: 2147483647,\n display: \"flex\",\n flexDirection: \"column\",\n boxSizing: \"border-box\",\n background: isLight ? \"#fff\" : \"#0a0a0a\",\n borderRadius: isMobile ? 0 : 16,\n overflow: \"hidden\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.25)\",\n animation: \"vpSlideUp 250ms ease-out\",\n }}\n >\n {/* Header */}\n <div\n style={{\n flexShrink: 0,\n padding: isMobile ? \"12px 16px\" : \"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: isMobile ? 8 : 12 }}>\n {project?.icon && <span style={{ fontSize: isMobile ? 20 : 24 }}>{project.icon}</span>}\n <div>\n <h2 style={{ fontWeight: 600, fontSize: isMobile ? 16 : 18, color: isLight ? \"#18181b\" : \"#fff\", margin: 0 }}>\n {project?.name || \"What's New\"}\n </h2>\n <p style={{ fontSize: 12, 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 justifyContent: \"center\",\n gap: 2,\n padding: isMobile ? \"8px 12px\" : \"10px 20px\",\n borderBottom: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n overflowX: \"auto\",\n }}\n >\n {([\"changelog\", \"roadmap\", \"ideas\"] as ModalTab[]).map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n padding: isMobile ? \"8px 16px\" : \"8px 20px\",\n borderRadius: 999,\n border: \"none\",\n cursor: \"pointer\",\n fontSize: isMobile ? 13 : 14,\n fontWeight: 500,\n whiteSpace: \"nowrap\",\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 onMouseEnter={(e) => {\n if (activeTab !== tab) {\n e.currentTarget.style.background = isLight ? \"#f4f4f5\" : \"#1f1f1f\";\n }\n }}\n onMouseLeave={(e) => {\n if (activeTab !== tab) {\n e.currentTarget.style.background = \"transparent\";\n }\n }}\n >\n {tab === \"changelog\" && \"π Changelog\"}\n {tab === \"roadmap\" && \"πΊοΈ Roadmap\"}\n {tab === \"ideas\" && \"π‘ Ideas\"}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, overflow: activeTab === \"roadmap\" ? \"hidden\" : \"auto\", padding: isMobile ? \"16px\" : \"20px 24px\", minHeight: 0, display: \"flex\", flexDirection: \"column\", alignItems: \"center\" }}>\n {/* Changelog Tab */}\n {activeTab === \"changelog\" && (\n <div style={{ maxWidth: 640, width: \"100%\", overflowY: \"auto\", flex: 1 }}>\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 <>\n {versionsArray.slice(0, 10).map((version, idx) => {\n const isLatest = idx === 0;\n return (\n <div key={idx} style={{\n marginBottom: 24,\n paddingBottom: 24,\n paddingLeft: isLatest ? 16 : 0,\n borderLeft: isLatest ? `3px solid #22c55e` : \"none\",\n borderBottom: idx < versionsArray.length - 1 && idx < 9 ? `1px solid ${isLight ? \"#f0f0f0\" : \"#1f1f1f\"}` : \"none\",\n }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 6, flexWrap: \"wrap\" }}>\n <span style={{ fontSize: isLatest ? 22 : 20 }}>{version.emoji || \"π¦\"}</span>\n <span style={{ fontWeight: 600, fontSize: isLatest ? 20 : 18, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {version.title}\n </span>\n {isLatest && (\n <span style={{\n padding: \"2px 8px\",\n fontSize: 10,\n fontWeight: 600,\n borderRadius: 999,\n background: isLight ? \"#dcfce7\" : \"rgba(34,197,94,0.15)\",\n color: \"#22c55e\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n }}>\n Latest\n </span>\n )}\n <span\n style={{\n padding: \"3px 10px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: version.type === \"major\"\n ? (isLight ? \"#f3e8ff\" : \"rgba(147,51,234,0.15)\")\n : version.type === \"minor\"\n ? (isLight ? \"#dbeafe\" : \"rgba(59,130,246,0.15)\")\n : (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 {version.tasks && version.tasks.length > 0 && (\n <div style={{ marginTop: 10, paddingTop: 10, borderTop: `1px solid ${isLight ? \"#f0f0f0\" : \"#1f1f1f\"}` }}>\n {version.tasks.map((task, i) => (\n <div key={i} style={{ display: \"flex\", alignItems: \"center\", gap: 8, fontSize: 13, color: isLight ? \"#71717a\" : \"#a1a1aa\", marginBottom: 4 }}>\n <span style={{\n width: 6,\n height: 6,\n borderRadius: \"50%\",\n background: TYPE_COLORS[task.type] || \"#71717a\",\n flexShrink: 0,\n }} />\n {task.title}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n {versionsArray.length > 10 && (\n <a\n href={`${baseUrl}/${projectId}/changelog`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: \"block\",\n textAlign: \"center\",\n padding: 12,\n fontSize: 14,\n color: \"#22c55e\",\n textDecoration: \"none\",\n }}\n >\n View all releases β\n </a>\n )}\n </>\n )}\n </div>\n )}\n\n {/* Roadmap Tab */}\n {activeTab === \"roadmap\" && (\n <div style={{ display: \"flex\", flexDirection: \"column\", flex: 1, minHeight: 0, width: \"100%\" }}>\n {roadmapItems.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 <>\n {/* View Toggle */}\n <div style={{ display: \"flex\", gap: 4, marginBottom: 12, flexShrink: 0 }}>\n <button\n onClick={() => setRoadmapView(\"board\")}\n style={{\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${roadmapView === \"board\" ? (isLight ? \"#18181b\" : \"#fff\") : (isLight ? \"#e5e5e5\" : \"#2a2a2a\")}`,\n background: roadmapView === \"board\" ? (isLight ? \"#18181b\" : \"#fff\") : \"transparent\",\n color: roadmapView === \"board\" ? (isLight ? \"#fff\" : \"#18181b\") : (isLight ? \"#71717a\" : \"#a1a1aa\"),\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"/></svg>\n Board\n </button>\n <button\n onClick={() => setRoadmapView(\"list\")}\n style={{\n padding: \"6px 10px\",\n borderRadius: 6,\n border: `1px solid ${roadmapView === \"list\" ? (isLight ? \"#18181b\" : \"#fff\") : (isLight ? \"#e5e5e5\" : \"#2a2a2a\")}`,\n background: roadmapView === \"list\" ? (isLight ? \"#18181b\" : \"#fff\") : \"transparent\",\n color: roadmapView === \"list\" ? (isLight ? \"#fff\" : \"#18181b\") : (isLight ? \"#71717a\" : \"#a1a1aa\"),\n cursor: \"pointer\",\n fontSize: 12,\n fontWeight: 500,\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"/><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"/><line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"/><line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"/><line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"/></svg>\n List\n </button>\n </div>\n\n {/* Board View */}\n {roadmapView === \"board\" && (\n <div style={{\n display: \"flex\",\n gap: 12,\n flex: 1,\n minHeight: 0,\n overflow: \"hidden\",\n flexDirection: isMobile ? \"column\" : \"row\",\n overflowY: isMobile ? \"auto\" : \"hidden\",\n }}>\n {roadmapColumns.map((col) => {\n const colItems = roadmapItems.filter(item => item.columnId === col.id);\n const isCollapsed = isMobile && collapsedColumns.has(col.id);\n return (\n <div key={col.id} style={{\n flex: isMobile ? \"none\" : 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: isMobile ? \"auto\" : 0,\n }}>\n <button\n onClick={() => isMobile && setCollapsedColumns(prev => {\n const s = new Set(prev);\n s.has(col.id) ? s.delete(col.id) : s.add(col.id);\n return s;\n })}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n fontSize: 12,\n fontWeight: 600,\n color: isLight ? \"#a1a1aa\" : \"#71717a\",\n marginBottom: 8,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n flexShrink: 0,\n background: \"none\",\n border: \"none\",\n cursor: isMobile ? \"pointer\" : \"default\",\n padding: 0,\n width: \"100%\",\n textAlign: \"left\",\n }}\n >\n {isMobile && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" style={{ transform: isCollapsed ? \"rotate(-90deg)\" : \"rotate(0)\", transition: \"transform 150ms\" }}>\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n {col.name}\n <span style={{\n padding: \"1px 6px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n }}>\n {colItems.length}\n </span>\n </button>\n {!isCollapsed && (\n <div style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n flex: isMobile ? \"none\" : 1,\n overflowY: isMobile ? \"visible\" : \"auto\",\n minHeight: 0,\n paddingRight: isMobile ? 0 : 2,\n paddingBottom: isMobile ? 12 : 0,\n }}>\n {colItems.map((item) => {\n const priorityColor = PRIORITY_COLORS[item.priority || \"\"] || \"transparent\";\n return (\n <div\n key={item.id}\n style={{\n padding: \"12px 14px\",\n borderRadius: 8,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n borderLeft: `3px solid ${priorityColor}`,\n transition: \"border-color 150ms\",\n }}\n onMouseEnter={(e) => e.currentTarget.style.borderColor = isLight ? \"#d4d4d8\" : \"#3f3f46\"}\n onMouseLeave={(e) => e.currentTarget.style.borderColor = isLight ? \"#e5e5e5\" : \"#1f1f1f\"}\n >\n <div style={{ display: \"flex\", alignItems: \"flex-start\", gap: 8 }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6, marginBottom: 4 }}>\n <span style={{ fontSize: 13 }}>{TYPE_EMOJIS[item.type || \"\"] || \"π\"}</span>\n <span style={{ fontSize: 13, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\" }}>\n {item.title}\n </span>\n </div>\n {item.description && (\n <p style={{\n fontSize: 12,\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n margin: \"0 0 0 0\",\n lineHeight: 1.4,\n overflow: \"hidden\",\n display: \"-webkit-box\",\n WebkitLineClamp: 2,\n WebkitBoxOrient: \"vertical\",\n }}>\n {item.description}\n </p>\n )}\n </div>\n {item.itemType === \"idea\" && (\n <span style={{\n fontSize: 11,\n fontWeight: 600,\n color: isLight ? \"#ea580c\" : \"#fb923c\",\n background: isLight ? \"rgba(249,115,22,0.1)\" : \"rgba(249,115,22,0.15)\",\n padding: \"2px 6px\",\n borderRadius: 4,\n flexShrink: 0,\n }}>\n {item.votes ?? 0}β\n </span>\n )}\n </div>\n </div>\n );\n })}\n {colItems.length === 0 && (\n <div style={{\n padding: 20,\n textAlign: \"center\",\n fontSize: 13,\n color: isLight ? \"#a1a1aa\" : \"#525252\",\n borderRadius: 8,\n border: `1px dashed ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n }}>\n No items\n </div>\n )}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n\n {/* List View */}\n {roadmapView === \"list\" && (\n <div style={{ flex: 1, overflowY: \"auto\", minHeight: 0 }}>\n {roadmapColumns.map((col) => {\n const colItems = roadmapItems.filter(item => item.columnId === col.id);\n if (colItems.length === 0) return null;\n return (\n <div key={col.id} style={{ marginBottom: 20 }}>\n <h3 style={{\n fontSize: 12,\n fontWeight: 600,\n color: isLight ? \"#a1a1aa\" : \"#71717a\",\n marginBottom: 8,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 6,\n }}>\n {col.name}\n <span style={{\n padding: \"1px 6px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n }}>\n {colItems.length}\n </span>\n </h3>\n {colItems.map((item) => (\n <div\n key={item.id}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"10px 12px\",\n borderRadius: 6,\n marginBottom: 4,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#f0f0f0\" : \"#1a1a1a\"}`,\n }}\n >\n <span style={{ fontSize: 13, flexShrink: 0 }}>{TYPE_EMOJIS[item.type || \"\"] || \"π\"}</span>\n <span style={{ fontSize: 13, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\", flex: 1, minWidth: 0 }}>\n {item.title}\n </span>\n {item.priority && (\n <span style={{\n padding: \"2px 8px\",\n fontSize: 10,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: PRIORITY_COLORS[item.priority] || (isLight ? \"#71717a\" : \"#a1a1aa\"),\n flexShrink: 0,\n }}>\n {item.priority}\n </span>\n )}\n </div>\n ))}\n </div>\n );\n })}\n </div>\n )}\n </>\n )}\n </div>\n )}\n\n {/* Ideas Tab */}\n {activeTab === \"ideas\" && (\n <div style={{ maxWidth: 640, width: \"100%\", overflowY: \"auto\", flex: 1 }}>\n {/* Submit Idea Button/Form */}\n {!showIdeaForm ? (\n <button\n onClick={() => setShowIdeaForm(true)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n width: \"100%\",\n padding: \"12px 16px\",\n marginBottom: 20,\n borderRadius: 999,\n border: `1px solid ${isLight ? \"#22c55e\" : \"rgba(34,197,94,0.4)\"}`,\n background: isLight ? \"rgba(34,197,94,0.05)\" : \"rgba(34,197,94,0.08)\",\n color: \"#22c55e\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n transition: \"all 150ms\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = isLight ? \"rgba(34,197,94,0.1)\" : \"rgba(34,197,94,0.15)\";\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = isLight ? \"rgba(34,197,94,0.05)\" : \"rgba(34,197,94,0.08)\";\n }}\n >\n <span style={{ fontSize: 16 }}>π‘</span>\n Suggest a feature\n </button>\n ) : (\n <div\n style={{\n padding: 16,\n marginBottom: 20,\n borderRadius: 12,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", marginBottom: 12 }}>\n <span style={{ fontWeight: 600, fontSize: 15, color: isLight ? \"#18181b\" : \"#fff\" }}>Suggest a Feature</span>\n <button\n onClick={() => { setShowIdeaForm(false); setIdeaSubmitMessage(null); }}\n style={{ background: \"transparent\", border: \"none\", color: isLight ? \"#71717a\" : \"#a1a1aa\", cursor: \"pointer\", fontSize: 18 }}\n >\n Γ\n </button>\n </div>\n <input\n type=\"text\"\n value={ideaTitle}\n onChange={(e) => setIdeaTitle(e.target.value)}\n placeholder=\"Feature title *\"\n style={{\n width: \"100%\", padding: \"10px 12px\", marginBottom: 8, borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 14, outline: \"none\", boxSizing: \"border-box\",\n }}\n />\n <textarea\n value={ideaDescription}\n onChange={(e) => setIdeaDescription(e.target.value)}\n placeholder=\"Describe your idea...\"\n rows={3}\n style={{\n width: \"100%\", padding: \"10px 12px\", marginBottom: 8, borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 14, outline: \"none\", resize: \"none\", boxSizing: \"border-box\",\n }}\n />\n <div style={{ display: \"grid\", gridTemplateColumns: isMobile ? \"1fr\" : \"1fr 1fr\", gap: 8, marginBottom: 12 }}>\n <input\n type=\"text\"\n value={ideaAuthorName}\n onChange={(e) => setIdeaAuthorName(e.target.value)}\n placeholder=\"Your name\"\n style={{\n width: \"100%\", padding: \"8px 12px\", borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 13, outline: \"none\", boxSizing: \"border-box\",\n }}\n />\n <input\n type=\"email\"\n value={ideaAuthorEmail}\n onChange={(e) => setIdeaAuthorEmail(e.target.value)}\n placeholder=\"Email *\"\n style={{\n width: \"100%\", padding: \"8px 12px\", borderRadius: 8,\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#2a2a2a\"}`,\n background: isLight ? \"#fff\" : \"#0a0a0a\", color: isLight ? \"#18181b\" : \"#fff\",\n fontSize: 13, outline: \"none\", boxSizing: \"border-box\",\n }}\n />\n </div>\n {ideaSubmitMessage && (\n <div style={{\n padding: \"8px 12px\", marginBottom: 12, borderRadius: 8,\n background: ideaSubmitMessage.type === 'success' ? (isLight ? \"#dcfce7\" : \"#14532d\") : (isLight ? \"#fee2e2\" : \"#450a0a\"),\n color: ideaSubmitMessage.type === 'success' ? (isLight ? \"#166534\" : \"#86efac\") : (isLight ? \"#dc2626\" : \"#fca5a5\"),\n fontSize: 13,\n }}>\n {ideaSubmitMessage.text}\n </div>\n )}\n <button\n onClick={submitIdea}\n disabled={submittingIdea || !ideaTitle.trim() || !ideaAuthorEmail.trim()}\n style={{\n width: \"100%\", padding: \"10px 16px\", borderRadius: 999,\n border: \"none\", background: \"#22c55e\", color: \"#fff\",\n fontSize: 14, fontWeight: 500,\n cursor: submittingIdea || !ideaTitle.trim() || !ideaAuthorEmail.trim() ? \"not-allowed\" : \"pointer\",\n opacity: submittingIdea || !ideaTitle.trim() || !ideaAuthorEmail.trim() ? 0.6 : 1,\n transition: \"opacity 150ms\",\n }}\n >\n {submittingIdea ? \"Submitting...\" : \"Submit Idea\"}\n </button>\n </div>\n )}\n\n {/* Ideas List - Grouped by Status */}\n {ideasArray.length === 0 && !showIdeaForm ? (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", padding: 60, color: isLight ? \"#71717a\" : \"#a1a1aa\" }}>\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" style={{ marginBottom: 12, opacity: 0.5 }}>\n <path d=\"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z\" />\n </svg>\n <div style={{ fontSize: 16, fontWeight: 500, marginBottom: 8 }}>No feature requests yet</div>\n <div style={{ fontSize: 13, color: isLight ? \"#a1a1aa\" : \"#525252\" }}>Be the first to suggest one!</div>\n </div>\n ) : (\n (() => {\n const statusOrder = [\"under review\", \"planned\", \"in progress\", \"new\", \"shipped\"];\n const grouped: Record<string, Idea[]> = {};\n ideasArray.forEach(idea => {\n const status = (idea.status || \"new\").toLowerCase();\n if (!grouped[status]) grouped[status] = [];\n grouped[status].push(idea);\n });\n\n return statusOrder.map(status => {\n const items = grouped[status];\n if (!items || items.length === 0) return null;\n const cfg = STATUS_CONFIG[status] || { color: \"#71717a\", label: status };\n return (\n <div key={status} style={{ marginBottom: 20 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 10 }}>\n <span style={{\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: cfg.color,\n flexShrink: 0,\n }} />\n <span style={{ fontSize: 13, fontWeight: 600, color: isLight ? \"#52525b\" : \"#a1a1aa\", textTransform: \"uppercase\", letterSpacing: \"0.5px\" }}>\n {cfg.label}\n </span>\n <span style={{\n padding: \"1px 6px\",\n fontSize: 11,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? \"#f4f4f5\" : \"#1f1f1f\",\n color: isLight ? \"#71717a\" : \"#a1a1aa\",\n }}>\n {items.length}\n </span>\n </div>\n {items.map((idea) => {\n const hasVoted = votedIdeas.has(idea.id) || idea.hasVoted;\n return (\n <div\n key={idea.id}\n style={{\n padding: isMobile ? 12 : 16,\n marginBottom: 8,\n borderRadius: 10,\n background: isLight ? \"#f9fafb\" : \"#151515\",\n border: `1px solid ${isLight ? \"#e5e5e5\" : \"#1f1f1f\"}`,\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: isMobile ? 10 : 16,\n }}\n >\n {/* Vote Button */}\n <button\n onClick={() => voteIdea(idea.id)}\n disabled={hasVoted}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n padding: \"8px 12px\",\n borderRadius: 8,\n background: hasVoted\n ? (isLight ? \"#dcfce7\" : \"rgba(34,197,94,0.15)\")\n : (isLight ? \"#fff\" : \"#0a0a0a\"),\n border: `1px solid ${hasVoted ? \"#22c55e\" : (isLight ? \"#e5e5e5\" : \"#2a2a2a\")}`,\n minWidth: 48,\n cursor: hasVoted ? \"default\" : \"pointer\",\n transition: \"all 150ms\",\n }}\n onMouseEnter={(e) => {\n if (!hasVoted) {\n e.currentTarget.style.borderColor = \"#22c55e\";\n e.currentTarget.style.background = isLight ? \"#f0fdf4\" : \"rgba(34,197,94,0.1)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!hasVoted) {\n e.currentTarget.style.borderColor = isLight ? \"#e5e5e5\" : \"#2a2a2a\";\n e.currentTarget.style.background = isLight ? \"#fff\" : \"#0a0a0a\";\n }\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill={hasVoted ? \"#22c55e\" : \"none\"} stroke={hasVoted ? \"#22c55e\" : (isLight ? \"#71717a\" : \"#a1a1aa\")} strokeWidth=\"2\">\n <path d=\"M18 15l-6-6-6 6\" />\n </svg>\n <span style={{ fontSize: 16, fontWeight: 600, color: hasVoted ? \"#22c55e\" : (isLight ? \"#18181b\" : \"#fff\") }}>\n {idea.votes}\n </span>\n </button>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 8, marginBottom: 4, flexWrap: \"wrap\" }}>\n <a\n href={`${baseUrl}/${projectId}/feature-requests`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: 15, fontWeight: 500, color: isLight ? \"#18181b\" : \"#fff\", textDecoration: \"none\" }}\n onMouseEnter={(e) => e.currentTarget.style.textDecoration = \"underline\"}\n onMouseLeave={(e) => e.currentTarget.style.textDecoration = \"none\"}\n >\n {idea.title}\n </a>\n {idea.status && (\n <span style={{\n padding: \"2px 8px\",\n fontSize: 10,\n fontWeight: 500,\n borderRadius: 999,\n background: isLight ? `${cfg.color}15` : `${cfg.color}20`,\n color: cfg.color,\n textTransform: \"uppercase\",\n letterSpacing: \"0.3px\",\n }}>\n {cfg.label}\n </span>\n )}\n </div>\n {idea.description && (\n <div style={{ fontSize: 14, color: isLight ? \"#71717a\" : \"#a1a1aa\", lineHeight: 1.5 }}>\n {idea.description}\n </div>\n )}\n <a\n href={`${baseUrl}/${projectId}/feature-requests`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ fontSize: 12, color: isLight ? \"#71717a\" : \"#a1a1aa\", textDecoration: \"none\", marginTop: 6, display: \"inline-flex\", alignItems: \"center\", gap: 4 }}\n onMouseEnter={(e) => e.currentTarget.style.color = \"#22c55e\"}\n onMouseLeave={(e) => e.currentTarget.style.color = isLight ? \"#71717a\" : \"#a1a1aa\"}\n >\n Join discussion β\n </a>\n </div>\n </div>\n );\n })}\n </div>\n );\n });\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 </>,\n document.body\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":["style","clsx"]}
|