@industry-theme/github-panels 0.1.31 → 0.1.32

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.
@@ -1 +1 @@
1
- {"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../node_modules/lucide-react/dist/esm/icons/book-open.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/folder.js","../node_modules/lucide-react/dist/esm/icons/funnel.js","../node_modules/lucide-react/dist/esm/icons/git-fork.js","../node_modules/lucide-react/dist/esm/icons/github.js","../node_modules/lucide-react/dist/esm/icons/history.js","../node_modules/lucide-react/dist/esm/icons/lock.js","../node_modules/lucide-react/dist/esm/icons/log-in.js","../node_modules/lucide-react/dist/esm/icons/network.js","../node_modules/lucide-react/dist/esm/icons/scale.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/sparkles.js","../node_modules/lucide-react/dist/esm/icons/star.js","../node_modules/lucide-react/dist/esm/icons/trash-2.js","../node_modules/lucide-react/dist/esm/icons/user.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/components/GitHubProjectCard.tsx","../src/panels/GitHubProjectsPanel.tsx","../src/panels/GitHubSearchPanel.tsx","../src/panels/OwnerRepositoriesPanel.tsx","../src/panels/RecentRepositoriesPanel.tsx","../src/panels/WelcomePanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 28, 32, 36, 48, 56, 68, 84, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.2,\n tight: 1.05,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\", \"1400px\"],\n sizes: [16, 32, 64, 128, 200, 240, 256, 300, 512, 740, 768, 820, 900, 1024, 1200, 1400, 1536],\n radii: [0, 2, 4, 6, 7, 8, 9, 10, 12, 14, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 4px 12px rgba(0, 194, 255, 0.4)\",\n \"0 6px 24px rgba(0, 194, 255, 0.1)\",\n \"0 8px 32px rgba(0, 0, 0, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50, 1000],\n colors: {\n text: \"#ffffff\",\n background: \"#000000\",\n primary: \"#00C2FF\",\n secondary: \"#0098CC\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 194, 255, 0.15)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 194, 255, 0.2)\",\n backgroundSecondary: \"#0a1628\",\n backgroundTertiary: \"#0f1c2e\",\n backgroundLight: \"rgba(0, 194, 255, 0.04)\",\n backgroundHover: \"rgba(0, 194, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.4)\",\n textSecondary: \"#d1d5db\",\n textTertiary: \"#9ca3af\",\n textMuted: \"#6b7280\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#000000\",\n bg: \"#00C2FF\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#00D9FF\"\n }\n },\n secondary: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 194, 255, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 194, 255, 0.1)\",\n borderColor: \"#00C2FF\"\n }\n },\n ghost: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#00D9FF\",\n bg: \"rgba(0, 194, 255, 0.1)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"#ffffff\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\",\n color: \"text\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 4\n },\n secondary: {\n bg: \"rgba(0, 194, 255, 0.05)\",\n border: \"1px solid\",\n borderColor: \"rgba(0, 194, 255, 0.2)\",\n borderRadius: 4\n }\n }\n};\nvar landingPageLightTheme = {\n ...landingPageTheme,\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#0098CC\",\n secondary: \"#00C2FF\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 152, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 152, 204, 0.2)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 152, 204, 0.03)\",\n backgroundHover: \"rgba(0, 152, 204, 0.05)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"#ffffff\",\n bg: \"#0098CC\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#007aa8\"\n }\n },\n secondary: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 152, 204, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 152, 204, 0.05)\",\n borderColor: \"#0098CC\"\n }\n },\n ghost: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#007aa8\",\n bg: \"rgba(0, 152, 204, 0.05)\"\n }\n }\n }\n};\n\n// src/themes.ts\nvar regalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#f1e8dc\",\n background: \"#1a1f2e\",\n primary: \"#d4a574\",\n secondary: \"#e0b584\",\n accent: \"#c9b8a3\",\n highlight: \"rgba(212, 165, 116, 0.15)\",\n muted: \"#8b7968\",\n success: \"#5c8a72\",\n warning: \"#d4a574\",\n error: \"#a85751\",\n info: \"#d4a574\",\n border: \"rgba(212, 165, 116, 0.2)\",\n backgroundSecondary: \"#212738\",\n backgroundTertiary: \"#2d3446\",\n backgroundLight: \"rgba(212, 165, 116, 0.08)\",\n backgroundHover: \"rgba(212, 165, 116, 0.15)\",\n surface: \"#212738\",\n textSecondary: \"#c9b8a3\",\n textTertiary: \"#8b7968\",\n textMuted: \"#8b7968\",\n highlightBg: \"rgba(255, 193, 7, 0.25)\",\n highlightBorder: \"rgba(255, 193, 7, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"background\",\n bg: \"primary\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"muted\",\n \"&:hover\": {\n bg: \"backgroundSecondary\"\n }\n },\n ghost: {\n color: \"primary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"muted\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"background\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar terminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n heading: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px 0 rgba(0, 0, 0, 0.07)\",\n \"0 8px 12px 0 rgba(0, 0, 0, 0.08)\",\n \"0 16px 24px 0 rgba(0, 0, 0, 0.10)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#e4e4e4\",\n background: \"rgba(10, 10, 10, 0.85)\",\n primary: \"#66b3ff\",\n secondary: \"#80c4ff\",\n accent: \"#66ff99\",\n highlight: \"rgba(102, 179, 255, 0.15)\",\n muted: \"rgba(26, 26, 26, 0.8)\",\n success: \"#66ff99\",\n warning: \"#ffcc66\",\n error: \"#ff6666\",\n info: \"#66b3ff\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"rgba(15, 15, 15, 0.9)\",\n backgroundTertiary: \"rgba(20, 20, 20, 0.9)\",\n backgroundLight: \"rgba(255, 255, 255, 0.05)\",\n backgroundHover: \"rgba(102, 179, 255, 0.08)\",\n surface: \"rgba(15, 15, 15, 0.95)\",\n textSecondary: \"rgba(255, 255, 255, 0.7)\",\n textTertiary: \"rgba(255, 255, 255, 0.5)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n modes: {\n light: {\n text: \"#1a1a1a\",\n background: \"rgba(255, 255, 255, 0.9)\",\n primary: \"#0066cc\",\n secondary: \"#0052a3\",\n accent: \"#00cc88\",\n highlight: \"rgba(0, 102, 204, 0.08)\",\n muted: \"rgba(245, 245, 245, 0.8)\",\n success: \"#00cc88\",\n warning: \"#ffaa00\",\n error: \"#ff3333\",\n info: \"#0066cc\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"rgba(250, 250, 250, 0.9)\",\n backgroundTertiary: \"rgba(245, 245, 245, 0.9)\",\n backgroundLight: \"rgba(0, 0, 0, 0.02)\",\n backgroundHover: \"rgba(0, 102, 204, 0.04)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"rgba(0, 0, 0, 0.6)\",\n textTertiary: \"rgba(0, 0, 0, 0.4)\",\n textMuted: \"rgba(0, 0, 0, 0.3)\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\nvar matrixTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(0, 216, 53, 0.15)\",\n \"0 0 10px rgba(0, 216, 53, 0.2)\",\n \"0 0 15px rgba(0, 216, 53, 0.25)\",\n \"0 0 20px rgba(0, 216, 53, 0.3)\",\n \"0 0 30px rgba(0, 216, 53, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#00d835\",\n secondary: \"#00a828\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.15)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(0, 216, 53, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(0, 216, 53, 0.03)\",\n backgroundHover: \"rgba(0, 216, 53, 0.08)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.25)\",\n highlightBorder: \"rgba(0, 216, 53, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar matrixMinimalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 0 20px rgba(0, 216, 53, 0.1)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#b8b8b8\",\n secondary: \"#909090\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.1)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(184, 184, 184, 0.1)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(184, 184, 184, 0.02)\",\n backgroundHover: \"rgba(0, 216, 53, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.2)\",\n highlightBorder: \"rgba(0, 216, 53, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar slateTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.2)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.2)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.2)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.25)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#9ca3af\",\n background: \"#1a1c1e\",\n primary: \"#d1d5db\",\n secondary: \"#6b7280\",\n accent: \"#f59e0b\",\n highlight: \"rgba(209, 213, 219, 0.15)\",\n muted: \"#2d3134\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n info: \"#3b82f6\",\n border: \"rgba(156, 163, 175, 0.15)\",\n backgroundSecondary: \"#22252a\",\n backgroundTertiary: \"#2d3134\",\n backgroundLight: \"rgba(156, 163, 175, 0.05)\",\n backgroundHover: \"rgba(156, 163, 175, 0.1)\",\n surface: \"#1f2124\",\n textSecondary: \"#e5e7eb\",\n textTertiary: \"#6b7280\",\n textMuted: \"#4b5563\",\n highlightBg: \"rgba(245, 158, 11, 0.25)\",\n highlightBorder: \"rgba(245, 158, 11, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#1a1c1e\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#9ca3af\"\n }\n },\n secondary: {\n color: \"#e5e7eb\",\n bg: \"secondary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#4b5563\"\n }\n },\n ghost: {\n color: \"textSecondary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"textSecondary\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textTertiary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/ThemeProvider.tsx\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\n\n// src/themeHelpers.ts\nfunction overrideColors(theme, colors) {\n return {\n ...theme,\n colors: {\n ...theme.colors,\n ...colors\n }\n };\n}\nfunction makeTheme(baseTheme, overrides) {\n return {\n ...baseTheme,\n ...overrides,\n colors: {\n ...baseTheme.colors,\n ...overrides.colors\n },\n fonts: {\n ...baseTheme.fonts,\n ...overrides.fonts\n }\n };\n}\nfunction addMode(theme, modeName, colors, baseMode) {\n let baseColors;\n if (baseMode && theme.modes && theme.modes[baseMode]) {\n baseColors = {\n ...theme.colors,\n ...theme.modes[baseMode]\n };\n } else {\n baseColors = theme.colors;\n }\n const newMode = {\n ...baseColors,\n ...colors\n };\n return {\n ...theme,\n modes: {\n ...theme.modes,\n [modeName]: newMode\n }\n };\n}\nfunction getMode(theme, mode) {\n if (!mode || !theme.modes || !theme.modes[mode]) {\n return theme.colors;\n }\n return {\n ...theme.colors,\n ...theme.modes[mode]\n };\n}\n\n// src/ThemeProvider.tsx\nvar ThemeContext;\nvar getThemeContext = () => {\n if (typeof window !== \"undefined\") {\n const globalWindow = window;\n if (!globalWindow.__principlemd_theme_context__) {\n globalWindow.__principlemd_theme_context__ = createContext(undefined);\n }\n return globalWindow.__principlemd_theme_context__;\n } else {\n if (!ThemeContext) {\n ThemeContext = createContext(undefined);\n }\n return ThemeContext;\n }\n};\nvar ThemeContextSingleton = getThemeContext();\nvar useTheme = () => {\n const context = useContext(ThemeContextSingleton);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\nvar ThemeProvider = ({\n children,\n theme: customTheme = theme,\n initialMode\n}) => {\n const [mode, setMode] = useState(initialMode);\n const activeTheme = React.useMemo(() => {\n if (!mode || !customTheme.modes || !customTheme.modes[mode]) {\n return customTheme;\n }\n return {\n ...customTheme,\n colors: getMode(customTheme, mode)\n };\n }, [customTheme, mode]);\n useEffect(() => {\n if (!initialMode) {\n const savedMode = localStorage.getItem(\"principlemd-theme-mode\");\n if (savedMode) {\n setMode(savedMode);\n }\n }\n }, [initialMode]);\n useEffect(() => {\n if (mode) {\n localStorage.setItem(\"principlemd-theme-mode\", mode);\n } else {\n localStorage.removeItem(\"principlemd-theme-mode\");\n }\n }, [mode]);\n const value = {\n theme: activeTheme,\n mode,\n setMode\n };\n return /* @__PURE__ */ React.createElement(ThemeContextSingleton.Provider, {\n value\n }, children);\n};\nvar withTheme = (Component) => {\n return (props) => {\n const { theme: theme2 } = useTheme();\n return /* @__PURE__ */ React.createElement(Component, {\n ...props,\n theme: theme2\n });\n };\n};\n// src/utils.ts\nvar getColor = (theme2, colorKey) => {\n const colors = theme2.colors;\n const value = colors[colorKey];\n return typeof value === \"string\" ? value : colorKey;\n};\nvar getSpace = (theme2, index) => {\n return theme2.space[index] || 0;\n};\nvar getFontSize = (theme2, index) => {\n return theme2.fontSizes[index] || theme2.fontSizes[2];\n};\nvar getRadius = (theme2, index) => {\n return theme2.radii[index] || 0;\n};\nvar getShadow = (theme2, index) => {\n return theme2.shadows[index] || \"none\";\n};\nvar getZIndex = (theme2, index) => {\n return theme2.zIndices[index] || 0;\n};\nvar responsive = (values) => {\n return values.reduce((acc, value, index) => {\n if (index === 0) {\n return value;\n }\n return {\n ...acc,\n [`@media screen and (min-width: ${values[index - 1]})`]: value\n };\n }, {});\n};\nvar sx = (styles) => styles;\nvar createStyle = (theme2, styleObj) => {\n const processValue = (value) => {\n if (typeof value === \"string\") {\n if (value in theme2.colors) {\n return getColor(theme2, value);\n }\n return value;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(processValue);\n }\n if (typeof value === \"object\" && value !== null) {\n const processed2 = {};\n for (const [key, val] of Object.entries(value)) {\n processed2[key] = processValue(val);\n }\n return processed2;\n }\n return value;\n };\n const processed = {};\n for (const [key, val] of Object.entries(styleObj)) {\n processed[key] = processValue(val);\n }\n return processed;\n};\nvar mergeThemes = (baseTheme, ...overrides) => {\n return overrides.reduce((theme2, override) => ({\n space: override.space || theme2.space,\n fonts: { ...theme2.fonts, ...override.fonts || {} },\n fontSizes: override.fontSizes || theme2.fontSizes,\n fontWeights: { ...theme2.fontWeights, ...override.fontWeights || {} },\n lineHeights: { ...theme2.lineHeights, ...override.lineHeights || {} },\n breakpoints: override.breakpoints || theme2.breakpoints,\n sizes: override.sizes || theme2.sizes,\n radii: override.radii || theme2.radii,\n shadows: override.shadows || theme2.shadows,\n zIndices: override.zIndices || theme2.zIndices,\n colors: {\n ...theme2.colors,\n ...override.colors || {}\n },\n buttons: { ...theme2.buttons, ...override.buttons || {} },\n text: { ...theme2.text, ...override.text || {} },\n cards: { ...theme2.cards, ...override.cards || {} }\n }), baseTheme);\n};\n// src/ThemeShowcase.tsx\nimport React2 from \"react\";\nvar ThemeShowcase = ({\n theme: theme2,\n title,\n showValues = true,\n sections = [\"colors\", \"typography\", \"spacing\", \"shadows\", \"radii\"]\n}) => {\n const containerStyle = {\n fontFamily: theme2.fonts.body,\n color: theme2.colors.text,\n backgroundColor: theme2.colors.background,\n padding: theme2.space[4],\n minHeight: \"100vh\"\n };\n const sectionStyle = {\n marginBottom: theme2.space[5],\n padding: theme2.space[4],\n backgroundColor: theme2.colors.surface || theme2.colors.backgroundSecondary,\n borderRadius: theme2.radii[2],\n border: `1px solid ${theme2.colors.border}`\n };\n const headingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[5],\n fontWeight: theme2.fontWeights.heading,\n marginBottom: theme2.space[3],\n color: theme2.colors.primary\n };\n const subheadingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[3],\n fontWeight: theme2.fontWeights.medium,\n marginBottom: theme2.space[2],\n marginTop: theme2.space[3],\n color: theme2.colors.text\n };\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: containerStyle\n }, title && /* @__PURE__ */ React2.createElement(\"h1\", {\n style: {\n ...headingStyle,\n fontSize: theme2.fontSizes[6],\n marginBottom: theme2.space[4]\n }\n }, title), sections.includes(\"colors\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Colors\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Primary Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"text\", \"background\", \"primary\", \"secondary\", \"accent\", \"muted\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Status Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"success\", \"warning\", \"error\", \"info\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Background Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3]\n }\n }, [\"backgroundSecondary\", \"backgroundTertiary\", \"backgroundLight\", \"backgroundHover\", \"surface\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n padding: theme2.space[3],\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary,\n marginTop: theme2.space[1]\n }\n }, color));\n }))), sections.includes(\"typography\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Typography\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Families\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[4],\n marginBottom: theme2.space[2]\n }\n }, \"Heading Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.heading)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[2],\n marginBottom: theme2.space[2]\n }\n }, \"Body Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.body)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[2]\n }\n }, \"Monospace Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.monospace))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Sizes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, theme2.fontSizes.map((size, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: {\n fontSize: size,\n lineHeight: theme2.lineHeights.body,\n marginBottom: theme2.space[1]\n }\n }, \"Size \", index, \": Sample Text \", showValues && `(${size}px)`))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Weights\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n gap: theme2.space[2]\n }\n }, Object.entries(theme2.fontWeights).map(([name, weight]) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: name,\n style: {\n fontWeight: weight,\n fontSize: theme2.fontSizes[2]\n }\n }, name, \" \", showValues && `(${weight})`)))), sections.includes(\"spacing\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Spacing\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", gap: theme2.space[2] }\n }, theme2.space.map((space, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { display: \"flex\", alignItems: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 60,\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"]\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n height: 24,\n width: space,\n backgroundColor: theme2.colors.primary,\n borderRadius: theme2.radii[1]\n }\n }), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n marginLeft: theme2.space[2],\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, space, \"px\"))))), sections.includes(\"radii\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Border Radii\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(100px, 1fr))\",\n gap: theme2.space[3]\n }\n }, theme2.radii.map((radius, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 80,\n height: 80,\n backgroundColor: theme2.colors.primary,\n borderRadius: radius,\n marginBottom: theme2.space[1],\n margin: \"0 auto\"\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"] \", showValues && `${radius}px`))))), sections.includes(\"shadows\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Shadows\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(150px, 1fr))\",\n gap: theme2.space[4]\n }\n }, theme2.shadows.map((shadow, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 100,\n height: 100,\n backgroundColor: theme2.colors.background,\n boxShadow: shadow,\n borderRadius: theme2.radii[2],\n margin: \"0 auto\",\n marginBottom: theme2.space[2],\n border: `1px solid ${theme2.colors.border}`\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"Shadow [\", index, \"]\"), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textMuted,\n marginTop: theme2.space[1]\n }\n }, shadow === \"none\" ? \"none\" : \"...\"))))), theme2.modes && Object.keys(theme2.modes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Available Modes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: theme2.space[2],\n flexWrap: \"wrap\"\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.primary,\n color: \"#ffffff\",\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, \"default\"), Object.keys(theme2.modes).map((modeName) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: modeName,\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.secondary,\n color: theme2.colors.text,\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, modeName)))));\n};\n\n// src/index.ts\nvar theme = terminalTheme;\nfunction scaleThemeFonts(theme2, scale) {\n const currentScale = theme2.fontScale || 1;\n const effectiveScale = scale / currentScale;\n return {\n ...theme2,\n fontSizes: theme2.fontSizes.map((size) => Math.round(size * effectiveScale)),\n fontScale: scale\n };\n}\nfunction increaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.min(currentScale * 1.1, 2);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction decreaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.max(currentScale * 0.9, 0.5);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction resetFontScale(theme2) {\n return scaleThemeFonts(theme2, 1);\n}\nvar src_default = theme;\nexport {\n withTheme,\n useTheme,\n theme,\n terminalTheme,\n sx,\n slateTheme,\n scaleThemeFonts,\n responsive,\n resetFontScale,\n regalTheme,\n overrideColors,\n mergeThemes,\n matrixTheme,\n matrixMinimalTheme,\n makeTheme,\n landingPageTheme,\n landingPageLightTheme,\n increaseFontScale,\n glassmorphismTheme,\n getZIndex,\n getSpace,\n getShadow,\n getRadius,\n getMode,\n getFontSize,\n getColor,\n defaultTerminalTheme,\n defaultMarkdownTheme,\n defaultEditorTheme,\n src_default as default,\n decreaseFontScale,\n createStyle,\n addMode,\n ThemeShowcase,\n ThemeProvider\n};\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n];\nconst ArrowUpDown = createLucideIcon(\"arrow-up-down\", __iconNode);\n\nexport { __iconNode, ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n [\n \"path\",\n {\n d: \"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\n key: \"ruj8y\"\n }\n ]\n];\nconst BookOpen = createLucideIcon(\"book-open\", __iconNode);\n\nexport { __iconNode, BookOpen as default };\n//# sourceMappingURL=book-open.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst Folder = createLucideIcon(\"folder\", __iconNode);\n\nexport { __iconNode, Folder as default };\n//# sourceMappingURL=folder.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n key: \"sc7q7i\"\n }\n ]\n];\nconst Funnel = createLucideIcon(\"funnel\", __iconNode);\n\nexport { __iconNode, Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"18\", r: \"3\", key: \"1mpf1b\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"path\", { d: \"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9\", key: \"1uq4wg\" }],\n [\"path\", { d: \"M12 12v3\", key: \"158kv8\" }]\n];\nconst GitFork = createLucideIcon(\"git-fork\", __iconNode);\n\nexport { __iconNode, GitFork as default };\n//# sourceMappingURL=git-fork.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\",\n key: \"tonef\"\n }\n ],\n [\"path\", { d: \"M9 18c-4.51 2-5-2-7-2\", key: \"9comsn\" }]\n];\nconst Github = createLucideIcon(\"github\", __iconNode);\n\nexport { __iconNode, Github as default };\n//# sourceMappingURL=github.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M12 7v5l4 2\", key: \"1fdv2h\" }]\n];\nconst History = createLucideIcon(\"history\", __iconNode);\n\nexport { __iconNode, History as default };\n//# sourceMappingURL=history.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n];\nconst Lock = createLucideIcon(\"lock\", __iconNode);\n\nexport { __iconNode, Lock as default };\n//# sourceMappingURL=lock.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m10 17 5-5-5-5\", key: \"1bsop3\" }],\n [\"path\", { d: \"M15 12H3\", key: \"6jk70r\" }],\n [\"path\", { d: \"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\", key: \"u53s6r\" }]\n];\nconst LogIn = createLucideIcon(\"log-in\", __iconNode);\n\nexport { __iconNode, LogIn as default };\n//# sourceMappingURL=log-in.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { x: \"16\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"4q2zg0\" }],\n [\"rect\", { x: \"2\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"8cvhb9\" }],\n [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"6\", rx: \"1\", key: \"1egb70\" }],\n [\"path\", { d: \"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\", key: \"1jsf9p\" }],\n [\"path\", { d: \"M12 12V8\", key: \"2874zd\" }]\n];\nconst Network = createLucideIcon(\"network\", __iconNode);\n\nexport { __iconNode, Network as default };\n//# sourceMappingURL=network.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"7g6ntu\" }],\n [\"path\", { d: \"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"ijws7r\" }],\n [\"path\", { d: \"M7 21h10\", key: \"1b0cd5\" }],\n [\"path\", { d: \"M12 3v18\", key: \"108xh3\" }],\n [\"path\", { d: \"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2\", key: \"3gwbw2\" }]\n];\nconst Scale = createLucideIcon(\"scale\", __iconNode);\n\nexport { __iconNode, Scale as default };\n//# sourceMappingURL=scale.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\",\n key: \"1s2grr\"\n }\n ],\n [\"path\", { d: \"M20 2v4\", key: \"1rf3ol\" }],\n [\"path\", { d: \"M22 4h-4\", key: \"gwowj6\" }],\n [\"circle\", { cx: \"4\", cy: \"20\", r: \"2\", key: \"6kqj1y\" }]\n];\nconst Sparkles = createLucideIcon(\"sparkles\", __iconNode);\n\nexport { __iconNode, Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n];\nconst Star = createLucideIcon(\"star\", __iconNode);\n\nexport { __iconNode, Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import React, { useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n ExternalLink,\n Star,\n GitFork,\n Lock,\n Scale,\n} from 'lucide-react';\n\nimport type { GitHubRepository } from '../types/github';\n\nexport interface GitHubProjectCardProps {\n /** The repository data to display */\n repository: GitHubRepository;\n /** Whether this card is currently selected/highlighted */\n isSelected?: boolean;\n /** Callback when card is clicked (selects the repository) */\n onSelect?: (repository: GitHubRepository) => void;\n /** Callback when \"Open in GitHub\" is clicked */\n onOpenInGitHub?: (repository: GitHubRepository) => void;\n}\n\n/**\n * Get color for programming language\n */\nfunction getLanguageColor(language: string): string {\n const colors: Record<string, string> = {\n TypeScript: '#3178c6',\n JavaScript: '#f7df1e',\n Python: '#3776ab',\n Java: '#b07219',\n Go: '#00add8',\n Rust: '#dea584',\n Ruby: '#cc342d',\n PHP: '#777bb4',\n 'C++': '#00599c',\n C: '#555555',\n 'C#': '#239120',\n Swift: '#fa7343',\n Kotlin: '#7f52ff',\n Dart: '#0175c2',\n Vue: '#4fc08d',\n HTML: '#e34c26',\n CSS: '#1572b6',\n Shell: '#89e051',\n PowerShell: '#012456',\n };\n\n return colors[language] || '#6e7681';\n}\n\n/**\n * Format large numbers (e.g., 1234 -> 1.2k)\n */\nfunction formatCount(count: number): string {\n if (count >= 1000000) {\n return `${(count / 1000000).toFixed(1)}m`;\n }\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1)}k`;\n }\n return count.toString();\n}\n\n/**\n * GitHubProjectCard - Displays a GitHub repository card\n *\n * Features:\n * - Repository name with owner avatar\n * - Language indicator with color coding\n * - Star and fork counts\n * - Private/fork indicators\n * - GitHub link button\n */\nexport const GitHubProjectCard: React.FC<GitHubProjectCardProps> = ({\n repository,\n isSelected = false,\n onSelect,\n onOpenInGitHub,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n const highlightColor = theme.colors.primary;\n\n const handleCardClick = () => {\n onSelect?.(repository);\n };\n\n const handleOpenInGitHub = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onOpenInGitHub) {\n onOpenInGitHub(repository);\n } else {\n window.open(repository.html_url, '_blank');\n }\n };\n\n const starCount = repository.stargazers_count ?? 0;\n const forkCount = repository.forks_count ?? 0;\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '10px 12px',\n borderRadius: '6px',\n backgroundColor: isSelected\n ? `${highlightColor}15`\n : isHovered\n ? theme.colors.backgroundTertiary || theme.colors.backgroundSecondary\n : 'transparent',\n border: isSelected\n ? `1px solid ${highlightColor}40`\n : '1px solid transparent',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n onClick={handleCardClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Owner avatar */}\n {repository.owner.avatar_url ? (\n <img\n src={repository.owner.avatar_url}\n alt={repository.owner.login}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n flexShrink: 0,\n }}\n />\n ) : (\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n flexShrink: 0,\n backgroundColor: theme.colors.backgroundTertiary || theme.colors.backgroundSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n }}\n >\n {repository.owner.login[0]?.toUpperCase() || '?'}\n </div>\n )}\n\n {/* Main content */}\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n }}\n >\n {/* Repository name row */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {repository.name}\n </span>\n {repository.private && (\n <Lock size={12} color={theme.colors.warning || '#f59e0b'} />\n )}\n {repository.fork && (\n <GitFork size={12} color={theme.colors.textSecondary} />\n )}\n </div>\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n flexWrap: 'wrap',\n }}\n >\n {/* Language */}\n {repository.language && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n display: 'inline-block',\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: getLanguageColor(repository.language),\n }}\n />\n <span>{repository.language}</span>\n </div>\n )}\n\n {/* Stars */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={12} />\n <span>{formatCount(starCount)}</span>\n </div>\n\n {/* Forks */}\n {forkCount > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={12} />\n <span>{formatCount(forkCount)}</span>\n </div>\n )}\n\n {/* License */}\n {repository.license && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Scale size={12} />\n <span>{repository.license}</span>\n </div>\n )}\n </div>\n\n {/* Description */}\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {repository.description}\n </div>\n )}\n </div>\n\n {/* GitHub link button */}\n <button\n type=\"button\"\n onClick={handleOpenInGitHub}\n title=\"View on GitHub\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundTertiary || theme.colors.backgroundSecondary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.background;\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <ExternalLink size={14} />\n </button>\n </div>\n );\n};\n","import React, { useState, useMemo, useEffect, useRef, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Github,\n Search,\n ChevronDown,\n ChevronRight,\n Folder,\n Star,\n LogIn,\n Building2,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type {\n GitHubRepositoriesSliceData,\n GitHubRepository,\n RepositoryPreviewEventPayload,\n} from '../types/github';\nimport { GitHubProjectCard } from '../components/GitHubProjectCard';\n\n/** Layout mode based on available width */\ntype LayoutMode = 'compact' | 'expanded';\n\n/** Breakpoint for switching layouts (in pixels) */\nconst EXPANDED_BREAKPOINT = 600;\n\n/**\n * Section component for collapsible repository groups\n */\ninterface SectionProps {\n id: string;\n title: string;\n icon: React.ReactNode;\n count: number;\n isExpanded: boolean;\n onToggle: () => void;\n children: React.ReactNode;\n layoutMode: LayoutMode;\n}\n\nconst Section: React.FC<SectionProps> = ({\n title,\n icon,\n count,\n isExpanded,\n onToggle,\n children,\n layoutMode,\n}) => {\n const { theme } = useTheme();\n\n // In expanded mode, sections are columns - always show content (no collapse)\n // In compact mode, sections are collapsible\n const showContent = layoutMode === 'expanded' || isExpanded;\n\n return (\n <div\n style={{\n marginBottom: layoutMode === 'compact' ? '8px' : '0',\n flex: layoutMode === 'expanded' ? '1 1 0' : undefined,\n minWidth: layoutMode === 'expanded' ? '280px' : undefined,\n display: 'flex',\n flexDirection: 'column',\n borderRight: layoutMode === 'expanded' ? `1px solid ${theme.colors.border}` : undefined,\n overflow: 'hidden',\n }}\n >\n <button\n type=\"button\"\n onClick={layoutMode === 'compact' ? onToggle : undefined}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n border: 'none',\n background: 'none',\n cursor: layoutMode === 'compact' ? 'pointer' : 'default',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n borderBottom: layoutMode === 'expanded' ? `1px solid ${theme.colors.border}` : undefined,\n }}\n >\n {layoutMode === 'compact' && (isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />)}\n {icon}\n <span>{title}</span>\n <span\n style={{\n marginLeft: 'auto',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundTertiary || theme.colors.backgroundSecondary,\n padding: '2px 8px',\n borderRadius: '10px',\n }}\n >\n {count}\n </span>\n </button>\n {showContent && (\n <div\n style={{\n padding: '4px',\n display: 'flex',\n flexDirection: 'column',\n gap: '0',\n flex: layoutMode === 'expanded' ? 1 : undefined,\n overflowY: layoutMode === 'expanded' ? 'auto' : undefined,\n }}\n >\n {children}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * GitHubProjectsPanelContent - Internal component that uses theme\n */\nconst GitHubProjectsPanelContent: React.FC<PanelComponentProps> = ({\n context,\n events,\n}) => {\n const { theme } = useTheme();\n const containerRef = useRef<HTMLDivElement>(null);\n const [layoutMode, setLayoutMode] = useState<LayoutMode>('compact');\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedRepoId, setSelectedRepoId] = useState<number | null>(null);\n const [expandedSections, setExpandedSections] = useState<Set<string>>(\n new Set(['owned', 'starred'])\n );\n\n // Get GitHub repositories slice\n const githubSlice = context.getSlice<GitHubRepositoriesSliceData>('github-repositories');\n const isLoading = context.isSliceLoading('github-repositories');\n const hasData = context.hasSlice('github-repositories');\n\n const data = githubSlice?.data;\n\n // Observe container width for responsive layout\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n setLayoutMode(width >= EXPANDED_BREAKPOINT ? 'expanded' : 'compact');\n }\n });\n\n observer.observe(container);\n return () => observer.disconnect();\n }, []);\n\n // Filter repositories by search query\n const filterRepos = useCallback((repos: GitHubRepository[]) => {\n if (!searchQuery) return repos;\n const query = searchQuery.toLowerCase();\n return repos.filter(\n (repo) =>\n repo.name.toLowerCase().includes(query) ||\n repo.full_name.toLowerCase().includes(query) ||\n repo.description?.toLowerCase().includes(query) ||\n repo.language?.toLowerCase().includes(query)\n );\n }, [searchQuery]);\n\n const filteredOwned = useMemo(() => filterRepos(data?.owned || []), [data?.owned, filterRepos]);\n const filteredStarred = useMemo(() => filterRepos(data?.starred || []), [data?.starred, filterRepos]);\n const filteredOrgs = useMemo(() => {\n if (!data?.organizations) return [];\n return data.organizations.map((org) => ({\n ...org,\n repositories: filterRepos(org.repositories),\n })).filter((org) => org.repositories.length > 0 || !searchQuery);\n }, [data?.organizations, filterRepos, searchQuery]);\n\n // Toggle section expansion\n const toggleSection = (section: string) => {\n setExpandedSections((prev) => {\n const next = new Set(prev);\n if (next.has(section)) {\n next.delete(section);\n } else {\n next.add(section);\n }\n return next;\n });\n };\n\n // Handle repository preview (click to show README)\n const handleSelectRepository = (repo: GitHubRepository) => {\n setSelectedRepoId(repo.id);\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'github-projects-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'click',\n },\n });\n };\n\n // Render empty state for a section\n const renderEmptyState = (message: string) => (\n <div\n style={{\n padding: '16px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n gridColumn: layoutMode === 'expanded' ? '1 / -1' : undefined,\n }}\n >\n {message}\n </div>\n );\n\n // Render repository cards\n const renderCards = (repos: GitHubRepository[]) =>\n repos.map((repo) => (\n <GitHubProjectCard\n key={repo.id}\n repository={repo}\n isSelected={selectedRepoId === repo.id}\n onSelect={handleSelectRepository}\n />\n ));\n\n // Not authenticated state\n if (hasData && data && !data.isAuthenticated) {\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n padding: '24px',\n color: theme.colors.textSecondary,\n }}\n >\n <LogIn size={48} color={theme.colors.textSecondary} />\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n color: theme.colors.text,\n }}\n >\n Sign in to GitHub\n </h3>\n <p style={{ margin: 0, textAlign: 'center' }}>\n Connect your GitHub account to see your repositories\n </p>\n <button\n type=\"button\"\n onClick={() => {\n events.emit({\n type: 'github:login-requested',\n source: 'github-projects-panel',\n timestamp: Date.now(),\n payload: {},\n });\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 20px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: 'pointer',\n }}\n >\n <Github size={18} />\n Sign in with GitHub\n </button>\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Loading repositories...\n </div>\n );\n }\n\n // No data state - show sign in prompt\n if (!hasData || !data) {\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n padding: '24px',\n color: theme.colors.textSecondary,\n }}\n >\n <LogIn size={48} color={theme.colors.textSecondary} />\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n color: theme.colors.text,\n }}\n >\n Sign in to GitHub\n </h3>\n <p style={{ margin: 0, textAlign: 'center' }}>\n Connect your GitHub account to browse your repositories\n </p>\n <button\n type=\"button\"\n onClick={() => {\n events.emit({\n type: 'github:login-requested',\n source: 'github-projects-panel',\n timestamp: Date.now(),\n payload: {},\n });\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 20px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: 'pointer',\n }}\n >\n <Github size={18} />\n Sign in with GitHub\n </button>\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n flexWrap: 'wrap',\n }}\n >\n <Github size={20} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n GitHub Projects\n </h2>\n {data.username && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n @{data.username}\n </span>\n )}\n </div>\n\n {/* Search */}\n <div style={{ padding: '12px 16px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '6px',\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <Search size={16} color={theme.colors.textSecondary} />\n <input\n type=\"text\"\n placeholder=\"Search repositories...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={{\n flex: 1,\n border: 'none',\n background: 'none',\n outline: 'none',\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.text,\n }}\n />\n </div>\n </div>\n\n {/* Repository sections */}\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: layoutMode === 'expanded' ? 'row' : 'column',\n overflowY: layoutMode === 'compact' ? 'auto' : undefined,\n overflowX: layoutMode === 'expanded' ? 'auto' : undefined,\n }}\n >\n {/* Personal repositories */}\n <Section\n id=\"owned\"\n title=\"Your Repositories\"\n icon={<Folder size={16} color={theme.colors.primary} />}\n count={filteredOwned.length}\n isExpanded={expandedSections.has('owned')}\n onToggle={() => toggleSection('owned')}\n layoutMode={layoutMode}\n >\n {filteredOwned.length === 0\n ? renderEmptyState(searchQuery ? 'No repositories match your search' : 'No repositories found')\n : renderCards(filteredOwned)}\n </Section>\n\n {/* Organization repositories */}\n {filteredOrgs.map((org) => (\n <Section\n key={org.id}\n id={`org-${org.id}`}\n title={org.login}\n icon={\n org.avatar_url ? (\n <img\n src={org.avatar_url}\n alt={org.login}\n style={{ width: 16, height: 16, borderRadius: 4 }}\n />\n ) : (\n <Building2 size={16} color={theme.colors.info || '#3b82f6'} />\n )\n }\n count={org.repositories.length}\n isExpanded={expandedSections.has(`org-${org.id}`)}\n onToggle={() => toggleSection(`org-${org.id}`)}\n layoutMode={layoutMode}\n >\n {org.repositories.length === 0\n ? renderEmptyState(searchQuery ? 'No repositories match your search' : 'No repositories')\n : renderCards(org.repositories)}\n </Section>\n ))}\n\n {/* Starred repositories */}\n <Section\n id=\"starred\"\n title=\"Starred\"\n icon={<Star size={16} color={theme.colors.warning || '#f59e0b'} />}\n count={filteredStarred.length}\n isExpanded={expandedSections.has('starred')}\n onToggle={() => toggleSection('starred')}\n layoutMode={layoutMode}\n >\n {filteredStarred.length === 0\n ? renderEmptyState(searchQuery ? 'No repositories match your search' : 'No starred repositories')\n : renderCards(filteredStarred)}\n </Section>\n </div>\n </div>\n );\n};\n\n/**\n * GitHubProjectsPanel - A panel for browsing GitHub repositories\n *\n * Features:\n * - Lists personal, organization, and starred repositories\n * - Responsive layout: compact (dropdown) for narrow, columns for wide\n * - Search/filter functionality\n * - Emits repository:selected events when a repo is clicked\n *\n * Required data slice: 'github-repositories' (GitHubRepositoriesSliceData)\n */\nexport const GitHubProjectsPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubProjectsPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const GitHubProjectsPanelMetadata = {\n id: 'github-projects',\n name: 'GitHub Projects',\n description: 'Browse and manage your GitHub repositories',\n icon: 'github',\n version: '0.1.0',\n slices: ['github-repositories'],\n surfaces: ['sidebar', 'panel'],\n};\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Search, Github, Star, GitFork, ExternalLink } from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type { GitHubRepository, RepositoryPreviewEventPayload } from '../types/github';\n\n/** Search result from GitHub API */\ninterface GitHubSearchResult {\n total_count: number;\n incomplete_results: boolean;\n items: GitHubRepository[];\n}\n\n/**\n * GitHubSearchPanelContent - Internal component that uses theme\n */\nconst GitHubSearchPanelContent: React.FC<PanelComponentProps> = ({ events }) => {\n const { theme } = useTheme();\n const [searchQuery, setSearchQuery] = useState('');\n const [results, setResults] = useState<GitHubRepository[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedRepoId, setSelectedRepoId] = useState<number | null>(null);\n const searchTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Focus input on mount\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n // Debounced search\n const performSearch = useCallback(async (query: string) => {\n if (!query.trim()) {\n setResults([]);\n setTotalCount(0);\n setError(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await fetch(\n `/api/github/search?q=${encodeURIComponent(query)}&per_page=30`\n );\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Search failed');\n }\n\n const data: GitHubSearchResult = await response.json();\n setResults(data.items || []);\n setTotalCount(data.total_count || 0);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Search failed');\n setResults([]);\n setTotalCount(0);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n // Handle search input change with debounce\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setSearchQuery(query);\n\n // Clear existing timeout\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n // Debounce search\n searchTimeoutRef.current = setTimeout(() => {\n performSearch(query);\n }, 300);\n };\n\n // Handle form submit (immediate search)\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n performSearch(searchQuery);\n };\n\n // Handle repository preview (click to show README)\n const handleSelectRepository = (repo: GitHubRepository) => {\n setSelectedRepoId(repo.id);\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'github-search-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'search',\n },\n });\n };\n\n // Format number with K/M suffix\n const formatNumber = (num: number): string => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n };\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <Github size={20} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n Search GitHub\n </h2>\n </div>\n\n {/* Search Input */}\n <form onSubmit={handleSubmit} style={{ padding: '12px 16px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n borderRadius: '6px',\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <Search size={18} color={theme.colors.textSecondary} />\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Search repositories on GitHub...\"\n value={searchQuery}\n onChange={handleSearchChange}\n style={{\n flex: 1,\n border: 'none',\n background: 'none',\n outline: 'none',\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.text,\n }}\n />\n {isLoading && (\n <div\n style={{\n width: 16,\n height: 16,\n border: `2px solid ${theme.colors.border}`,\n borderTopColor: theme.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n )}\n </div>\n </form>\n\n {/* Results Count */}\n {totalCount > 0 && !isLoading && (\n <div\n style={{\n padding: '0 16px 8px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {formatNumber(totalCount)} repositories found\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div\n style={{\n padding: '16px',\n margin: '0 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error}15`,\n color: theme.colors.error,\n fontSize: `${theme.fontSizes[2]}px`,\n }}\n >\n {error}\n </div>\n )}\n\n {/* Results List */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '0 8px 8px',\n }}\n >\n {results.length === 0 && !isLoading && searchQuery && !error && (\n <div\n style={{\n padding: '32px 16px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n No repositories found for \"{searchQuery}\"\n </div>\n )}\n\n {results.length === 0 && !searchQuery && (\n <div\n style={{\n padding: '32px 16px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Search size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0 }}>\n Search for repositories by name, description, or topic\n </p>\n </div>\n )}\n\n {results.map((repo) => (\n <button\n key={repo.id}\n type=\"button\"\n onClick={() => handleSelectRepository(repo)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '6px',\n border: selectedRepoId === repo.id\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: selectedRepoId === repo.id\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {/* Repo name and owner */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {repo.owner?.avatar_url && (\n <img\n src={repo.owner.avatar_url}\n alt={repo.owner.login}\n style={{ width: 20, height: 20, borderRadius: 4 }}\n />\n )}\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {repo.full_name}\n </span>\n {repo.private && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.textSecondary,\n }}\n >\n Private\n </span>\n )}\n </div>\n\n {/* Description */}\n {repo.description && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {repo.description}\n </p>\n )}\n\n {/* Stats */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {repo.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: theme.colors.info,\n }}\n />\n {repo.language}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={14} />\n {formatNumber(repo.stargazers_count || 0)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={14} />\n {formatNumber(repo.forks_count || 0)}\n </span>\n <a\n href={repo.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n ))}\n </div>\n\n {/* CSS for spinner animation */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\n/**\n * GitHubSearchPanel - A panel for searching GitHub repositories\n *\n * Features:\n * - Real-time search with debouncing\n * - Shows stars, forks, language\n * - Emits repository:selected events when a repo is clicked\n */\nexport const GitHubSearchPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubSearchPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const GitHubSearchPanelMetadata = {\n id: 'github-search',\n name: 'GitHub Search',\n description: 'Search for repositories on GitHub',\n icon: 'search',\n version: '0.1.0',\n slices: [],\n surfaces: ['panel'],\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Github,\n Star,\n GitFork,\n ExternalLink,\n Calendar,\n ArrowUpDown,\n Filter,\n Lock,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type { GitHubRepository, RepositoryPreviewEventPayload, OwnerRepositoriesSliceData } from '../types/github';\n\ntype SortField = 'updated' | 'stars' | 'name' | 'created';\ntype SortOrder = 'asc' | 'desc';\n\n/**\n * OwnerRepositoriesPanelContent - Internal component that uses theme\n */\nconst OwnerRepositoriesPanelContent: React.FC<PanelComponentProps & { owner?: string }> = ({\n events,\n context,\n owner: propOwner,\n}) => {\n const { theme } = useTheme();\n const [selectedRepoId, setSelectedRepoId] = useState<number | null>(null);\n const [sortField, setSortField] = useState<SortField>('updated');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n const [languageFilter, setLanguageFilter] = useState<string | null>(null);\n\n // Get owner from prop or context\n const owner = propOwner || (context?.currentScope?.repository as { name?: string })?.name;\n\n // Get owner repositories slice\n const ownerSlice = context.getSlice<OwnerRepositoriesSliceData>('owner-repositories');\n const isLoading = context.isSliceLoading('owner-repositories');\n\n const ownerInfo = ownerSlice?.data?.owner ?? null;\n const repositories = ownerSlice?.data?.repositories ?? [];\n const error = ownerSlice?.data?.error ?? null;\n const isAuthenticated = ownerSlice?.data?.isAuthenticated ?? false;\n\n // Extract unique languages from repositories\n const languages = React.useMemo(() => {\n return [...new Set(\n repositories\n .map(r => r.language)\n .filter((lang): lang is string => lang !== null)\n )].sort();\n }, [repositories]);\n\n // Request data refresh\n const handleRefresh = useCallback(() => {\n events.emit({\n type: 'owner-repositories:refresh',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }, [events, owner]);\n\n // Request owner data when owner changes\n useEffect(() => {\n if (owner) {\n events.emit({\n type: 'owner-repositories:request',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }\n }, [events, owner]);\n\n // Sort and filter repositories\n const sortedAndFilteredRepos = React.useMemo(() => {\n let filtered = repositories;\n\n // Apply language filter\n if (languageFilter) {\n filtered = filtered.filter(r => r.language === languageFilter);\n }\n\n // Apply sorting\n return [...filtered].sort((a, b) => {\n let comparison = 0;\n\n switch (sortField) {\n case 'updated':\n comparison = new Date(b.updated_at || 0).getTime() - new Date(a.updated_at || 0).getTime();\n break;\n case 'stars':\n comparison = (b.stargazers_count || 0) - (a.stargazers_count || 0);\n break;\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'created':\n comparison = new Date(b.created_at || 0).getTime() - new Date(a.created_at || 0).getTime();\n break;\n }\n\n return sortOrder === 'desc' ? comparison : -comparison;\n });\n }, [repositories, sortField, sortOrder, languageFilter]);\n\n // Handle repository preview (click to show README)\n const handleSelectRepository = (repo: GitHubRepository) => {\n setSelectedRepoId(repo.id);\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'click',\n },\n });\n };\n\n // Handle repository open (double-click or button)\n const handleOpenRepository = (repo: GitHubRepository) => {\n events.emit({\n type: 'repository:selected',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'click',\n },\n });\n };\n\n // Format number with K/M suffix\n const formatNumber = (num: number): string => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n };\n\n // Format relative time\n const formatRelativeTime = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'today';\n if (diffDays === 1) return 'yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n return `${Math.floor(diffDays / 365)} years ago`;\n };\n\n // Toggle sort\n const handleSort = (field: SortField) => {\n if (sortField === field) {\n setSortOrder(prev => prev === 'desc' ? 'asc' : 'desc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header with repository count */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Github size={18} color={theme.colors.primary} />\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n }}\n >\n Repositories\n </span>\n {!isLoading && repositories.length > 0 && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n padding: '2px 8px',\n borderRadius: '12px',\n backgroundColor: theme.colors.backgroundSecondary,\n }}\n >\n {repositories.length}\n </span>\n )}\n </div>\n\n {/* Sort and Filter Controls */}\n {!isLoading && !error && repositories.length > 0 && (\n <div\n style={{\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n }}\n >\n {/* Sort buttons */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <ArrowUpDown size={14} color={theme.colors.textSecondary} />\n {(['updated', 'stars', 'name'] as SortField[]).map((field) => (\n <button\n key={field}\n onClick={() => handleSort(field)}\n style={{\n padding: '4px 8px',\n borderRadius: '4px',\n border: 'none',\n background: sortField === field ? theme.colors.primary : theme.colors.backgroundSecondary,\n color: sortField === field ? theme.colors.background : theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n textTransform: 'capitalize',\n }}\n >\n {field}\n {sortField === field && (sortOrder === 'desc' ? ' ↓' : ' ↑')}\n </button>\n ))}\n </div>\n\n {/* Language filter */}\n {languages.length > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', marginLeft: 'auto' }}>\n <Filter size={14} color={theme.colors.textSecondary} />\n <select\n value={languageFilter || ''}\n onChange={(e) => setLanguageFilter(e.target.value || null)}\n style={{\n padding: '4px 8px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n background: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n }}\n >\n <option value=\"\">All languages</option>\n {languages.map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {/* Loading State */}\n {isLoading && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n color: theme.colors.textSecondary,\n }}\n >\n <div\n style={{\n width: 32,\n height: 32,\n border: `3px solid ${theme.colors.border}`,\n borderTopColor: theme.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <span>Loading repositories...</span>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n padding: '16px 24px',\n borderRadius: '8px',\n backgroundColor: `${theme.colors.error}15`,\n color: theme.colors.error,\n marginBottom: '16px',\n }}\n >\n {error}\n </div>\n <button\n onClick={handleRefresh}\n style={{\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n background: theme.colors.primary,\n color: theme.colors.background,\n cursor: 'pointer',\n fontWeight: theme.fontWeights.medium,\n }}\n >\n Try Again\n </button>\n </div>\n )}\n\n {/* Empty State */}\n {!isLoading && !error && repositories.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0 }}>No repositories found</p>\n </div>\n )}\n\n {/* Repository List */}\n {!isLoading && !error && sortedAndFilteredRepos.length > 0 && (\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n }}\n >\n {sortedAndFilteredRepos.map((repo) => (\n <button\n key={repo.id}\n type=\"button\"\n onClick={() => handleSelectRepository(repo)}\n onDoubleClick={() => handleOpenRepository(repo)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '8px',\n border: selectedRepoId === repo.id\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: selectedRepoId === repo.id\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n transition: 'all 0.15s ease',\n }}\n >\n {/* Repo name */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {repo.name}\n </span>\n {repo.private && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <Lock size={10} />\n Private\n </span>\n )}\n {repo.archived && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.warning + '20',\n color: theme.colors.warning,\n }}\n >\n Archived\n </span>\n )}\n {repo.fork && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.textSecondary,\n }}\n >\n Fork\n </span>\n )}\n </div>\n\n {/* Description */}\n {repo.description && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {repo.description}\n </p>\n )}\n\n {/* Stats row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {repo.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: theme.colors.info,\n }}\n />\n {repo.language}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={14} />\n {formatNumber(repo.stargazers_count || 0)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={14} />\n {formatNumber(repo.forks_count || 0)}\n </span>\n {repo.updated_at && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={14} />\n {formatRelativeTime(repo.updated_at)}\n </span>\n )}\n <a\n href={repo.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n ))}\n </div>\n )}\n\n {/* Filtered empty state */}\n {!isLoading && !error && repositories.length > 0 && sortedAndFilteredRepos.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n color: theme.colors.textSecondary,\n }}\n >\n <Filter size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0 }}>No repositories match the current filter</p>\n <button\n onClick={() => setLanguageFilter(null)}\n style={{\n marginTop: '12px',\n padding: '8px 16px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n background: 'transparent',\n color: theme.colors.text,\n cursor: 'pointer',\n }}\n >\n Clear filter\n </button>\n </div>\n )}\n\n {/* CSS for spinner animation */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\n/**\n * OwnerRepositoriesPanel - A panel for browsing a GitHub user or organization's repositories\n *\n * Features:\n * - Shows repositories for a user/org (including private if authenticated)\n * - Displays owner info (avatar, bio, repo count)\n * - Sort by updated, stars, or name\n * - Filter by programming language\n * - Click to preview README, double-click to open\n *\n * Required data slice: 'owner-repositories' (OwnerRepositoriesSliceData)\n *\n * Events emitted:\n * - 'owner-repositories:request' - Request data for a specific owner\n * - 'owner-repositories:refresh' - Request a refresh of current data\n * - 'repository:preview' - When a repo is clicked\n * - 'repository:selected' - When a repo is double-clicked\n */\nexport const OwnerRepositoriesPanel: React.FC<PanelComponentProps & { owner?: string }> = (props) => {\n return <OwnerRepositoriesPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const OwnerRepositoriesPanelMetadata = {\n id: 'owner-repositories',\n name: 'Owner Repositories',\n description: 'Browse repositories for a GitHub user or organization',\n icon: 'github',\n version: '0.2.0',\n slices: ['owner-repositories'],\n surfaces: ['panel'],\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n History,\n Star,\n GitFork,\n ExternalLink,\n Calendar,\n Trash2,\n X,\n Github,\n Building2,\n User,\n BookOpen,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type { GitHubRepository, RepositoryPreviewEventPayload } from '../types/github';\n\nconst STORAGE_KEY = 'recent-repositories';\nconst OWNERS_STORAGE_KEY = 'recent-owners';\nconst MAX_RECENT_ITEMS = 50;\n\n/**\n * A simplified repository record stored in localStorage\n */\ninterface RecentRepository {\n type: 'repository';\n id: number;\n name: string;\n full_name: string;\n owner: {\n login: string;\n avatar_url?: string;\n };\n description: string | null;\n language: string | null;\n html_url: string;\n stargazers_count?: number;\n forks_count?: number;\n visitedAt: number;\n}\n\n/**\n * A simplified owner record stored in localStorage\n */\ninterface RecentOwner {\n type: 'owner';\n id: number;\n login: string;\n avatar_url?: string;\n name?: string;\n bio?: string;\n ownerType: 'User' | 'Organization';\n public_repos?: number;\n followers?: number;\n visitedAt: number;\n}\n\ntype RecentItem = RecentRepository | RecentOwner;\n\n/**\n * Load recent repositories from localStorage\n */\nfunction loadRecentRepositories(): RecentRepository[] {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const items = JSON.parse(stored);\n // Add type field if missing (migration from old format)\n return items.map((item: RecentRepository) => ({ ...item, type: 'repository' as const }));\n }\n } catch (err) {\n console.error('Failed to load recent repositories:', err);\n }\n return [];\n}\n\n/**\n * Load recent owners from localStorage\n */\nfunction loadRecentOwners(): RecentOwner[] {\n try {\n const stored = localStorage.getItem(OWNERS_STORAGE_KEY);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (err) {\n console.error('Failed to load recent owners:', err);\n }\n return [];\n}\n\n/**\n * Save recent repositories to localStorage\n */\nfunction saveRecentRepositories(repos: RecentRepository[]): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(repos));\n } catch (err) {\n console.error('Failed to save recent repositories:', err);\n }\n}\n\n/**\n * Save recent owners to localStorage\n */\nfunction saveRecentOwners(owners: RecentOwner[]): void {\n try {\n localStorage.setItem(OWNERS_STORAGE_KEY, JSON.stringify(owners));\n } catch (err) {\n console.error('Failed to save recent owners:', err);\n }\n}\n\n/**\n * Add a repository to the recent list\n */\nexport function addRecentRepository(repo: GitHubRepository): void {\n const recent = loadRecentRepositories();\n\n // Remove if already exists\n const filtered = recent.filter(r => r.id !== repo.id);\n\n // Add to front with current timestamp\n const newEntry: RecentRepository = {\n type: 'repository',\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: {\n login: repo.owner.login,\n avatar_url: repo.owner.avatar_url,\n },\n description: repo.description,\n language: repo.language,\n html_url: repo.html_url,\n stargazers_count: repo.stargazers_count,\n forks_count: repo.forks_count,\n visitedAt: Date.now(),\n };\n\n // Keep only MAX_RECENT_ITEMS\n const updated = [newEntry, ...filtered].slice(0, MAX_RECENT_ITEMS);\n saveRecentRepositories(updated);\n\n // Dispatch event so panels can update\n window.dispatchEvent(new CustomEvent('recent-items-updated'));\n}\n\n/**\n * Owner info structure for addRecentOwner\n */\nexport interface OwnerInfo {\n id: number;\n login: string;\n avatar_url?: string;\n name?: string;\n bio?: string;\n type: 'User' | 'Organization';\n public_repos?: number;\n followers?: number;\n}\n\n/**\n * Add an owner to the recent list\n */\nexport function addRecentOwner(owner: OwnerInfo): void {\n const recent = loadRecentOwners();\n\n // Remove if already exists\n const filtered = recent.filter(o => o.id !== owner.id);\n\n // Add to front with current timestamp\n const newEntry: RecentOwner = {\n type: 'owner',\n id: owner.id,\n login: owner.login,\n avatar_url: owner.avatar_url,\n name: owner.name,\n bio: owner.bio,\n ownerType: owner.type,\n public_repos: owner.public_repos,\n followers: owner.followers,\n visitedAt: Date.now(),\n };\n\n // Keep only MAX_RECENT_ITEMS\n const updated = [newEntry, ...filtered].slice(0, MAX_RECENT_ITEMS);\n saveRecentOwners(updated);\n\n // Dispatch event so panels can update\n window.dispatchEvent(new CustomEvent('recent-items-updated'));\n}\n\n/**\n * RecentRepositoriesPanelContent - Internal component that uses theme\n */\nconst RecentRepositoriesPanelContent: React.FC<PanelComponentProps & {\n onNavigate?: (path: string) => void;\n}> = ({\n events,\n onNavigate,\n}) => {\n const { theme } = useTheme();\n const [items, setItems] = useState<RecentItem[]>([]);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [filter, setFilter] = useState<'all' | 'repos' | 'owners'>('all');\n\n // Create unique ID for an item\n const getItemId = (item: RecentItem): string => {\n return item.type === 'repository' ? `repo-${item.id}` : `owner-${item.id}`;\n };\n\n // Load and merge items on mount\n useEffect(() => {\n const loadItems = () => {\n const repos = loadRecentRepositories();\n const owners = loadRecentOwners();\n\n // Merge and sort by visitedAt\n const merged: RecentItem[] = [...repos, ...owners].sort(\n (a, b) => b.visitedAt - a.visitedAt\n );\n setItems(merged);\n };\n\n loadItems();\n\n // Listen for updates\n const handleUpdate = () => loadItems();\n window.addEventListener('recent-items-updated', handleUpdate);\n // Legacy event for backward compatibility\n window.addEventListener('recent-repositories-updated', handleUpdate);\n\n return () => {\n window.removeEventListener('recent-items-updated', handleUpdate);\n window.removeEventListener('recent-repositories-updated', handleUpdate);\n };\n }, []);\n\n // Filtered items\n const filteredItems = items.filter(item => {\n if (filter === 'all') return true;\n if (filter === 'repos') return item.type === 'repository';\n if (filter === 'owners') return item.type === 'owner';\n return true;\n });\n\n // Format relative time\n const formatRelativeTime = (timestamp: number): string => {\n const now = Date.now();\n const diffMs = now - timestamp;\n const diffMins = Math.floor(diffMs / (1000 * 60));\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffMins < 1) return 'just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays === 1) return 'yesterday';\n if (diffDays < 7) return `${diffDays}d ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)}w ago`;\n return `${Math.floor(diffDays / 30)}mo ago`;\n };\n\n // Format number with K/M suffix\n const formatNumber = (num: number): string => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n };\n\n // Handle repository click\n const handleSelectRepository = useCallback((repo: RecentRepository) => {\n setSelectedId(getItemId(repo));\n\n const githubRepo: GitHubRepository = {\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: {\n login: repo.owner.login,\n avatar_url: repo.owner.avatar_url,\n },\n private: false,\n html_url: repo.html_url,\n description: repo.description,\n fork: false,\n clone_url: `https://github.com/${repo.full_name}.git`,\n language: repo.language,\n default_branch: 'main',\n stargazers_count: repo.stargazers_count,\n forks_count: repo.forks_count,\n };\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: githubRepo,\n source: 'click',\n },\n });\n }, [events]);\n\n // Handle repository double-click (open)\n const handleOpenRepository = useCallback((repo: RecentRepository) => {\n if (onNavigate) {\n onNavigate(`/${repo.full_name}`);\n } else {\n const githubRepo: GitHubRepository = {\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: {\n login: repo.owner.login,\n avatar_url: repo.owner.avatar_url,\n },\n private: false,\n html_url: repo.html_url,\n description: repo.description,\n fork: false,\n clone_url: `https://github.com/${repo.full_name}.git`,\n language: repo.language,\n default_branch: 'main',\n stargazers_count: repo.stargazers_count,\n forks_count: repo.forks_count,\n };\n\n events.emit({\n type: 'repository:selected',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: githubRepo,\n source: 'click',\n },\n });\n }\n }, [events, onNavigate]);\n\n // Handle owner click\n const handleSelectOwner = useCallback((owner: RecentOwner) => {\n setSelectedId(getItemId(owner));\n\n events.emit({\n type: 'owner:preview',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }, [events]);\n\n // Handle owner double-click (open)\n const handleOpenOwner = useCallback((owner: RecentOwner) => {\n if (onNavigate) {\n onNavigate(`/${owner.login}`);\n } else {\n events.emit({\n type: 'owner:selected',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }\n }, [events, onNavigate]);\n\n // Remove a single item\n const handleRemoveItem = useCallback((item: RecentItem, e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (item.type === 'repository') {\n const repos = loadRecentRepositories().filter(r => r.id !== item.id);\n saveRecentRepositories(repos);\n } else {\n const owners = loadRecentOwners().filter(o => o.id !== item.id);\n saveRecentOwners(owners);\n }\n\n setItems(prev => prev.filter(i => getItemId(i) !== getItemId(item)));\n\n if (selectedId === getItemId(item)) {\n setSelectedId(null);\n }\n }, [selectedId]);\n\n // Clear all history\n const handleClearAll = useCallback(() => {\n if (filter === 'all' || filter === 'repos') {\n saveRecentRepositories([]);\n }\n if (filter === 'all' || filter === 'owners') {\n saveRecentOwners([]);\n }\n\n if (filter === 'all') {\n setItems([]);\n } else {\n setItems(prev => prev.filter(item =>\n filter === 'repos' ? item.type !== 'repository' : item.type !== 'owner'\n ));\n }\n setSelectedId(null);\n }, [filter]);\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <History size={24} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n Recent\n </h2>\n </div>\n {items.length > 0 && (\n <button\n onClick={handleClearAll}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n background: 'transparent',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n title=\"Clear history\"\n >\n <Trash2 size={14} />\n Clear\n </button>\n )}\n </div>\n\n {/* Filter tabs */}\n {items.length > 0 && (\n <div\n style={{\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n gap: '4px',\n }}\n >\n {[\n { key: 'all', label: 'All' },\n { key: 'repos', label: 'Repositories' },\n { key: 'owners', label: 'Owners' },\n ].map(({ key, label }) => (\n <button\n key={key}\n onClick={() => setFilter(key as typeof filter)}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n background: filter === key ? theme.colors.primary : theme.colors.backgroundSecondary,\n color: filter === key ? '#fff' : theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n fontWeight: filter === key ? theme.fontWeights.semibold : theme.fontWeights.body,\n }}\n >\n {label}\n </button>\n ))}\n </div>\n )}\n\n {/* Empty State */}\n {filteredItems.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0, fontSize: `${theme.fontSizes[2]}px` }}>\n {items.length === 0 ? 'No recent activity' : 'No items match filter'}\n </p>\n <p style={{ margin: '8px 0 0', fontSize: `${theme.fontSizes[1]}px` }}>\n {items.length === 0\n ? 'Repositories and owners you visit will appear here'\n : 'Try a different filter'}\n </p>\n </div>\n )}\n\n {/* Items List */}\n {filteredItems.length > 0 && (\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n }}\n >\n {filteredItems.map((item) => {\n const itemId = getItemId(item);\n const isSelected = selectedId === itemId;\n const isHovered = hoveredId === itemId;\n\n if (item.type === 'repository') {\n return (\n <button\n key={itemId}\n type=\"button\"\n onClick={() => handleSelectRepository(item)}\n onDoubleClick={() => handleOpenRepository(item)}\n onMouseEnter={() => setHoveredId(itemId)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '8px',\n border: isSelected\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: isSelected\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n transition: 'all 0.15s ease',\n position: 'relative',\n }}\n >\n {isHovered && (\n <button\n onClick={(e) => handleRemoveItem(item, e)}\n style={{\n position: 'absolute',\n top: '8px',\n right: '8px',\n padding: '4px',\n borderRadius: '4px',\n border: 'none',\n background: theme.colors.backgroundSecondary,\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"Remove from history\"\n >\n <X size={14} />\n </button>\n )}\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <BookOpen size={16} color={theme.colors.textSecondary} />\n {item.owner.avatar_url && (\n <img\n src={item.owner.avatar_url}\n alt={item.owner.login}\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n border: `1px solid ${theme.colors.border}`,\n }}\n />\n )}\n <div style={{ display: 'flex', flexDirection: 'column', minWidth: 0 }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {item.owner.login}\n </span>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {item.name}\n </span>\n </div>\n </div>\n\n {item.description && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {item.description}\n </p>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {item.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: theme.colors.info,\n }}\n />\n {item.language}\n </span>\n )}\n {item.stargazers_count !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={14} />\n {formatNumber(item.stargazers_count)}\n </span>\n )}\n {item.forks_count !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={14} />\n {formatNumber(item.forks_count)}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={14} />\n {formatRelativeTime(item.visitedAt)}\n </span>\n <a\n href={item.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n );\n }\n\n // Owner item\n return (\n <button\n key={itemId}\n type=\"button\"\n onClick={() => handleSelectOwner(item)}\n onDoubleClick={() => handleOpenOwner(item)}\n onMouseEnter={() => setHoveredId(itemId)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '8px',\n border: isSelected\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: isSelected\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n transition: 'all 0.15s ease',\n position: 'relative',\n }}\n >\n {isHovered && (\n <button\n onClick={(e) => handleRemoveItem(item, e)}\n style={{\n position: 'absolute',\n top: '8px',\n right: '8px',\n padding: '4px',\n borderRadius: '4px',\n border: 'none',\n background: theme.colors.backgroundSecondary,\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"Remove from history\"\n >\n <X size={14} />\n </button>\n )}\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n {item.ownerType === 'Organization' ? (\n <Building2 size={16} color={theme.colors.textSecondary} />\n ) : (\n <User size={16} color={theme.colors.textSecondary} />\n )}\n {item.avatar_url && (\n <img\n src={item.avatar_url}\n alt={item.login}\n style={{\n width: 32,\n height: 32,\n borderRadius: item.ownerType === 'Organization' ? 8 : '50%',\n border: `1px solid ${theme.colors.border}`,\n }}\n />\n )}\n <div style={{ display: 'flex', flexDirection: 'column', minWidth: 0 }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {item.name || item.login}\n </span>\n {item.name && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n @{item.login}\n </span>\n )}\n </div>\n </div>\n\n {item.bio && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {item.bio}\n </p>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {item.public_repos !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <BookOpen size={14} />\n {formatNumber(item.public_repos)} repos\n </span>\n )}\n {item.followers !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <User size={14} />\n {formatNumber(item.followers)} followers\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={14} />\n {formatRelativeTime(item.visitedAt)}\n </span>\n <a\n href={`https://github.com/${item.login}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * RecentRepositoriesPanel - A panel for displaying recently visited repositories and owners\n *\n * Features:\n * - Persists visited repos and owners in localStorage\n * - Shows owner avatar, repo name, description\n * - Displays stars, forks, language, and last visited time\n * - Filter by repositories or owners\n * - Click to preview, double-click to open\n * - Remove individual items or clear all history\n */\nexport const RecentRepositoriesPanel: React.FC<PanelComponentProps & {\n onNavigate?: (path: string) => void;\n}> = (props) => {\n return <RecentRepositoriesPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const RecentRepositoriesPanelMetadata = {\n id: 'recent-repositories',\n name: 'Recent',\n description: 'View and navigate to recently visited repositories and owners',\n icon: 'history',\n version: '0.1.0',\n slices: [],\n surfaces: ['panel'],\n};\n","import React, { useState, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n BookOpen,\n Network,\n ArrowRight,\n Github,\n Sparkles,\n ExternalLink,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\n\n/**\n * Highlighted project for the quick start section\n */\nexport interface HighlightedProject {\n owner: string;\n repo: string;\n label?: string; // Optional display label, defaults to \"owner/repo\"\n}\n\n/**\n * Featured organization for the organizations section\n */\nexport interface FeaturedOrganization {\n login: string;\n description?: string;\n}\n\n/**\n * Props for the WelcomePanel\n */\nexport interface WelcomePanelProps extends PanelComponentProps {\n onNavigate?: (owner: string, repo: string) => void;\n highlightedProjects?: HighlightedProject[];\n featuredOrganizations?: FeaturedOrganization[];\n onOrganizationClick?: (org: string) => void;\n}\n\n/**\n * Parse a GitHub URL or owner/repo string\n */\nfunction parseGitHubInput(input: string): { owner: string; repo: string } | null {\n const trimmed = input.trim();\n\n // Try full URL: https://github.com/owner/repo\n const urlMatch = trimmed.match(/github\\.com\\/([^/]+)\\/([^/]+)/);\n if (urlMatch) {\n return { owner: urlMatch[1], repo: urlMatch[2].replace(/\\.git$/, '') };\n }\n\n // Try owner/repo format\n const shortMatch = trimmed.match(/^([^/]+)\\/([^/]+)$/);\n if (shortMatch) {\n return { owner: shortMatch[1], repo: shortMatch[2] };\n }\n\n return null;\n}\n\n/**\n * Feature card component\n */\nconst FeatureCard: React.FC<{\n icon: React.ReactNode;\n title: string;\n description: string;\n theme: ReturnType<typeof useTheme>['theme'];\n link?: string;\n linkLabel?: string;\n}> = ({ icon, title, description, theme, link, linkLabel }) => {\n // Split title to stack words vertically - first word in text color, rest in primary\n const words = title.split(' ');\n const firstWord = words[0];\n const restWords = words.slice(1).join(' ');\n\n return (\n <div\n style={{\n padding: '24px',\n borderRadius: '12px',\n backgroundColor: theme.colors.surface,\n border: `1px solid ${theme.colors.border}`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n flex: 1,\n minWidth: '200px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n width: 48,\n height: 48,\n borderRadius: '10px',\n backgroundColor: `${theme.colors.primary}15`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.primary,\n }}\n >\n {icon}\n </div>\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n lineHeight: 1.3,\n }}\n >\n <span style={{ color: theme.colors.text }}>{firstWord}</span>\n {restWords && (\n <span style={{ color: theme.colors.primary }}>{restWords}</span>\n )}\n </h3>\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.textSecondary,\n lineHeight: 1.5,\n }}\n >\n {description}\n </p>\n {link && (\n <a\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n marginTop: '4px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.primary,\n textDecoration: 'none',\n }}\n >\n {linkLabel || 'Learn more'}\n <ExternalLink size={14} />\n </a>\n )}\n </div>\n );\n};\n\n// Default highlighted projects\nconst defaultHighlightedProjects: HighlightedProject[] = [\n { owner: 'facebook', repo: 'react' },\n { owner: 'vercel', repo: 'next.js' },\n];\n\n// Default featured organizations\nconst defaultFeaturedOrganizations: FeaturedOrganization[] = [];\n\n/**\n * Organization card component\n */\nconst OrganizationCard: React.FC<{\n org: FeaturedOrganization;\n theme: ReturnType<typeof useTheme>['theme'];\n onClick: () => void;\n}> = ({ org, theme, onClick }) => {\n return (\n <button\n onClick={onClick}\n style={{\n padding: '16px 20px',\n borderRadius: '12px',\n backgroundColor: theme.colors.surface,\n border: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n minWidth: '240px',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = theme.colors.primary;\n e.currentTarget.style.transform = 'translateY(-2px)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = theme.colors.border;\n e.currentTarget.style.transform = 'translateY(0)';\n }}\n >\n {/* Organization Avatar */}\n <img\n src={`https://github.com/${org.login}.png?size=64`}\n alt={org.login}\n style={{\n width: 40,\n height: 40,\n borderRadius: '8px',\n flexShrink: 0,\n }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n marginBottom: org.description ? '2px' : 0,\n }}\n >\n {org.login}\n </div>\n {org.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {org.description}\n </div>\n )}\n </div>\n </button>\n );\n};\n\n/**\n * WelcomePanel - A landing panel with branding and repo search\n *\n * Features:\n * - Brand introduction with tagline\n * - Search input for owner/repo or GitHub URLs\n * - Feature highlights (documentation, diagrams, chat)\n * - Configurable quick start links to repos\n */\nexport const WelcomePanel: React.FC<WelcomePanelProps> = ({\n onNavigate,\n highlightedProjects = defaultHighlightedProjects,\n featuredOrganizations = defaultFeaturedOrganizations,\n onOrganizationClick,\n}) => {\n const { theme } = useTheme();\n const [repoInput, setRepoInput] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n\n const parsed = parseGitHubInput(repoInput);\n if (!parsed) {\n setError('Enter a valid format: owner/repo or GitHub URL');\n return;\n }\n\n if (onNavigate) {\n onNavigate(parsed.owner, parsed.repo);\n } else {\n // Default: navigate via window.location\n window.location.href = `/${parsed.owner}/${parsed.repo}`;\n }\n }, [repoInput, onNavigate]);\n\n const handleProjectClick = useCallback((project: HighlightedProject) => {\n if (onNavigate) {\n onNavigate(project.owner, project.repo);\n } else {\n window.location.href = `/${project.owner}/${project.repo}`;\n }\n }, [onNavigate]);\n\n const handleOrganizationClick = useCallback((org: FeaturedOrganization) => {\n if (onOrganizationClick) {\n onOrganizationClick(org.login);\n } else {\n // Default: open GitHub org page\n window.open(`https://github.com/${org.login}`, '_blank');\n }\n }, [onOrganizationClick]);\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n overflowY: 'auto',\n }}\n >\n {/* Featured Organizations Section */}\n {featuredOrganizations.length > 0 && (\n <div\n style={{\n padding: '48px 32px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[6] || 32}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n textAlign: 'center',\n }}\n >\n Explore software like never before\n </h2>\n <div\n style={{\n display: 'flex',\n gap: '16px',\n flexWrap: 'wrap',\n justifyContent: 'center',\n }}\n >\n {featuredOrganizations.map((org) => (\n <OrganizationCard\n key={org.login}\n org={org}\n theme={theme}\n onClick={() => handleOrganizationClick(org)}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Hero Section */}\n <div\n style={{\n padding: '48px 32px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Tagline */}\n <h1\n style={{\n margin: '0 0 32px',\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.bold,\n color: theme.colors.text,\n }}\n >\n Explore your Projects\n </h1>\n\n {/* Search Input */}\n <form\n onSubmit={handleSubmit}\n style={{\n width: '100%',\n maxWidth: '500px',\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '8px',\n padding: '6px',\n borderRadius: '12px',\n backgroundColor: theme.colors.surface,\n border: `2px solid ${error ? theme.colors.error : theme.colors.border}`,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '12px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={20} />\n </div>\n <input\n type=\"text\"\n value={repoInput}\n onChange={(e) => {\n setRepoInput(e.target.value);\n setError(null);\n }}\n placeholder=\"owner/repo or paste GitHub URL\"\n style={{\n flex: 1,\n padding: '12px 8px',\n border: 'none',\n background: 'transparent',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n outline: 'none',\n }}\n />\n <button\n type=\"submit\"\n style={{\n padding: '12px 20px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: '#fff',\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n Explore\n <ArrowRight size={18} />\n </button>\n </div>\n {error && (\n <p\n style={{\n margin: '8px 0 0',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.error,\n }}\n >\n {error}\n </p>\n )}\n </form>\n </div>\n\n {/* Features Section */}\n <div\n style={{\n padding: '48px 32px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '20px',\n flexWrap: 'wrap',\n justifyContent: 'center',\n maxWidth: '900px',\n }}\n >\n <FeatureCard\n icon={<BookOpen size={24} />}\n title=\"Reliable Documentation\"\n description=\"Always up-to-date documentation generated directly from your codebase, never out of sync.\"\n theme={theme}\n link=\"https://github.com/principal-ai/alexandria-cli\"\n linkLabel=\"alexandria-cli\"\n />\n <FeatureCard\n icon={<Network size={24} />}\n title=\"Interactive Diagrams\"\n description=\"Visualize repository structure, dependencies, and architecture with auto-generated diagrams you can explore.\"\n theme={theme}\n link=\"https://www.npmjs.com/package/@principal-ai/visual-validation-cli\"\n linkLabel=\"visual-validation-cli\"\n />\n <FeatureCard\n icon={<Sparkles size={24} />}\n title=\"Principal Agent\"\n description=\"Ask questions about any repository and get instant, context-aware answers powered by AI.\"\n theme={theme}\n />\n </div>\n </div>\n\n </div>\n );\n};\n\n/**\n * Panel metadata for registration\n */\nexport const WelcomePanelMetadata = {\n id: 'welcome',\n name: 'Welcome',\n description: 'Landing page with branding and repository search',\n icon: 'home',\n version: '0.1.0',\n slices: [],\n surfaces: ['panel'],\n};\n","/**\n * GitHub Panel Tools\n *\n * UTCP-compatible tools for GitHub repository operations.\n * These tools emit events that the GitHub panels listen for.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: List Repositories\n *\n * Triggers a refresh of the user's GitHub repositories.\n * The panel will emit repository data when available.\n */\nexport const listRepositoriesTool: PanelTool = {\n name: 'list_repositories',\n description: 'Get a list of GitHub repositories the user has access to, including owned repos, starred repos, and organization repos.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'list', 'browse'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github:list-repositories',\n },\n};\n\n/**\n * Tool: Select Repository\n *\n * Select a repository to view its details and README.\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_repository',\n description: 'Select a GitHub repository to view its details, README, and files. Use the full repository name in \"owner/repo\" format.',\n inputs: {\n type: 'object',\n properties: {\n repository: {\n type: 'string',\n description: 'The full repository name in \"owner/repo\" format (e.g., \"facebook/react\")',\n },\n },\n required: ['repository'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n repository: { type: 'string' },\n },\n },\n tags: ['github', 'repository', 'select', 'navigate'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'repository:selected',\n },\n};\n\n/**\n * Tool: Preview Repository\n *\n * Preview a repository's README without fully selecting it.\n */\nexport const previewRepositoryTool: PanelTool = {\n name: 'preview_repository',\n description: 'Preview a GitHub repository\\'s README in the viewer without navigating to it.',\n inputs: {\n type: 'object',\n properties: {\n repository: {\n type: 'string',\n description: 'The full repository name in \"owner/repo\" format (e.g., \"facebook/react\")',\n },\n },\n required: ['repository'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'preview', 'readme'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'repository:preview',\n },\n};\n\n/**\n * Tool: Search Repositories\n *\n * Search through the user's repositories.\n */\nexport const searchRepositoriesTool: PanelTool = {\n name: 'search_repositories',\n description: 'Search through the user\\'s GitHub repositories by name, description, or language.',\n inputs: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'The search query to filter repositories',\n },\n },\n required: ['query'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'search', 'filter'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github:search-repositories',\n },\n};\n\n/**\n * Tool: Open Repository Switcher\n *\n * Open the repository switcher modal.\n */\nexport const openRepositorySwitcherTool: PanelTool = {\n name: 'open_repository_switcher',\n description: 'Open the repository switcher modal to browse and select a different repository.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'switch', 'modal'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'repository:open-switcher',\n },\n};\n\n/**\n * Tool: Request GitHub Login\n *\n * Prompt the user to sign in to GitHub.\n */\nexport const requestGitHubLoginTool: PanelTool = {\n name: 'request_github_login',\n description: 'Prompt the user to sign in to their GitHub account to access repositories.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'auth', 'login', 'sign-in'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github:login-requested',\n },\n};\n\n/**\n * All GitHub tools exported as an array.\n */\nexport const githubTools: PanelTool[] = [\n listRepositoriesTool,\n selectRepositoryTool,\n previewRepositoryTool,\n searchRepositoriesTool,\n openRepositorySwitcherTool,\n requestGitHubLoginTool,\n];\n\n/**\n * GitHub tools metadata for registration.\n */\nexport const githubToolsMetadata: PanelToolsMetadata = {\n id: 'github-panels',\n name: 'GitHub Panels',\n description: 'Tools for browsing and managing GitHub repositories',\n tools: githubTools,\n};\n","import { GitHubProjectsPanel, GitHubProjectsPanelMetadata } from './panels/GitHubProjectsPanel';\nimport { GitHubSearchPanel, GitHubSearchPanelMetadata } from './panels/GitHubSearchPanel';\nimport { OwnerRepositoriesPanel, OwnerRepositoriesPanelMetadata } from './panels/OwnerRepositoriesPanel';\nimport { RecentRepositoriesPanel, RecentRepositoriesPanelMetadata } from './panels/RecentRepositoriesPanel';\nimport { WelcomePanel, WelcomePanelMetadata } from './panels/WelcomePanel';\nimport type { PanelDefinition, PanelContextValue, PanelTool } from './types';\nimport { githubTools, githubToolsMetadata } from './tools';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n ...GitHubProjectsPanelMetadata,\n tools: githubTools, // Add tools to panel metadata\n },\n component: GitHubProjectsPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Projects Panel mounted');\n\n // Refresh GitHub data if available\n const slice = context.getSlice('github-repositories');\n if (slice && !slice.loading) {\n await slice.refresh();\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Projects Panel unmounting');\n },\n },\n {\n metadata: GitHubSearchPanelMetadata,\n component: GitHubSearchPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Search Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Search Panel unmounting');\n },\n },\n {\n metadata: OwnerRepositoriesPanelMetadata,\n component: OwnerRepositoriesPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Owner Repositories Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Owner Repositories Panel unmounting');\n },\n },\n {\n metadata: RecentRepositoriesPanelMetadata,\n component: RecentRepositoriesPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Recent Repositories Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Recent Repositories Panel unmounting');\n },\n },\n {\n metadata: WelcomePanelMetadata,\n component: WelcomePanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Welcome Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Welcome Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - GitHub Panels Extension');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - GitHub Panels Extension');\n};\n\n// Export components for direct use\nexport { GitHubProjectCard } from './components/GitHubProjectCard';\nexport { GitHubProjectsPanel } from './panels/GitHubProjectsPanel';\nexport { GitHubSearchPanel } from './panels/GitHubSearchPanel';\nexport { OwnerRepositoriesPanel } from './panels/OwnerRepositoriesPanel';\nexport { RecentRepositoriesPanel, addRecentRepository, addRecentOwner } from './panels/RecentRepositoriesPanel';\nexport type { OwnerInfo } from './panels/RecentRepositoriesPanel';\nexport { WelcomePanel } from './panels/WelcomePanel';\nexport type { WelcomePanelProps, HighlightedProject, FeaturedOrganization } from './panels/WelcomePanel';\n\n// Export types\nexport type {\n GitHubOwner,\n GitHubRepository,\n GitHubOrganization,\n GitHubRepositoriesSliceData,\n RepositorySelectedEventPayload,\n RepositoryPreviewEventPayload,\n GitHubPanelEventType,\n} from './types/github';\n\n// Export tools\nexport {\n githubTools,\n githubToolsMetadata,\n listRepositoriesTool,\n selectRepositoryTool,\n previewRepositoryTool,\n searchRepositoriesTool,\n openRepositorySwitcherTool,\n requestGitHubLoginTool,\n} from './tools';\n"],"names":["__iconNode","React","Filter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27]}
1
+ {"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../node_modules/lucide-react/dist/esm/icons/arrow-up-down.js","../node_modules/lucide-react/dist/esm/icons/book-open.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../node_modules/lucide-react/dist/esm/icons/chevron-right.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/folder-open.js","../node_modules/lucide-react/dist/esm/icons/folder.js","../node_modules/lucide-react/dist/esm/icons/funnel.js","../node_modules/lucide-react/dist/esm/icons/git-fork.js","../node_modules/lucide-react/dist/esm/icons/github.js","../node_modules/lucide-react/dist/esm/icons/history.js","../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/lucide-react/dist/esm/icons/lock.js","../node_modules/lucide-react/dist/esm/icons/log-in.js","../node_modules/lucide-react/dist/esm/icons/message-square.js","../node_modules/lucide-react/dist/esm/icons/network.js","../node_modules/lucide-react/dist/esm/icons/refresh-cw.js","../node_modules/lucide-react/dist/esm/icons/scale.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/sparkles.js","../node_modules/lucide-react/dist/esm/icons/star.js","../node_modules/lucide-react/dist/esm/icons/tag.js","../node_modules/lucide-react/dist/esm/icons/trash-2.js","../node_modules/lucide-react/dist/esm/icons/user.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/components/GitHubProjectCard.tsx","../src/panels/GitHubProjectsPanel.tsx","../src/panels/GitHubSearchPanel.tsx","../src/panels/GitHubIssuesPanel.tsx","../src/panels/OwnerRepositoriesPanel.tsx","../src/panels/RecentRepositoriesPanel.tsx","../src/panels/WelcomePanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 28, 32, 36, 48, 56, 68, 84, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.2,\n tight: 1.05,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\", \"1400px\"],\n sizes: [16, 32, 64, 128, 200, 240, 256, 300, 512, 740, 768, 820, 900, 1024, 1200, 1400, 1536],\n radii: [0, 2, 4, 6, 7, 8, 9, 10, 12, 14, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 4px 12px rgba(0, 194, 255, 0.4)\",\n \"0 6px 24px rgba(0, 194, 255, 0.1)\",\n \"0 8px 32px rgba(0, 0, 0, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50, 1000],\n colors: {\n text: \"#ffffff\",\n background: \"#000000\",\n primary: \"#00C2FF\",\n secondary: \"#0098CC\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 194, 255, 0.15)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 194, 255, 0.2)\",\n backgroundSecondary: \"#0a1628\",\n backgroundTertiary: \"#0f1c2e\",\n backgroundLight: \"rgba(0, 194, 255, 0.04)\",\n backgroundHover: \"rgba(0, 194, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.4)\",\n textSecondary: \"#d1d5db\",\n textTertiary: \"#9ca3af\",\n textMuted: \"#6b7280\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#000000\",\n bg: \"#00C2FF\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#00D9FF\"\n }\n },\n secondary: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 194, 255, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 194, 255, 0.1)\",\n borderColor: \"#00C2FF\"\n }\n },\n ghost: {\n color: \"#00C2FF\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#00D9FF\",\n bg: \"rgba(0, 194, 255, 0.1)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"#ffffff\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\",\n color: \"text\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 4\n },\n secondary: {\n bg: \"rgba(0, 194, 255, 0.05)\",\n border: \"1px solid\",\n borderColor: \"rgba(0, 194, 255, 0.2)\",\n borderRadius: 4\n }\n }\n};\nvar landingPageLightTheme = {\n ...landingPageTheme,\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#0098CC\",\n secondary: \"#00C2FF\",\n accent: \"#0066FF\",\n highlight: \"rgba(0, 152, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(0, 152, 204, 0.2)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 152, 204, 0.03)\",\n backgroundHover: \"rgba(0, 152, 204, 0.05)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"#ffffff\",\n bg: \"#0098CC\",\n borderWidth: 0,\n padding: \"8px 20px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"#007aa8\"\n }\n },\n secondary: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(0, 152, 204, 0.3)\",\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 600,\n cursor: \"pointer\",\n \"&:hover\": {\n bg: \"rgba(0, 152, 204, 0.05)\",\n borderColor: \"#0098CC\"\n }\n },\n ghost: {\n color: \"#0098CC\",\n bg: \"transparent\",\n borderWidth: 0,\n padding: \"8px 16px\",\n fontSize: 14,\n fontWeight: 500,\n cursor: \"pointer\",\n \"&:hover\": {\n color: \"#007aa8\",\n bg: \"rgba(0, 152, 204, 0.05)\"\n }\n }\n }\n};\n\n// src/themes.ts\nvar regalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#f1e8dc\",\n background: \"#1a1f2e\",\n primary: \"#d4a574\",\n secondary: \"#e0b584\",\n accent: \"#c9b8a3\",\n highlight: \"rgba(212, 165, 116, 0.15)\",\n muted: \"#8b7968\",\n success: \"#5c8a72\",\n warning: \"#d4a574\",\n error: \"#a85751\",\n info: \"#d4a574\",\n border: \"rgba(212, 165, 116, 0.2)\",\n backgroundSecondary: \"#212738\",\n backgroundTertiary: \"#2d3446\",\n backgroundLight: \"rgba(212, 165, 116, 0.08)\",\n backgroundHover: \"rgba(212, 165, 116, 0.15)\",\n surface: \"#212738\",\n textSecondary: \"#c9b8a3\",\n textTertiary: \"#8b7968\",\n textMuted: \"#8b7968\",\n highlightBg: \"rgba(255, 193, 7, 0.25)\",\n highlightBorder: \"rgba(255, 193, 7, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"background\",\n bg: \"primary\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"muted\",\n \"&:hover\": {\n bg: \"backgroundSecondary\"\n }\n },\n ghost: {\n color: \"primary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"muted\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"background\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar terminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n heading: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace',\n monospace: '\"SF Mono\", \"Monaco\", \"Inconsolata\", \"Fira Code\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px 0 rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px 0 rgba(0, 0, 0, 0.07)\",\n \"0 8px 12px 0 rgba(0, 0, 0, 0.08)\",\n \"0 16px 24px 0 rgba(0, 0, 0, 0.10)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#e4e4e4\",\n background: \"rgba(10, 10, 10, 0.85)\",\n primary: \"#66b3ff\",\n secondary: \"#80c4ff\",\n accent: \"#66ff99\",\n highlight: \"rgba(102, 179, 255, 0.15)\",\n muted: \"rgba(26, 26, 26, 0.8)\",\n success: \"#66ff99\",\n warning: \"#ffcc66\",\n error: \"#ff6666\",\n info: \"#66b3ff\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"rgba(15, 15, 15, 0.9)\",\n backgroundTertiary: \"rgba(20, 20, 20, 0.9)\",\n backgroundLight: \"rgba(255, 255, 255, 0.05)\",\n backgroundHover: \"rgba(102, 179, 255, 0.08)\",\n surface: \"rgba(15, 15, 15, 0.95)\",\n textSecondary: \"rgba(255, 255, 255, 0.7)\",\n textTertiary: \"rgba(255, 255, 255, 0.5)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(255, 235, 59, 0.25)\",\n highlightBorder: \"rgba(255, 235, 59, 0.5)\"\n },\n modes: {\n light: {\n text: \"#1a1a1a\",\n background: \"rgba(255, 255, 255, 0.9)\",\n primary: \"#0066cc\",\n secondary: \"#0052a3\",\n accent: \"#00cc88\",\n highlight: \"rgba(0, 102, 204, 0.08)\",\n muted: \"rgba(245, 245, 245, 0.8)\",\n success: \"#00cc88\",\n warning: \"#ffaa00\",\n error: \"#ff3333\",\n info: \"#0066cc\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"rgba(250, 250, 250, 0.9)\",\n backgroundTertiary: \"rgba(245, 245, 245, 0.9)\",\n backgroundLight: \"rgba(0, 0, 0, 0.02)\",\n backgroundHover: \"rgba(0, 102, 204, 0.04)\",\n surface: \"rgba(255, 255, 255, 0.95)\",\n textSecondary: \"rgba(0, 0, 0, 0.6)\",\n textTertiary: \"rgba(0, 0, 0, 0.4)\",\n textMuted: \"rgba(0, 0, 0, 0.3)\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\nvar matrixTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(0, 216, 53, 0.15)\",\n \"0 0 10px rgba(0, 216, 53, 0.2)\",\n \"0 0 15px rgba(0, 216, 53, 0.25)\",\n \"0 0 20px rgba(0, 216, 53, 0.3)\",\n \"0 0 30px rgba(0, 216, 53, 0.4)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#00d835\",\n secondary: \"#00a828\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.15)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(0, 216, 53, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(0, 216, 53, 0.03)\",\n backgroundHover: \"rgba(0, 216, 53, 0.08)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.25)\",\n highlightBorder: \"rgba(0, 216, 53, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"highlight\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar matrixMinimalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n heading: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace',\n monospace: '\"Courier New\", \"Courier\", \"Lucida Console\", \"Monaco\", monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 0 20px rgba(0, 216, 53, 0.1)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#a8a8a8\",\n background: \"#000000\",\n primary: \"#b8b8b8\",\n secondary: \"#909090\",\n accent: \"#00d835\",\n highlight: \"rgba(0, 216, 53, 0.1)\",\n muted: \"#0a0a0a\",\n success: \"#00d835\",\n warning: \"#d4a000\",\n error: \"#d63333\",\n info: \"#00a8d6\",\n border: \"rgba(184, 184, 184, 0.1)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(184, 184, 184, 0.02)\",\n backgroundHover: \"rgba(0, 216, 53, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#808080\",\n textTertiary: \"#606060\",\n textMuted: \"#484848\",\n highlightBg: \"rgba(0, 216, 53, 0.2)\",\n highlightBorder: \"rgba(0, 216, 53, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar slateTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.2)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.2)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.2)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.25)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#9ca3af\",\n background: \"#1a1c1e\",\n primary: \"#d1d5db\",\n secondary: \"#6b7280\",\n accent: \"#f59e0b\",\n highlight: \"rgba(209, 213, 219, 0.15)\",\n muted: \"#2d3134\",\n success: \"#10b981\",\n warning: \"#f59e0b\",\n error: \"#ef4444\",\n info: \"#3b82f6\",\n border: \"rgba(156, 163, 175, 0.15)\",\n backgroundSecondary: \"#22252a\",\n backgroundTertiary: \"#2d3134\",\n backgroundLight: \"rgba(156, 163, 175, 0.05)\",\n backgroundHover: \"rgba(156, 163, 175, 0.1)\",\n surface: \"#1f2124\",\n textSecondary: \"#e5e7eb\",\n textTertiary: \"#6b7280\",\n textMuted: \"#4b5563\",\n highlightBg: \"rgba(245, 158, 11, 0.25)\",\n highlightBorder: \"rgba(245, 158, 11, 0.5)\"\n },\n buttons: {\n primary: {\n color: \"#1a1c1e\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#9ca3af\"\n }\n },\n secondary: {\n color: \"#e5e7eb\",\n bg: \"secondary\",\n borderWidth: 0,\n \"&:hover\": {\n bg: \"#4b5563\"\n }\n },\n ghost: {\n color: \"textSecondary\",\n bg: \"transparent\",\n \"&:hover\": {\n bg: \"backgroundHover\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\",\n color: \"textSecondary\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textTertiary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/ThemeProvider.tsx\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\n\n// src/themeHelpers.ts\nfunction overrideColors(theme, colors) {\n return {\n ...theme,\n colors: {\n ...theme.colors,\n ...colors\n }\n };\n}\nfunction makeTheme(baseTheme, overrides) {\n return {\n ...baseTheme,\n ...overrides,\n colors: {\n ...baseTheme.colors,\n ...overrides.colors\n },\n fonts: {\n ...baseTheme.fonts,\n ...overrides.fonts\n }\n };\n}\nfunction addMode(theme, modeName, colors, baseMode) {\n let baseColors;\n if (baseMode && theme.modes && theme.modes[baseMode]) {\n baseColors = {\n ...theme.colors,\n ...theme.modes[baseMode]\n };\n } else {\n baseColors = theme.colors;\n }\n const newMode = {\n ...baseColors,\n ...colors\n };\n return {\n ...theme,\n modes: {\n ...theme.modes,\n [modeName]: newMode\n }\n };\n}\nfunction getMode(theme, mode) {\n if (!mode || !theme.modes || !theme.modes[mode]) {\n return theme.colors;\n }\n return {\n ...theme.colors,\n ...theme.modes[mode]\n };\n}\n\n// src/ThemeProvider.tsx\nvar ThemeContext;\nvar getThemeContext = () => {\n if (typeof window !== \"undefined\") {\n const globalWindow = window;\n if (!globalWindow.__principlemd_theme_context__) {\n globalWindow.__principlemd_theme_context__ = createContext(undefined);\n }\n return globalWindow.__principlemd_theme_context__;\n } else {\n if (!ThemeContext) {\n ThemeContext = createContext(undefined);\n }\n return ThemeContext;\n }\n};\nvar ThemeContextSingleton = getThemeContext();\nvar useTheme = () => {\n const context = useContext(ThemeContextSingleton);\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider\");\n }\n return context;\n};\nvar ThemeProvider = ({\n children,\n theme: customTheme = theme,\n initialMode\n}) => {\n const [mode, setMode] = useState(initialMode);\n const activeTheme = React.useMemo(() => {\n if (!mode || !customTheme.modes || !customTheme.modes[mode]) {\n return customTheme;\n }\n return {\n ...customTheme,\n colors: getMode(customTheme, mode)\n };\n }, [customTheme, mode]);\n useEffect(() => {\n if (!initialMode) {\n const savedMode = localStorage.getItem(\"principlemd-theme-mode\");\n if (savedMode) {\n setMode(savedMode);\n }\n }\n }, [initialMode]);\n useEffect(() => {\n if (mode) {\n localStorage.setItem(\"principlemd-theme-mode\", mode);\n } else {\n localStorage.removeItem(\"principlemd-theme-mode\");\n }\n }, [mode]);\n const value = {\n theme: activeTheme,\n mode,\n setMode\n };\n return /* @__PURE__ */ React.createElement(ThemeContextSingleton.Provider, {\n value\n }, children);\n};\nvar withTheme = (Component) => {\n return (props) => {\n const { theme: theme2 } = useTheme();\n return /* @__PURE__ */ React.createElement(Component, {\n ...props,\n theme: theme2\n });\n };\n};\n// src/utils.ts\nvar getColor = (theme2, colorKey) => {\n const colors = theme2.colors;\n const value = colors[colorKey];\n return typeof value === \"string\" ? value : colorKey;\n};\nvar getSpace = (theme2, index) => {\n return theme2.space[index] || 0;\n};\nvar getFontSize = (theme2, index) => {\n return theme2.fontSizes[index] || theme2.fontSizes[2];\n};\nvar getRadius = (theme2, index) => {\n return theme2.radii[index] || 0;\n};\nvar getShadow = (theme2, index) => {\n return theme2.shadows[index] || \"none\";\n};\nvar getZIndex = (theme2, index) => {\n return theme2.zIndices[index] || 0;\n};\nvar responsive = (values) => {\n return values.reduce((acc, value, index) => {\n if (index === 0) {\n return value;\n }\n return {\n ...acc,\n [`@media screen and (min-width: ${values[index - 1]})`]: value\n };\n }, {});\n};\nvar sx = (styles) => styles;\nvar createStyle = (theme2, styleObj) => {\n const processValue = (value) => {\n if (typeof value === \"string\") {\n if (value in theme2.colors) {\n return getColor(theme2, value);\n }\n return value;\n }\n if (typeof value === \"number\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map(processValue);\n }\n if (typeof value === \"object\" && value !== null) {\n const processed2 = {};\n for (const [key, val] of Object.entries(value)) {\n processed2[key] = processValue(val);\n }\n return processed2;\n }\n return value;\n };\n const processed = {};\n for (const [key, val] of Object.entries(styleObj)) {\n processed[key] = processValue(val);\n }\n return processed;\n};\nvar mergeThemes = (baseTheme, ...overrides) => {\n return overrides.reduce((theme2, override) => ({\n space: override.space || theme2.space,\n fonts: { ...theme2.fonts, ...override.fonts || {} },\n fontSizes: override.fontSizes || theme2.fontSizes,\n fontWeights: { ...theme2.fontWeights, ...override.fontWeights || {} },\n lineHeights: { ...theme2.lineHeights, ...override.lineHeights || {} },\n breakpoints: override.breakpoints || theme2.breakpoints,\n sizes: override.sizes || theme2.sizes,\n radii: override.radii || theme2.radii,\n shadows: override.shadows || theme2.shadows,\n zIndices: override.zIndices || theme2.zIndices,\n colors: {\n ...theme2.colors,\n ...override.colors || {}\n },\n buttons: { ...theme2.buttons, ...override.buttons || {} },\n text: { ...theme2.text, ...override.text || {} },\n cards: { ...theme2.cards, ...override.cards || {} }\n }), baseTheme);\n};\n// src/ThemeShowcase.tsx\nimport React2 from \"react\";\nvar ThemeShowcase = ({\n theme: theme2,\n title,\n showValues = true,\n sections = [\"colors\", \"typography\", \"spacing\", \"shadows\", \"radii\"]\n}) => {\n const containerStyle = {\n fontFamily: theme2.fonts.body,\n color: theme2.colors.text,\n backgroundColor: theme2.colors.background,\n padding: theme2.space[4],\n minHeight: \"100vh\"\n };\n const sectionStyle = {\n marginBottom: theme2.space[5],\n padding: theme2.space[4],\n backgroundColor: theme2.colors.surface || theme2.colors.backgroundSecondary,\n borderRadius: theme2.radii[2],\n border: `1px solid ${theme2.colors.border}`\n };\n const headingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[5],\n fontWeight: theme2.fontWeights.heading,\n marginBottom: theme2.space[3],\n color: theme2.colors.primary\n };\n const subheadingStyle = {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[3],\n fontWeight: theme2.fontWeights.medium,\n marginBottom: theme2.space[2],\n marginTop: theme2.space[3],\n color: theme2.colors.text\n };\n return /* @__PURE__ */ React2.createElement(\"div\", {\n style: containerStyle\n }, title && /* @__PURE__ */ React2.createElement(\"h1\", {\n style: {\n ...headingStyle,\n fontSize: theme2.fontSizes[6],\n marginBottom: theme2.space[4]\n }\n }, title), sections.includes(\"colors\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Colors\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Primary Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"text\", \"background\", \"primary\", \"secondary\", \"accent\", \"muted\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Status Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3],\n marginBottom: theme2.space[3]\n }\n }, [\"success\", \"warning\", \"error\", \"info\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n padding: theme2.space[2],\n backgroundColor: theme2.colors.backgroundLight || theme2.colors.backgroundTertiary,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 40,\n height: 40,\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1],\n marginRight: theme2.space[2]\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", null, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, color)));\n })), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Background Colors\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(200px, 1fr))\",\n gap: theme2.space[3]\n }\n }, [\"backgroundSecondary\", \"backgroundTertiary\", \"backgroundLight\", \"backgroundHover\", \"surface\"].map((key) => {\n const color = theme2.colors[key];\n if (!color)\n return null;\n return /* @__PURE__ */ React2.createElement(\"div\", {\n key,\n style: {\n padding: theme2.space[3],\n backgroundColor: color,\n border: `1px solid ${theme2.colors.border}`,\n borderRadius: theme2.radii[1]\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n fontWeight: theme2.fontWeights.medium\n }\n }, key), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary,\n marginTop: theme2.space[1]\n }\n }, color));\n }))), sections.includes(\"typography\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Typography\"), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Families\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.heading,\n fontSize: theme2.fontSizes[4],\n marginBottom: theme2.space[2]\n }\n }, \"Heading Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.heading)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[2],\n marginBottom: theme2.space[2]\n }\n }, \"Body Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.body)), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[2]\n }\n }, \"Monospace Font: \", showValues && /* @__PURE__ */ React2.createElement(\"span\", {\n style: {\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \" \", theme2.fonts.monospace))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Sizes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { marginBottom: theme2.space[4] }\n }, theme2.fontSizes.map((size, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: {\n fontSize: size,\n lineHeight: theme2.lineHeights.body,\n marginBottom: theme2.space[1]\n }\n }, \"Size \", index, \": Sample Text \", showValues && `(${size}px)`))), /* @__PURE__ */ React2.createElement(\"h3\", {\n style: subheadingStyle\n }, \"Font Weights\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(150px, 1fr))\",\n gap: theme2.space[2]\n }\n }, Object.entries(theme2.fontWeights).map(([name, weight]) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: name,\n style: {\n fontWeight: weight,\n fontSize: theme2.fontSizes[2]\n }\n }, name, \" \", showValues && `(${weight})`)))), sections.includes(\"spacing\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Spacing\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: { display: \"flex\", flexDirection: \"column\", gap: theme2.space[2] }\n }, theme2.space.map((space, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { display: \"flex\", alignItems: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 60,\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"]\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n height: 24,\n width: space,\n backgroundColor: theme2.colors.primary,\n borderRadius: theme2.radii[1]\n }\n }), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n marginLeft: theme2.space[2],\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[1],\n color: theme2.colors.textSecondary\n }\n }, space, \"px\"))))), sections.includes(\"radii\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Border Radii\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(100px, 1fr))\",\n gap: theme2.space[3]\n }\n }, theme2.radii.map((radius, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 80,\n height: 80,\n backgroundColor: theme2.colors.primary,\n borderRadius: radius,\n marginBottom: theme2.space[1],\n margin: \"0 auto\"\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"[\", index, \"] \", showValues && `${radius}px`))))), sections.includes(\"shadows\") && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Shadows\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fill, minmax(150px, 1fr))\",\n gap: theme2.space[4]\n }\n }, theme2.shadows.map((shadow, index) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: index,\n style: { textAlign: \"center\" }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n width: 100,\n height: 100,\n backgroundColor: theme2.colors.background,\n boxShadow: shadow,\n borderRadius: theme2.radii[2],\n margin: \"0 auto\",\n marginBottom: theme2.space[2],\n border: `1px solid ${theme2.colors.border}`\n }\n }), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textSecondary\n }\n }, \"Shadow [\", index, \"]\"), showValues && /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n fontFamily: theme2.fonts.monospace,\n fontSize: theme2.fontSizes[0],\n color: theme2.colors.textMuted,\n marginTop: theme2.space[1]\n }\n }, shadow === \"none\" ? \"none\" : \"...\"))))), theme2.modes && Object.keys(theme2.modes).length > 0 && /* @__PURE__ */ React2.createElement(\"div\", {\n style: sectionStyle\n }, /* @__PURE__ */ React2.createElement(\"h2\", {\n style: headingStyle\n }, \"Available Modes\"), /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n display: \"flex\",\n gap: theme2.space[2],\n flexWrap: \"wrap\"\n }\n }, /* @__PURE__ */ React2.createElement(\"div\", {\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.primary,\n color: \"#ffffff\",\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, \"default\"), Object.keys(theme2.modes).map((modeName) => /* @__PURE__ */ React2.createElement(\"div\", {\n key: modeName,\n style: {\n padding: `${theme2.space[2]}px ${theme2.space[3]}px`,\n backgroundColor: theme2.colors.secondary,\n color: theme2.colors.text,\n borderRadius: theme2.radii[2],\n fontFamily: theme2.fonts.body,\n fontSize: theme2.fontSizes[1]\n }\n }, modeName)))));\n};\n\n// src/index.ts\nvar theme = terminalTheme;\nfunction scaleThemeFonts(theme2, scale) {\n const currentScale = theme2.fontScale || 1;\n const effectiveScale = scale / currentScale;\n return {\n ...theme2,\n fontSizes: theme2.fontSizes.map((size) => Math.round(size * effectiveScale)),\n fontScale: scale\n };\n}\nfunction increaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.min(currentScale * 1.1, 2);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction decreaseFontScale(theme2) {\n const currentScale = theme2.fontScale || 1;\n const newScale = Math.max(currentScale * 0.9, 0.5);\n return scaleThemeFonts(theme2, newScale);\n}\nfunction resetFontScale(theme2) {\n return scaleThemeFonts(theme2, 1);\n}\nvar src_default = theme;\nexport {\n withTheme,\n useTheme,\n theme,\n terminalTheme,\n sx,\n slateTheme,\n scaleThemeFonts,\n responsive,\n resetFontScale,\n regalTheme,\n overrideColors,\n mergeThemes,\n matrixTheme,\n matrixMinimalTheme,\n makeTheme,\n landingPageTheme,\n landingPageLightTheme,\n increaseFontScale,\n glassmorphismTheme,\n getZIndex,\n getSpace,\n getShadow,\n getRadius,\n getMode,\n getFontSize,\n getColor,\n defaultTerminalTheme,\n defaultMarkdownTheme,\n defaultEditorTheme,\n src_default as default,\n decreaseFontScale,\n createStyle,\n addMode,\n ThemeShowcase,\n ThemeProvider\n};\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 16-4 4-4-4\", key: \"f6ql7i\" }],\n [\"path\", { d: \"M17 20V4\", key: \"1ejh1v\" }],\n [\"path\", { d: \"m3 8 4-4 4 4\", key: \"11wl7u\" }],\n [\"path\", { d: \"M7 4v16\", key: \"1glfcx\" }]\n];\nconst ArrowUpDown = createLucideIcon(\"arrow-up-down\", __iconNode);\n\nexport { __iconNode, ArrowUpDown as default };\n//# sourceMappingURL=arrow-up-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n [\n \"path\",\n {\n d: \"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\n key: \"ruj8y\"\n }\n ]\n];\nconst BookOpen = createLucideIcon(\"book-open\", __iconNode);\n\nexport { __iconNode, BookOpen as default };\n//# sourceMappingURL=book-open.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 12h4\", key: \"a56b0p\" }],\n [\"path\", { d: \"M10 8h4\", key: \"1sr2af\" }],\n [\"path\", { d: \"M14 21v-3a2 2 0 0 0-4 0v3\", key: \"1rgiei\" }],\n [\n \"path\",\n {\n d: \"M6 10H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-2\",\n key: \"secmi2\"\n }\n ],\n [\"path\", { d: \"M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16\", key: \"16ra0t\" }]\n];\nconst Building2 = createLucideIcon(\"building-2\", __iconNode);\n\nexport { __iconNode, Building2 as default };\n//# sourceMappingURL=building-2.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nconst ChevronRight = createLucideIcon(\"chevron-right\", __iconNode);\n\nexport { __iconNode, ChevronRight as default };\n//# sourceMappingURL=chevron-right.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2\",\n key: \"usdka0\"\n }\n ]\n];\nconst FolderOpen = createLucideIcon(\"folder-open\", __iconNode);\n\nexport { __iconNode, FolderOpen as default };\n//# sourceMappingURL=folder-open.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst Folder = createLucideIcon(\"folder\", __iconNode);\n\nexport { __iconNode, Folder as default };\n//# sourceMappingURL=folder.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\",\n key: \"sc7q7i\"\n }\n ]\n];\nconst Funnel = createLucideIcon(\"funnel\", __iconNode);\n\nexport { __iconNode, Funnel as default };\n//# sourceMappingURL=funnel.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"18\", r: \"3\", key: \"1mpf1b\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"path\", { d: \"M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9\", key: \"1uq4wg\" }],\n [\"path\", { d: \"M12 12v3\", key: \"158kv8\" }]\n];\nconst GitFork = createLucideIcon(\"git-fork\", __iconNode);\n\nexport { __iconNode, GitFork as default };\n//# sourceMappingURL=git-fork.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\",\n key: \"tonef\"\n }\n ],\n [\"path\", { d: \"M9 18c-4.51 2-5-2-7-2\", key: \"9comsn\" }]\n];\nconst Github = createLucideIcon(\"github\", __iconNode);\n\nexport { __iconNode, Github as default };\n//# sourceMappingURL=github.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M12 7v5l4 2\", key: \"1fdv2h\" }]\n];\nconst History = createLucideIcon(\"history\", __iconNode);\n\nexport { __iconNode, History as default };\n//# sourceMappingURL=history.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"11\", x: \"3\", y: \"11\", rx: \"2\", ry: \"2\", key: \"1w4ew1\" }],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n];\nconst Lock = createLucideIcon(\"lock\", __iconNode);\n\nexport { __iconNode, Lock as default };\n//# sourceMappingURL=lock.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m10 17 5-5-5-5\", key: \"1bsop3\" }],\n [\"path\", { d: \"M15 12H3\", key: \"6jk70r\" }],\n [\"path\", { d: \"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\", key: \"u53s6r\" }]\n];\nconst LogIn = createLucideIcon(\"log-in\", __iconNode);\n\nexport { __iconNode, LogIn as default };\n//# sourceMappingURL=log-in.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\",\n key: \"18887p\"\n }\n ]\n];\nconst MessageSquare = createLucideIcon(\"message-square\", __iconNode);\n\nexport { __iconNode, MessageSquare as default };\n//# sourceMappingURL=message-square.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { x: \"16\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"4q2zg0\" }],\n [\"rect\", { x: \"2\", y: \"16\", width: \"6\", height: \"6\", rx: \"1\", key: \"8cvhb9\" }],\n [\"rect\", { x: \"9\", y: \"2\", width: \"6\", height: \"6\", rx: \"1\", key: \"1egb70\" }],\n [\"path\", { d: \"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3\", key: \"1jsf9p\" }],\n [\"path\", { d: \"M12 12V8\", key: \"2874zd\" }]\n];\nconst Network = createLucideIcon(\"network\", __iconNode);\n\nexport { __iconNode, Network as default };\n//# sourceMappingURL=network.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\"path\", { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n];\nconst RefreshCw = createLucideIcon(\"refresh-cw\", __iconNode);\n\nexport { __iconNode, RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"7g6ntu\" }],\n [\"path\", { d: \"m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z\", key: \"ijws7r\" }],\n [\"path\", { d: \"M7 21h10\", key: \"1b0cd5\" }],\n [\"path\", { d: \"M12 3v18\", key: \"108xh3\" }],\n [\"path\", { d: \"M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2\", key: \"3gwbw2\" }]\n];\nconst Scale = createLucideIcon(\"scale\", __iconNode);\n\nexport { __iconNode, Scale as default };\n//# sourceMappingURL=scale.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"m21 21-4.34-4.34\", key: \"14j7rj\" }],\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }]\n];\nconst Search = createLucideIcon(\"search\", __iconNode);\n\nexport { __iconNode, Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\",\n key: \"1s2grr\"\n }\n ],\n [\"path\", { d: \"M20 2v4\", key: \"1rf3ol\" }],\n [\"path\", { d: \"M22 4h-4\", key: \"gwowj6\" }],\n [\"circle\", { cx: \"4\", cy: \"20\", r: \"2\", key: \"6kqj1y\" }]\n];\nconst Sparkles = createLucideIcon(\"sparkles\", __iconNode);\n\nexport { __iconNode, Sparkles as default };\n//# sourceMappingURL=sparkles.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z\",\n key: \"r04s7s\"\n }\n ]\n];\nconst Star = createLucideIcon(\"star\", __iconNode);\n\nexport { __iconNode, Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\",\n key: \"vktsd0\"\n }\n ],\n [\"circle\", { cx: \"7.5\", cy: \"7.5\", r: \".5\", fill: \"currentColor\", key: \"kqv944\" }]\n];\nconst Tag = createLucideIcon(\"tag\", __iconNode);\n\nexport { __iconNode, Tag as default };\n//# sourceMappingURL=tag.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nconst Trash2 = createLucideIcon(\"trash-2\", __iconNode);\n\nexport { __iconNode, Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n];\nconst User = createLucideIcon(\"user\", __iconNode);\n\nexport { __iconNode, User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import React, { useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n ExternalLink,\n Star,\n GitFork,\n Lock,\n Scale,\n} from 'lucide-react';\n\nimport type { GitHubRepository } from '../types/github';\n\nexport interface GitHubProjectCardProps {\n /** The repository data to display */\n repository: GitHubRepository;\n /** Whether this card is currently selected/highlighted */\n isSelected?: boolean;\n /** Callback when card is clicked (selects the repository) */\n onSelect?: (repository: GitHubRepository) => void;\n /** Callback when \"Open in GitHub\" is clicked */\n onOpenInGitHub?: (repository: GitHubRepository) => void;\n}\n\n/**\n * Get color for programming language\n */\nfunction getLanguageColor(language: string): string {\n const colors: Record<string, string> = {\n TypeScript: '#3178c6',\n JavaScript: '#f7df1e',\n Python: '#3776ab',\n Java: '#b07219',\n Go: '#00add8',\n Rust: '#dea584',\n Ruby: '#cc342d',\n PHP: '#777bb4',\n 'C++': '#00599c',\n C: '#555555',\n 'C#': '#239120',\n Swift: '#fa7343',\n Kotlin: '#7f52ff',\n Dart: '#0175c2',\n Vue: '#4fc08d',\n HTML: '#e34c26',\n CSS: '#1572b6',\n Shell: '#89e051',\n PowerShell: '#012456',\n };\n\n return colors[language] || '#6e7681';\n}\n\n/**\n * Format large numbers (e.g., 1234 -> 1.2k)\n */\nfunction formatCount(count: number): string {\n if (count >= 1000000) {\n return `${(count / 1000000).toFixed(1)}m`;\n }\n if (count >= 1000) {\n return `${(count / 1000).toFixed(1)}k`;\n }\n return count.toString();\n}\n\n/**\n * GitHubProjectCard - Displays a GitHub repository card\n *\n * Features:\n * - Repository name with owner avatar\n * - Language indicator with color coding\n * - Star and fork counts\n * - Private/fork indicators\n * - GitHub link button\n */\nexport const GitHubProjectCard: React.FC<GitHubProjectCardProps> = ({\n repository,\n isSelected = false,\n onSelect,\n onOpenInGitHub,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n const highlightColor = theme.colors.primary;\n\n const handleCardClick = () => {\n onSelect?.(repository);\n };\n\n const handleOpenInGitHub = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onOpenInGitHub) {\n onOpenInGitHub(repository);\n } else {\n window.open(repository.html_url, '_blank');\n }\n };\n\n const starCount = repository.stargazers_count ?? 0;\n const forkCount = repository.forks_count ?? 0;\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '10px 12px',\n borderRadius: '6px',\n backgroundColor: isSelected\n ? `${highlightColor}15`\n : isHovered\n ? theme.colors.backgroundTertiary || theme.colors.backgroundSecondary\n : 'transparent',\n border: isSelected\n ? `1px solid ${highlightColor}40`\n : '1px solid transparent',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n onClick={handleCardClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Owner avatar */}\n {repository.owner.avatar_url ? (\n <img\n src={repository.owner.avatar_url}\n alt={repository.owner.login}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n flexShrink: 0,\n }}\n />\n ) : (\n <div\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n flexShrink: 0,\n backgroundColor: theme.colors.backgroundTertiary || theme.colors.backgroundSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n }}\n >\n {repository.owner.login[0]?.toUpperCase() || '?'}\n </div>\n )}\n\n {/* Main content */}\n <div\n style={{\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n }}\n >\n {/* Repository name row */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {repository.name}\n </span>\n {repository.private && (\n <Lock size={12} color={theme.colors.warning || '#f59e0b'} />\n )}\n {repository.fork && (\n <GitFork size={12} color={theme.colors.textSecondary} />\n )}\n </div>\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n flexWrap: 'wrap',\n }}\n >\n {/* Language */}\n {repository.language && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n display: 'inline-block',\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: getLanguageColor(repository.language),\n }}\n />\n <span>{repository.language}</span>\n </div>\n )}\n\n {/* Stars */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={12} />\n <span>{formatCount(starCount)}</span>\n </div>\n\n {/* Forks */}\n {forkCount > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={12} />\n <span>{formatCount(forkCount)}</span>\n </div>\n )}\n\n {/* License */}\n {repository.license && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Scale size={12} />\n <span>{repository.license}</span>\n </div>\n )}\n </div>\n\n {/* Description */}\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {repository.description}\n </div>\n )}\n </div>\n\n {/* GitHub link button */}\n <button\n type=\"button\"\n onClick={handleOpenInGitHub}\n title=\"View on GitHub\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundTertiary || theme.colors.backgroundSecondary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.background;\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <ExternalLink size={14} />\n </button>\n </div>\n );\n};\n","import React, { useState, useMemo, useEffect, useRef, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Github,\n Search,\n ChevronDown,\n ChevronRight,\n Folder,\n Star,\n LogIn,\n Building2,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type {\n GitHubRepositoriesSliceData,\n GitHubRepository,\n RepositoryPreviewEventPayload,\n} from '../types/github';\nimport { GitHubProjectCard } from '../components/GitHubProjectCard';\n\n/** Layout mode based on available width */\ntype LayoutMode = 'compact' | 'expanded';\n\n/** Breakpoint for switching layouts (in pixels) */\nconst EXPANDED_BREAKPOINT = 600;\n\n/**\n * Section component for collapsible repository groups\n */\ninterface SectionProps {\n id: string;\n title: string;\n icon: React.ReactNode;\n count: number;\n isExpanded: boolean;\n onToggle: () => void;\n children: React.ReactNode;\n layoutMode: LayoutMode;\n}\n\nconst Section: React.FC<SectionProps> = ({\n title,\n icon,\n count,\n isExpanded,\n onToggle,\n children,\n layoutMode,\n}) => {\n const { theme } = useTheme();\n\n // In expanded mode, sections are columns - always show content (no collapse)\n // In compact mode, sections are collapsible\n const showContent = layoutMode === 'expanded' || isExpanded;\n\n return (\n <div\n style={{\n marginBottom: layoutMode === 'compact' ? '8px' : '0',\n flex: layoutMode === 'expanded' ? '1 1 0' : undefined,\n minWidth: layoutMode === 'expanded' ? '280px' : undefined,\n display: 'flex',\n flexDirection: 'column',\n borderRight: layoutMode === 'expanded' ? `1px solid ${theme.colors.border}` : undefined,\n overflow: 'hidden',\n }}\n >\n <button\n type=\"button\"\n onClick={layoutMode === 'compact' ? onToggle : undefined}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n border: 'none',\n background: 'none',\n cursor: layoutMode === 'compact' ? 'pointer' : 'default',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n borderBottom: layoutMode === 'expanded' ? `1px solid ${theme.colors.border}` : undefined,\n }}\n >\n {layoutMode === 'compact' && (isExpanded ? <ChevronDown size={16} /> : <ChevronRight size={16} />)}\n {icon}\n <span>{title}</span>\n <span\n style={{\n marginLeft: 'auto',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundTertiary || theme.colors.backgroundSecondary,\n padding: '2px 8px',\n borderRadius: '10px',\n }}\n >\n {count}\n </span>\n </button>\n {showContent && (\n <div\n style={{\n padding: '4px',\n display: 'flex',\n flexDirection: 'column',\n gap: '0',\n flex: layoutMode === 'expanded' ? 1 : undefined,\n overflowY: layoutMode === 'expanded' ? 'auto' : undefined,\n }}\n >\n {children}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * GitHubProjectsPanelContent - Internal component that uses theme\n */\nconst GitHubProjectsPanelContent: React.FC<PanelComponentProps> = ({\n context,\n events,\n}) => {\n const { theme } = useTheme();\n const containerRef = useRef<HTMLDivElement>(null);\n const [layoutMode, setLayoutMode] = useState<LayoutMode>('compact');\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedRepoId, setSelectedRepoId] = useState<number | null>(null);\n const [expandedSections, setExpandedSections] = useState<Set<string>>(\n new Set(['owned', 'starred'])\n );\n\n // Get GitHub repositories slice\n const githubSlice = context.getSlice<GitHubRepositoriesSliceData>('github-repositories');\n const isLoading = context.isSliceLoading('github-repositories');\n const hasData = context.hasSlice('github-repositories');\n\n const data = githubSlice?.data;\n\n // Observe container width for responsive layout\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const width = entry.contentRect.width;\n setLayoutMode(width >= EXPANDED_BREAKPOINT ? 'expanded' : 'compact');\n }\n });\n\n observer.observe(container);\n return () => observer.disconnect();\n }, []);\n\n // Filter repositories by search query\n const filterRepos = useCallback((repos: GitHubRepository[]) => {\n if (!searchQuery) return repos;\n const query = searchQuery.toLowerCase();\n return repos.filter(\n (repo) =>\n repo.name.toLowerCase().includes(query) ||\n repo.full_name.toLowerCase().includes(query) ||\n repo.description?.toLowerCase().includes(query) ||\n repo.language?.toLowerCase().includes(query)\n );\n }, [searchQuery]);\n\n const filteredOwned = useMemo(() => filterRepos(data?.owned || []), [data?.owned, filterRepos]);\n const filteredStarred = useMemo(() => filterRepos(data?.starred || []), [data?.starred, filterRepos]);\n const filteredOrgs = useMemo(() => {\n if (!data?.organizations) return [];\n return data.organizations.map((org) => ({\n ...org,\n repositories: filterRepos(org.repositories),\n })).filter((org) => org.repositories.length > 0 || !searchQuery);\n }, [data?.organizations, filterRepos, searchQuery]);\n\n // Toggle section expansion\n const toggleSection = (section: string) => {\n setExpandedSections((prev) => {\n const next = new Set(prev);\n if (next.has(section)) {\n next.delete(section);\n } else {\n next.add(section);\n }\n return next;\n });\n };\n\n // Handle repository preview (click to show README)\n const handleSelectRepository = (repo: GitHubRepository) => {\n setSelectedRepoId(repo.id);\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'github-projects-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'click',\n },\n });\n };\n\n // Render empty state for a section\n const renderEmptyState = (message: string) => (\n <div\n style={{\n padding: '16px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n gridColumn: layoutMode === 'expanded' ? '1 / -1' : undefined,\n }}\n >\n {message}\n </div>\n );\n\n // Render repository cards\n const renderCards = (repos: GitHubRepository[]) =>\n repos.map((repo) => (\n <GitHubProjectCard\n key={repo.id}\n repository={repo}\n isSelected={selectedRepoId === repo.id}\n onSelect={handleSelectRepository}\n />\n ));\n\n // Not authenticated state\n if (hasData && data && !data.isAuthenticated) {\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n padding: '24px',\n color: theme.colors.textSecondary,\n }}\n >\n <LogIn size={48} color={theme.colors.textSecondary} />\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n color: theme.colors.text,\n }}\n >\n Sign in to GitHub\n </h3>\n <p style={{ margin: 0, textAlign: 'center' }}>\n Connect your GitHub account to see your repositories\n </p>\n <button\n type=\"button\"\n onClick={() => {\n events.emit({\n type: 'github:login-requested',\n source: 'github-projects-panel',\n timestamp: Date.now(),\n payload: {},\n });\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 20px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: 'pointer',\n }}\n >\n <Github size={18} />\n Sign in with GitHub\n </button>\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Loading repositories...\n </div>\n );\n }\n\n // No data state - show sign in prompt\n if (!hasData || !data) {\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n padding: '24px',\n color: theme.colors.textSecondary,\n }}\n >\n <LogIn size={48} color={theme.colors.textSecondary} />\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n color: theme.colors.text,\n }}\n >\n Sign in to GitHub\n </h3>\n <p style={{ margin: 0, textAlign: 'center' }}>\n Connect your GitHub account to browse your repositories\n </p>\n <button\n type=\"button\"\n onClick={() => {\n events.emit({\n type: 'github:login-requested',\n source: 'github-projects-panel',\n timestamp: Date.now(),\n payload: {},\n });\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 20px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: 'pointer',\n }}\n >\n <Github size={18} />\n Sign in with GitHub\n </button>\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n flexWrap: 'wrap',\n }}\n >\n <Github size={20} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n GitHub Projects\n </h2>\n {data.username && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n @{data.username}\n </span>\n )}\n </div>\n\n {/* Search */}\n <div style={{ padding: '12px 16px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '6px',\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <Search size={16} color={theme.colors.textSecondary} />\n <input\n type=\"text\"\n placeholder=\"Search repositories...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={{\n flex: 1,\n border: 'none',\n background: 'none',\n outline: 'none',\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.text,\n }}\n />\n </div>\n </div>\n\n {/* Repository sections */}\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: layoutMode === 'expanded' ? 'row' : 'column',\n overflowY: layoutMode === 'compact' ? 'auto' : undefined,\n overflowX: layoutMode === 'expanded' ? 'auto' : undefined,\n }}\n >\n {/* Personal repositories */}\n <Section\n id=\"owned\"\n title=\"Your Repositories\"\n icon={<Folder size={16} color={theme.colors.primary} />}\n count={filteredOwned.length}\n isExpanded={expandedSections.has('owned')}\n onToggle={() => toggleSection('owned')}\n layoutMode={layoutMode}\n >\n {filteredOwned.length === 0\n ? renderEmptyState(searchQuery ? 'No repositories match your search' : 'No repositories found')\n : renderCards(filteredOwned)}\n </Section>\n\n {/* Organization repositories */}\n {filteredOrgs.map((org) => (\n <Section\n key={org.id}\n id={`org-${org.id}`}\n title={org.login}\n icon={\n org.avatar_url ? (\n <img\n src={org.avatar_url}\n alt={org.login}\n style={{ width: 16, height: 16, borderRadius: 4 }}\n />\n ) : (\n <Building2 size={16} color={theme.colors.info || '#3b82f6'} />\n )\n }\n count={org.repositories.length}\n isExpanded={expandedSections.has(`org-${org.id}`)}\n onToggle={() => toggleSection(`org-${org.id}`)}\n layoutMode={layoutMode}\n >\n {org.repositories.length === 0\n ? renderEmptyState(searchQuery ? 'No repositories match your search' : 'No repositories')\n : renderCards(org.repositories)}\n </Section>\n ))}\n\n {/* Starred repositories */}\n <Section\n id=\"starred\"\n title=\"Starred\"\n icon={<Star size={16} color={theme.colors.warning || '#f59e0b'} />}\n count={filteredStarred.length}\n isExpanded={expandedSections.has('starred')}\n onToggle={() => toggleSection('starred')}\n layoutMode={layoutMode}\n >\n {filteredStarred.length === 0\n ? renderEmptyState(searchQuery ? 'No repositories match your search' : 'No starred repositories')\n : renderCards(filteredStarred)}\n </Section>\n </div>\n </div>\n );\n};\n\n/**\n * GitHubProjectsPanel - A panel for browsing GitHub repositories\n *\n * Features:\n * - Lists personal, organization, and starred repositories\n * - Responsive layout: compact (dropdown) for narrow, columns for wide\n * - Search/filter functionality\n * - Emits repository:selected events when a repo is clicked\n *\n * Required data slice: 'github-repositories' (GitHubRepositoriesSliceData)\n */\nexport const GitHubProjectsPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubProjectsPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const GitHubProjectsPanelMetadata = {\n id: 'github-projects',\n name: 'GitHub Projects',\n description: 'Browse and manage your GitHub repositories',\n icon: 'github',\n version: '0.1.0',\n slices: ['github-repositories'],\n surfaces: ['sidebar', 'panel'],\n};\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Search, Github, Star, GitFork, ExternalLink } from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type { GitHubRepository, RepositoryPreviewEventPayload } from '../types/github';\n\n/** Search result from GitHub API */\ninterface GitHubSearchResult {\n total_count: number;\n incomplete_results: boolean;\n items: GitHubRepository[];\n}\n\n/**\n * GitHubSearchPanelContent - Internal component that uses theme\n */\nconst GitHubSearchPanelContent: React.FC<PanelComponentProps> = ({ events }) => {\n const { theme } = useTheme();\n const [searchQuery, setSearchQuery] = useState('');\n const [results, setResults] = useState<GitHubRepository[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedRepoId, setSelectedRepoId] = useState<number | null>(null);\n const searchTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Focus input on mount\n useEffect(() => {\n inputRef.current?.focus();\n }, []);\n\n // Debounced search\n const performSearch = useCallback(async (query: string) => {\n if (!query.trim()) {\n setResults([]);\n setTotalCount(0);\n setError(null);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await fetch(\n `/api/github/search?q=${encodeURIComponent(query)}&per_page=30`\n );\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || 'Search failed');\n }\n\n const data: GitHubSearchResult = await response.json();\n setResults(data.items || []);\n setTotalCount(data.total_count || 0);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Search failed');\n setResults([]);\n setTotalCount(0);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n // Handle search input change with debounce\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const query = e.target.value;\n setSearchQuery(query);\n\n // Clear existing timeout\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n // Debounce search\n searchTimeoutRef.current = setTimeout(() => {\n performSearch(query);\n }, 300);\n };\n\n // Handle form submit (immediate search)\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n performSearch(searchQuery);\n };\n\n // Handle repository preview (click to show README)\n const handleSelectRepository = (repo: GitHubRepository) => {\n setSelectedRepoId(repo.id);\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'github-search-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'search',\n },\n });\n };\n\n // Format number with K/M suffix\n const formatNumber = (num: number): string => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n };\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <Github size={20} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n Search GitHub\n </h2>\n </div>\n\n {/* Search Input */}\n <form onSubmit={handleSubmit} style={{ padding: '12px 16px' }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 12px',\n borderRadius: '6px',\n backgroundColor: theme.colors.backgroundSecondary,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <Search size={18} color={theme.colors.textSecondary} />\n <input\n ref={inputRef}\n type=\"text\"\n placeholder=\"Search repositories on GitHub...\"\n value={searchQuery}\n onChange={handleSearchChange}\n style={{\n flex: 1,\n border: 'none',\n background: 'none',\n outline: 'none',\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.text,\n }}\n />\n {isLoading && (\n <div\n style={{\n width: 16,\n height: 16,\n border: `2px solid ${theme.colors.border}`,\n borderTopColor: theme.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n )}\n </div>\n </form>\n\n {/* Results Count */}\n {totalCount > 0 && !isLoading && (\n <div\n style={{\n padding: '0 16px 8px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {formatNumber(totalCount)} repositories found\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div\n style={{\n padding: '16px',\n margin: '0 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error}15`,\n color: theme.colors.error,\n fontSize: `${theme.fontSizes[2]}px`,\n }}\n >\n {error}\n </div>\n )}\n\n {/* Results List */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '0 8px 8px',\n }}\n >\n {results.length === 0 && !isLoading && searchQuery && !error && (\n <div\n style={{\n padding: '32px 16px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n No repositories found for \"{searchQuery}\"\n </div>\n )}\n\n {results.length === 0 && !searchQuery && (\n <div\n style={{\n padding: '32px 16px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Search size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0 }}>\n Search for repositories by name, description, or topic\n </p>\n </div>\n )}\n\n {results.map((repo) => (\n <button\n key={repo.id}\n type=\"button\"\n onClick={() => handleSelectRepository(repo)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '6px',\n border: selectedRepoId === repo.id\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: selectedRepoId === repo.id\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {/* Repo name and owner */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {repo.owner?.avatar_url && (\n <img\n src={repo.owner.avatar_url}\n alt={repo.owner.login}\n style={{ width: 20, height: 20, borderRadius: 4 }}\n />\n )}\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {repo.full_name}\n </span>\n {repo.private && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.textSecondary,\n }}\n >\n Private\n </span>\n )}\n </div>\n\n {/* Description */}\n {repo.description && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {repo.description}\n </p>\n )}\n\n {/* Stats */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {repo.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: theme.colors.info,\n }}\n />\n {repo.language}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={14} />\n {formatNumber(repo.stargazers_count || 0)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={14} />\n {formatNumber(repo.forks_count || 0)}\n </span>\n <a\n href={repo.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n ))}\n </div>\n\n {/* CSS for spinner animation */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\n/**\n * GitHubSearchPanel - A panel for searching GitHub repositories\n *\n * Features:\n * - Real-time search with debouncing\n * - Shows stars, forks, language\n * - Emits repository:selected events when a repo is clicked\n */\nexport const GitHubSearchPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubSearchPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const GitHubSearchPanelMetadata = {\n id: 'github-search',\n name: 'GitHub Search',\n description: 'Search for repositories on GitHub',\n icon: 'search',\n version: '0.1.0',\n slices: [],\n surfaces: ['panel'],\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Github,\n AlertCircle,\n Copy,\n CheckCircle2,\n ExternalLink,\n Tag,\n Calendar,\n MessageSquare,\n Loader2,\n X,\n RefreshCw,\n LogIn,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type {\n GitHubIssue,\n GitHubIssuesSliceData,\n IssueSelectedEventPayload,\n} from '../types/github';\n\ntype IssueFilter = 'all' | 'open' | 'closed';\n\n/**\n * Format a date string to a relative time description\n */\nconst formatDate = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n return `${Math.floor(diffDays / 365)} years ago`;\n};\n\n/**\n * GitHubIssuesPanelContent - Internal component that uses theme\n */\nconst GitHubIssuesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n events,\n}) => {\n const { theme } = useTheme();\n\n // Get issues from data slice\n const issuesSlice = context.getSlice<GitHubIssuesSliceData>('github-issues');\n const isLoading = context.isSliceLoading('github-issues');\n const hasData = context.hasSlice('github-issues');\n\n const issues = issuesSlice?.data?.issues ?? [];\n const owner = issuesSlice?.data?.owner ?? '';\n const repo = issuesSlice?.data?.repo ?? '';\n const isAuthenticated = issuesSlice?.data?.isAuthenticated ?? false;\n const sliceError = issuesSlice?.data?.error;\n\n // Local state\n const [selectedIssues, setSelectedIssues] = useState<Set<number>>(new Set());\n const [copiedPrompt, setCopiedPrompt] = useState(false);\n const [issueFilter, setIssueFilter] = useState<IssueFilter>('open');\n const [selectedIssue, setSelectedIssue] = useState<GitHubIssue | null>(null);\n const [showIssueModal, setShowIssueModal] = useState(false);\n\n // Request issues data on mount\n useEffect(() => {\n events.emit({\n type: 'github-issues:request',\n source: 'github-issues-panel',\n timestamp: Date.now(),\n payload: {},\n });\n }, [events]);\n\n // Filter issues based on selected filter\n const filteredIssues = useMemo(() => {\n if (issueFilter === 'all') return issues;\n return issues.filter((issue) => issue.state === issueFilter);\n }, [issues, issueFilter]);\n\n // Issue counts for filter buttons\n const issueCounts = useMemo(() => ({\n all: issues.length,\n open: issues.filter((i) => i.state === 'open').length,\n closed: issues.filter((i) => i.state === 'closed').length,\n }), [issues]);\n\n const handleSelectAll = () => {\n if (selectedIssues.size === filteredIssues.length) {\n setSelectedIssues(new Set());\n } else {\n setSelectedIssues(new Set(filteredIssues.map((i) => i.number)));\n }\n };\n\n const handleToggleIssue = (issueNumber: number, event?: React.MouseEvent) => {\n if (event) {\n event.stopPropagation();\n }\n const newSelected = new Set(selectedIssues);\n if (newSelected.has(issueNumber)) {\n newSelected.delete(issueNumber);\n } else {\n newSelected.add(issueNumber);\n }\n setSelectedIssues(newSelected);\n };\n\n const handleIssueClick = (issue: GitHubIssue, event: React.MouseEvent) => {\n const target = event.target as HTMLElement;\n if (target.tagName === 'INPUT' || target.closest('a')) {\n return;\n }\n setSelectedIssue(issue);\n setShowIssueModal(true);\n\n // Emit issue selected event\n events.emit<IssueSelectedEventPayload>({\n type: 'issue:selected',\n source: 'github-issues-panel',\n timestamp: Date.now(),\n payload: {\n issue,\n owner,\n repo,\n },\n });\n };\n\n const handleRefresh = () => {\n events.emit({\n type: 'github-issues:refresh',\n source: 'github-issues-panel',\n timestamp: Date.now(),\n payload: {},\n });\n };\n\n const handleLogin = () => {\n events.emit({\n type: 'github:login-requested',\n source: 'github-issues-panel',\n timestamp: Date.now(),\n payload: {},\n });\n };\n\n const generatePrompt = (): string => {\n const selectedIssueData = issues.filter((i) =>\n selectedIssues.has(i.number)\n );\n\n if (selectedIssueData.length === 0) return '';\n\n let prompt = `I'm working on the GitHub repository ${owner}/${repo}. Here are the issues I need help with:\\n\\n`;\n\n selectedIssueData.forEach((issue) => {\n prompt += `## Issue #${issue.number}: ${issue.title}\\n`;\n prompt += `- Status: ${issue.state}\\n`;\n prompt += `- URL: ${issue.html_url}\\n`;\n\n if (issue.labels.length > 0) {\n prompt += `- Labels: ${issue.labels.map((l) => l.name).join(', ')}\\n`;\n }\n\n if (issue.body) {\n prompt += `- Description:\\n${issue.body}\\n`;\n }\n\n prompt += '\\n';\n });\n\n prompt += `Please help me understand and address these issues.`;\n\n return prompt;\n };\n\n const handleCopyPrompt = async () => {\n const prompt = generatePrompt();\n if (!prompt) return;\n\n try {\n await navigator.clipboard.writeText(prompt);\n setCopiedPrompt(true);\n setTimeout(() => setCopiedPrompt(false), 2000);\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n };\n\n // Render helper for state messages\n const renderState = (\n icon: React.ReactNode,\n title: string,\n description?: string,\n action?: React.ReactNode\n ) => (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n backgroundColor: theme.colors.background,\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n textAlign: 'center',\n }}\n >\n <div>{icon}</div>\n <div>\n <h3\n style={{\n margin: 0,\n marginBottom: '8px',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n {title}\n </h3>\n {description && (\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n lineHeight: 1.5,\n fontSize: `${theme.fontSizes[2]}px`,\n }}\n >\n {description}\n </p>\n )}\n </div>\n {action}\n </div>\n </div>\n );\n\n // Loading state\n if (isLoading && !hasData) {\n return renderState(\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />,\n 'Loading issues...',\n 'Fetching issues from GitHub'\n );\n }\n\n // Not authenticated state\n if (!isAuthenticated && !hasData) {\n return renderState(\n <AlertCircle\n size={32}\n style={{ color: theme.colors.warning || '#f59e0b' }}\n />,\n 'Sign in to GitHub',\n 'Connect your GitHub account to view repository issues.',\n <button\n type=\"button\"\n onClick={handleLogin}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 18px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontWeight: theme.fontWeights.semibold,\n fontSize: `${theme.fontSizes[2]}px`,\n cursor: 'pointer',\n }}\n >\n <LogIn size={16} />\n Sign in with GitHub\n </button>\n );\n }\n\n // Error state\n if (sliceError) {\n return renderState(\n <AlertCircle size={32} style={{ color: theme.colors.error }} />,\n 'Failed to Load Issues',\n sliceError,\n <button\n type=\"button\"\n onClick={handleRefresh}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 18px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontWeight: theme.fontWeights.medium,\n fontSize: `${theme.fontSizes[2]}px`,\n cursor: 'pointer',\n }}\n >\n <RefreshCw size={16} />\n Try Again\n </button>\n );\n }\n\n // No repository context\n if (!owner || !repo) {\n return renderState(\n <Github size={32} style={{ color: theme.colors.textSecondary }} />,\n 'No Repository Selected',\n 'Select a repository to view its issues.'\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n <Github size={20} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n flex: 1,\n }}\n >\n Issues\n </h2>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {owner}/{repo}\n </span>\n </div>\n\n {/* Toolbar */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n flexWrap: 'wrap',\n gap: '8px',\n }}\n >\n {/* Filter buttons */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div style={{ display: 'flex', gap: '4px' }}>\n {(['open', 'closed', 'all'] as const).map((filter) => (\n <button\n key={filter}\n type=\"button\"\n onClick={() => setIssueFilter(filter)}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border:\n issueFilter === filter\n ? 'none'\n : `1px solid ${theme.colors.border}`,\n backgroundColor:\n issueFilter === filter\n ? theme.colors.primary\n : theme.colors.background,\n color:\n issueFilter === filter\n ? theme.colors.background\n : theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight:\n issueFilter === filter\n ? theme.fontWeights.semibold\n : theme.fontWeights.body,\n cursor: 'pointer',\n textTransform: 'capitalize',\n }}\n >\n {filter === 'all' ? 'All' : filter === 'open' ? 'Open' : 'Closed'}\n <span style={{ marginLeft: '6px', opacity: 0.8 }}>\n ({issueCounts[filter]})\n </span>\n </button>\n ))}\n </div>\n\n {filteredIssues.length > 0 && (\n <button\n type=\"button\"\n onClick={handleSelectAll}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n }}\n >\n {selectedIssues.size === filteredIssues.length\n ? 'Deselect All'\n : 'Select All'}\n </button>\n )}\n </div>\n\n {/* Actions */}\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={isLoading}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n opacity: isLoading ? 0.5 : 1,\n }}\n >\n <RefreshCw size={14} className={isLoading ? 'animate-spin' : ''} />\n </button>\n\n <button\n type=\"button\"\n onClick={handleCopyPrompt}\n disabled={selectedIssues.size === 0}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor:\n selectedIssues.size > 0\n ? theme.colors.primary\n : theme.colors.backgroundTertiary,\n color:\n selectedIssues.size > 0\n ? theme.colors.background\n : theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n cursor: selectedIssues.size > 0 ? 'pointer' : 'not-allowed',\n opacity: selectedIssues.size > 0 ? 1 : 0.5,\n }}\n >\n {copiedPrompt ? <CheckCircle2 size={14} /> : <Copy size={14} />}\n {copiedPrompt ? 'Copied!' : `Copy Prompt (${selectedIssues.size})`}\n </button>\n </div>\n </div>\n\n {/* Issues List */}\n <div style={{ flex: 1, overflow: 'auto', padding: '8px' }}>\n {filteredIssues.length === 0 ? (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n gap: '16px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={48} color={theme.colors.border} />\n <div style={{ textAlign: 'center' }}>\n <h3\n style={{\n color: theme.colors.text,\n marginBottom: '8px',\n fontSize: `${theme.fontSizes[3]}px`,\n }}\n >\n No Issues Found\n </h3>\n <p style={{ margin: 0, fontSize: `${theme.fontSizes[2]}px` }}>\n There are no {issueFilter !== 'all' ? issueFilter : ''} issues\n in this repository.\n </p>\n </div>\n </div>\n ) : (\n <div\n style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}\n >\n {filteredIssues.map((issue) => (\n <button\n key={issue.id}\n type=\"button\"\n onClick={(e) => handleIssueClick(issue, e)}\n style={{\n width: '100%',\n padding: '12px',\n borderRadius: '6px',\n border: `1px solid ${\n selectedIssues.has(issue.number)\n ? theme.colors.primary\n : theme.colors.border\n }`,\n backgroundColor: selectedIssues.has(issue.number)\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n }}\n >\n <input\n type=\"checkbox\"\n checked={selectedIssues.has(issue.number)}\n onChange={() => handleToggleIssue(issue.number)}\n onClick={(e) => e.stopPropagation()}\n style={{ marginTop: '2px', cursor: 'pointer' }}\n />\n\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Issue header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '6px',\n flexWrap: 'wrap',\n }}\n >\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '12px',\n backgroundColor:\n issue.state === 'open' ? '#22c55e22' : '#6b728022',\n color:\n issue.state === 'open' ? '#22c55e' : '#6b7280',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.semibold,\n textTransform: 'uppercase',\n }}\n >\n {issue.state}\n </span>\n\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n #{issue.number}\n </span>\n\n <a\n href={issue.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n color: theme.colors.primary,\n textDecoration: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={12} />\n </a>\n </div>\n\n {/* Issue title */}\n <h4\n style={{\n margin: 0,\n marginBottom: '6px',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {issue.title}\n </h4>\n\n {/* Labels */}\n {issue.labels.length > 0 && (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n marginBottom: '6px',\n }}\n >\n {issue.labels.slice(0, 3).map((label) => (\n <span\n key={label.id}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 6px',\n borderRadius: '12px',\n backgroundColor: `#${label.color}22`,\n color: `#${label.color}`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n }}\n >\n <Tag size={10} />\n {label.name}\n </span>\n ))}\n {issue.labels.length > 3 && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n +{issue.labels.length - 3}\n </span>\n )}\n </div>\n )}\n\n {/* Metadata */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n flexWrap: 'wrap',\n }}\n >\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <img\n src={issue.user.avatar_url}\n alt={issue.user.login}\n style={{\n width: '14px',\n height: '14px',\n borderRadius: '50%',\n }}\n />\n {issue.user.login}\n </span>\n\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <Calendar size={12} />\n {formatDate(issue.created_at)}\n </span>\n\n {issue.comments > 0 && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <MessageSquare size={12} />\n {issue.comments}\n </span>\n )}\n </div>\n </div>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Issue Detail Modal */}\n {showIssueModal && selectedIssue && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 1000,\n }}\n onClick={() => {\n setShowIssueModal(false);\n setSelectedIssue(null);\n }}\n >\n <div\n style={{\n backgroundColor: theme.colors.background,\n borderRadius: '12px',\n width: '90%',\n maxWidth: '700px',\n maxHeight: '80vh',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1)',\n border: `1px solid ${theme.colors.border}`,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Modal Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n padding: '20px',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n <div style={{ flex: 1 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n marginBottom: '8px',\n }}\n >\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: '12px',\n backgroundColor:\n selectedIssue.state === 'open'\n ? '#22c55e22'\n : '#6b728022',\n color:\n selectedIssue.state === 'open' ? '#22c55e' : '#6b7280',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n textTransform: 'uppercase',\n }}\n >\n {selectedIssue.state}\n </span>\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[2]}px`,\n }}\n >\n #{selectedIssue.number}\n </span>\n </div>\n <h2\n style={{\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[4]}px`,\n fontWeight: theme.fontWeights.semibold,\n margin: 0,\n }}\n >\n {selectedIssue.title}\n </h2>\n </div>\n <button\n type=\"button\"\n onClick={() => {\n setShowIssueModal(false);\n setSelectedIssue(null);\n }}\n style={{\n background: 'none',\n border: 'none',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n padding: '8px',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Modal Body */}\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: '20px',\n }}\n >\n {/* Issue Metadata */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '20px',\n marginBottom: '20px',\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.textSecondary,\n flexWrap: 'wrap',\n }}\n >\n <span\n style={{ display: 'flex', alignItems: 'center', gap: '6px' }}\n >\n <img\n src={selectedIssue.user.avatar_url}\n alt={selectedIssue.user.login}\n style={{\n width: '20px',\n height: '20px',\n borderRadius: '50%',\n }}\n />\n <strong style={{ color: theme.colors.text }}>\n {selectedIssue.user.login}\n </strong>{' '}\n opened\n </span>\n <span\n style={{ display: 'flex', alignItems: 'center', gap: '4px' }}\n >\n <Calendar size={14} />\n {formatDate(selectedIssue.created_at)}\n </span>\n {selectedIssue.comments > 0 && (\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <MessageSquare size={14} />\n {selectedIssue.comments}{' '}\n {selectedIssue.comments === 1 ? 'comment' : 'comments'}\n </span>\n )}\n </div>\n\n {/* Labels */}\n {selectedIssue.labels.length > 0 && (\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n marginBottom: '20px',\n }}\n >\n {selectedIssue.labels.map((label) => (\n <span\n key={label.id}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 12px',\n borderRadius: '16px',\n backgroundColor: `#${label.color}22`,\n color: `#${label.color}`,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n }}\n >\n <Tag size={12} />\n {label.name}\n </span>\n ))}\n </div>\n )}\n\n {/* Issue Body */}\n {selectedIssue.body && (\n <div\n style={{\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: '8px',\n padding: '16px',\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <h3\n style={{\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n marginTop: 0,\n marginBottom: '12px',\n }}\n >\n Description\n </h3>\n <div\n style={{\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n lineHeight: 1.6,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }}\n >\n {selectedIssue.body}\n </div>\n </div>\n )}\n </div>\n\n {/* Modal Footer */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n padding: '16px 20px',\n borderTop: `1px solid ${theme.colors.border}`,\n gap: '12px',\n }}\n >\n <a\n href={selectedIssue.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n textDecoration: 'none',\n }}\n >\n <ExternalLink size={14} />\n View on GitHub\n </a>\n </div>\n </div>\n </div>\n )}\n\n {/* CSS for animations */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n .animate-spin {\n animation: spin 1s linear infinite;\n }\n `}</style>\n </div>\n );\n};\n\n/**\n * GitHubIssuesPanel - A panel for viewing GitHub repository issues\n *\n * Features:\n * - View issues with filtering (open/closed/all)\n * - Select issues and copy as AI prompt\n * - Issue detail modal\n * - External links to GitHub\n */\nexport const GitHubIssuesPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubIssuesPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const GitHubIssuesPanelMetadata = {\n id: 'github-issues',\n name: 'GitHub Issues',\n description: 'View and manage GitHub repository issues',\n icon: 'circle-dot',\n version: '0.1.0',\n slices: ['github-issues'],\n surfaces: ['panel'],\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Github,\n Star,\n GitFork,\n ExternalLink,\n Calendar,\n ArrowUpDown,\n Filter,\n Lock,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type { GitHubRepository, RepositoryPreviewEventPayload, OwnerRepositoriesSliceData } from '../types/github';\n\ntype SortField = 'updated' | 'stars' | 'name' | 'created';\ntype SortOrder = 'asc' | 'desc';\n\n/**\n * OwnerRepositoriesPanelContent - Internal component that uses theme\n */\nconst OwnerRepositoriesPanelContent: React.FC<PanelComponentProps & { owner?: string }> = ({\n events,\n context,\n owner: propOwner,\n}) => {\n const { theme } = useTheme();\n const [selectedRepoId, setSelectedRepoId] = useState<number | null>(null);\n const [sortField, setSortField] = useState<SortField>('updated');\n const [sortOrder, setSortOrder] = useState<SortOrder>('desc');\n const [languageFilter, setLanguageFilter] = useState<string | null>(null);\n\n // Get owner from prop or context\n const owner = propOwner || (context?.currentScope?.repository as { name?: string })?.name;\n\n // Get owner repositories slice\n const ownerSlice = context.getSlice<OwnerRepositoriesSliceData>('owner-repositories');\n const isLoading = context.isSliceLoading('owner-repositories');\n\n const ownerInfo = ownerSlice?.data?.owner ?? null;\n const repositories = ownerSlice?.data?.repositories ?? [];\n const error = ownerSlice?.data?.error ?? null;\n const isAuthenticated = ownerSlice?.data?.isAuthenticated ?? false;\n\n // Extract unique languages from repositories\n const languages = React.useMemo(() => {\n return [...new Set(\n repositories\n .map(r => r.language)\n .filter((lang): lang is string => lang !== null)\n )].sort();\n }, [repositories]);\n\n // Request data refresh\n const handleRefresh = useCallback(() => {\n events.emit({\n type: 'owner-repositories:refresh',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }, [events, owner]);\n\n // Request owner data when owner changes\n useEffect(() => {\n if (owner) {\n events.emit({\n type: 'owner-repositories:request',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }\n }, [events, owner]);\n\n // Sort and filter repositories\n const sortedAndFilteredRepos = React.useMemo(() => {\n let filtered = repositories;\n\n // Apply language filter\n if (languageFilter) {\n filtered = filtered.filter(r => r.language === languageFilter);\n }\n\n // Apply sorting\n return [...filtered].sort((a, b) => {\n let comparison = 0;\n\n switch (sortField) {\n case 'updated':\n comparison = new Date(b.updated_at || 0).getTime() - new Date(a.updated_at || 0).getTime();\n break;\n case 'stars':\n comparison = (b.stargazers_count || 0) - (a.stargazers_count || 0);\n break;\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'created':\n comparison = new Date(b.created_at || 0).getTime() - new Date(a.created_at || 0).getTime();\n break;\n }\n\n return sortOrder === 'desc' ? comparison : -comparison;\n });\n }, [repositories, sortField, sortOrder, languageFilter]);\n\n // Handle repository preview (click to show README)\n const handleSelectRepository = (repo: GitHubRepository) => {\n setSelectedRepoId(repo.id);\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'click',\n },\n });\n };\n\n // Handle repository open (double-click or button)\n const handleOpenRepository = (repo: GitHubRepository) => {\n events.emit({\n type: 'repository:selected',\n source: 'owner-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: repo,\n source: 'click',\n },\n });\n };\n\n // Format number with K/M suffix\n const formatNumber = (num: number): string => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n };\n\n // Format relative time\n const formatRelativeTime = (dateString: string): string => {\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'today';\n if (diffDays === 1) return 'yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n return `${Math.floor(diffDays / 365)} years ago`;\n };\n\n // Toggle sort\n const handleSort = (field: SortField) => {\n if (sortField === field) {\n setSortOrder(prev => prev === 'desc' ? 'asc' : 'desc');\n } else {\n setSortField(field);\n setSortOrder('desc');\n }\n };\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header with repository count */}\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Github size={18} color={theme.colors.primary} />\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n }}\n >\n Repositories\n </span>\n {!isLoading && repositories.length > 0 && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n padding: '2px 8px',\n borderRadius: '12px',\n backgroundColor: theme.colors.backgroundSecondary,\n }}\n >\n {repositories.length}\n </span>\n )}\n </div>\n\n {/* Sort and Filter Controls */}\n {!isLoading && !error && repositories.length > 0 && (\n <div\n style={{\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n }}\n >\n {/* Sort buttons */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <ArrowUpDown size={14} color={theme.colors.textSecondary} />\n {(['updated', 'stars', 'name'] as SortField[]).map((field) => (\n <button\n key={field}\n onClick={() => handleSort(field)}\n style={{\n padding: '4px 8px',\n borderRadius: '4px',\n border: 'none',\n background: sortField === field ? theme.colors.primary : theme.colors.backgroundSecondary,\n color: sortField === field ? theme.colors.background : theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n textTransform: 'capitalize',\n }}\n >\n {field}\n {sortField === field && (sortOrder === 'desc' ? ' ↓' : ' ↑')}\n </button>\n ))}\n </div>\n\n {/* Language filter */}\n {languages.length > 0 && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '4px', marginLeft: 'auto' }}>\n <Filter size={14} color={theme.colors.textSecondary} />\n <select\n value={languageFilter || ''}\n onChange={(e) => setLanguageFilter(e.target.value || null)}\n style={{\n padding: '4px 8px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n background: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n }}\n >\n <option value=\"\">All languages</option>\n {languages.map((lang) => (\n <option key={lang} value={lang}>{lang}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {/* Loading State */}\n {isLoading && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n color: theme.colors.textSecondary,\n }}\n >\n <div\n style={{\n width: 32,\n height: 32,\n border: `3px solid ${theme.colors.border}`,\n borderTopColor: theme.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n <span>Loading repositories...</span>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n padding: '16px 24px',\n borderRadius: '8px',\n backgroundColor: `${theme.colors.error}15`,\n color: theme.colors.error,\n marginBottom: '16px',\n }}\n >\n {error}\n </div>\n <button\n onClick={handleRefresh}\n style={{\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n background: theme.colors.primary,\n color: theme.colors.background,\n cursor: 'pointer',\n fontWeight: theme.fontWeights.medium,\n }}\n >\n Try Again\n </button>\n </div>\n )}\n\n {/* Empty State */}\n {!isLoading && !error && repositories.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0 }}>No repositories found</p>\n </div>\n )}\n\n {/* Repository List */}\n {!isLoading && !error && sortedAndFilteredRepos.length > 0 && (\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n }}\n >\n {sortedAndFilteredRepos.map((repo) => (\n <button\n key={repo.id}\n type=\"button\"\n onClick={() => handleSelectRepository(repo)}\n onDoubleClick={() => handleOpenRepository(repo)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '8px',\n border: selectedRepoId === repo.id\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: selectedRepoId === repo.id\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n transition: 'all 0.15s ease',\n }}\n >\n {/* Repo name */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {repo.name}\n </span>\n {repo.private && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <Lock size={10} />\n Private\n </span>\n )}\n {repo.archived && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.warning + '20',\n color: theme.colors.warning,\n }}\n >\n Archived\n </span>\n )}\n {repo.fork && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n padding: '2px 6px',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.textSecondary,\n }}\n >\n Fork\n </span>\n )}\n </div>\n\n {/* Description */}\n {repo.description && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {repo.description}\n </p>\n )}\n\n {/* Stats row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {repo.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: theme.colors.info,\n }}\n />\n {repo.language}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={14} />\n {formatNumber(repo.stargazers_count || 0)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={14} />\n {formatNumber(repo.forks_count || 0)}\n </span>\n {repo.updated_at && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={14} />\n {formatRelativeTime(repo.updated_at)}\n </span>\n )}\n <a\n href={repo.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n ))}\n </div>\n )}\n\n {/* Filtered empty state */}\n {!isLoading && !error && repositories.length > 0 && sortedAndFilteredRepos.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n color: theme.colors.textSecondary,\n }}\n >\n <Filter size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0 }}>No repositories match the current filter</p>\n <button\n onClick={() => setLanguageFilter(null)}\n style={{\n marginTop: '12px',\n padding: '8px 16px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n background: 'transparent',\n color: theme.colors.text,\n cursor: 'pointer',\n }}\n >\n Clear filter\n </button>\n </div>\n )}\n\n {/* CSS for spinner animation */}\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n );\n};\n\n/**\n * OwnerRepositoriesPanel - A panel for browsing a GitHub user or organization's repositories\n *\n * Features:\n * - Shows repositories for a user/org (including private if authenticated)\n * - Displays owner info (avatar, bio, repo count)\n * - Sort by updated, stars, or name\n * - Filter by programming language\n * - Click to preview README, double-click to open\n *\n * Required data slice: 'owner-repositories' (OwnerRepositoriesSliceData)\n *\n * Events emitted:\n * - 'owner-repositories:request' - Request data for a specific owner\n * - 'owner-repositories:refresh' - Request a refresh of current data\n * - 'repository:preview' - When a repo is clicked\n * - 'repository:selected' - When a repo is double-clicked\n */\nexport const OwnerRepositoriesPanel: React.FC<PanelComponentProps & { owner?: string }> = (props) => {\n return <OwnerRepositoriesPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const OwnerRepositoriesPanelMetadata = {\n id: 'owner-repositories',\n name: 'Owner Repositories',\n description: 'Browse repositories for a GitHub user or organization',\n icon: 'github',\n version: '0.2.0',\n slices: ['owner-repositories'],\n surfaces: ['panel'],\n};\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n History,\n Star,\n GitFork,\n ExternalLink,\n Calendar,\n Trash2,\n X,\n Github,\n Building2,\n User,\n BookOpen,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\nimport type { GitHubRepository, RepositoryPreviewEventPayload } from '../types/github';\n\nconst STORAGE_KEY = 'recent-repositories';\nconst OWNERS_STORAGE_KEY = 'recent-owners';\nconst MAX_RECENT_ITEMS = 50;\n\n/**\n * A simplified repository record stored in localStorage\n */\ninterface RecentRepository {\n type: 'repository';\n id: number;\n name: string;\n full_name: string;\n owner: {\n login: string;\n avatar_url?: string;\n };\n description: string | null;\n language: string | null;\n html_url: string;\n stargazers_count?: number;\n forks_count?: number;\n visitedAt: number;\n}\n\n/**\n * A simplified owner record stored in localStorage\n */\ninterface RecentOwner {\n type: 'owner';\n id: number;\n login: string;\n avatar_url?: string;\n name?: string;\n bio?: string;\n ownerType: 'User' | 'Organization';\n public_repos?: number;\n followers?: number;\n visitedAt: number;\n}\n\ntype RecentItem = RecentRepository | RecentOwner;\n\n/**\n * Load recent repositories from localStorage\n */\nfunction loadRecentRepositories(): RecentRepository[] {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const items = JSON.parse(stored);\n // Add type field if missing (migration from old format)\n return items.map((item: RecentRepository) => ({ ...item, type: 'repository' as const }));\n }\n } catch (err) {\n console.error('Failed to load recent repositories:', err);\n }\n return [];\n}\n\n/**\n * Load recent owners from localStorage\n */\nfunction loadRecentOwners(): RecentOwner[] {\n try {\n const stored = localStorage.getItem(OWNERS_STORAGE_KEY);\n if (stored) {\n return JSON.parse(stored);\n }\n } catch (err) {\n console.error('Failed to load recent owners:', err);\n }\n return [];\n}\n\n/**\n * Save recent repositories to localStorage\n */\nfunction saveRecentRepositories(repos: RecentRepository[]): void {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(repos));\n } catch (err) {\n console.error('Failed to save recent repositories:', err);\n }\n}\n\n/**\n * Save recent owners to localStorage\n */\nfunction saveRecentOwners(owners: RecentOwner[]): void {\n try {\n localStorage.setItem(OWNERS_STORAGE_KEY, JSON.stringify(owners));\n } catch (err) {\n console.error('Failed to save recent owners:', err);\n }\n}\n\n/**\n * Add a repository to the recent list\n */\nexport function addRecentRepository(repo: GitHubRepository): void {\n const recent = loadRecentRepositories();\n\n // Remove if already exists\n const filtered = recent.filter(r => r.id !== repo.id);\n\n // Add to front with current timestamp\n const newEntry: RecentRepository = {\n type: 'repository',\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: {\n login: repo.owner.login,\n avatar_url: repo.owner.avatar_url,\n },\n description: repo.description,\n language: repo.language,\n html_url: repo.html_url,\n stargazers_count: repo.stargazers_count,\n forks_count: repo.forks_count,\n visitedAt: Date.now(),\n };\n\n // Keep only MAX_RECENT_ITEMS\n const updated = [newEntry, ...filtered].slice(0, MAX_RECENT_ITEMS);\n saveRecentRepositories(updated);\n\n // Dispatch event so panels can update\n window.dispatchEvent(new CustomEvent('recent-items-updated'));\n}\n\n/**\n * Owner info structure for addRecentOwner\n */\nexport interface OwnerInfo {\n id: number;\n login: string;\n avatar_url?: string;\n name?: string;\n bio?: string;\n type: 'User' | 'Organization';\n public_repos?: number;\n followers?: number;\n}\n\n/**\n * Add an owner to the recent list\n */\nexport function addRecentOwner(owner: OwnerInfo): void {\n const recent = loadRecentOwners();\n\n // Remove if already exists\n const filtered = recent.filter(o => o.id !== owner.id);\n\n // Add to front with current timestamp\n const newEntry: RecentOwner = {\n type: 'owner',\n id: owner.id,\n login: owner.login,\n avatar_url: owner.avatar_url,\n name: owner.name,\n bio: owner.bio,\n ownerType: owner.type,\n public_repos: owner.public_repos,\n followers: owner.followers,\n visitedAt: Date.now(),\n };\n\n // Keep only MAX_RECENT_ITEMS\n const updated = [newEntry, ...filtered].slice(0, MAX_RECENT_ITEMS);\n saveRecentOwners(updated);\n\n // Dispatch event so panels can update\n window.dispatchEvent(new CustomEvent('recent-items-updated'));\n}\n\n/**\n * RecentRepositoriesPanelContent - Internal component that uses theme\n */\nconst RecentRepositoriesPanelContent: React.FC<PanelComponentProps & {\n onNavigate?: (path: string) => void;\n}> = ({\n events,\n onNavigate,\n}) => {\n const { theme } = useTheme();\n const [items, setItems] = useState<RecentItem[]>([]);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [filter, setFilter] = useState<'all' | 'repos' | 'owners'>('all');\n\n // Create unique ID for an item\n const getItemId = (item: RecentItem): string => {\n return item.type === 'repository' ? `repo-${item.id}` : `owner-${item.id}`;\n };\n\n // Load and merge items on mount\n useEffect(() => {\n const loadItems = () => {\n const repos = loadRecentRepositories();\n const owners = loadRecentOwners();\n\n // Merge and sort by visitedAt\n const merged: RecentItem[] = [...repos, ...owners].sort(\n (a, b) => b.visitedAt - a.visitedAt\n );\n setItems(merged);\n };\n\n loadItems();\n\n // Listen for updates\n const handleUpdate = () => loadItems();\n window.addEventListener('recent-items-updated', handleUpdate);\n // Legacy event for backward compatibility\n window.addEventListener('recent-repositories-updated', handleUpdate);\n\n return () => {\n window.removeEventListener('recent-items-updated', handleUpdate);\n window.removeEventListener('recent-repositories-updated', handleUpdate);\n };\n }, []);\n\n // Filtered items\n const filteredItems = items.filter(item => {\n if (filter === 'all') return true;\n if (filter === 'repos') return item.type === 'repository';\n if (filter === 'owners') return item.type === 'owner';\n return true;\n });\n\n // Format relative time\n const formatRelativeTime = (timestamp: number): string => {\n const now = Date.now();\n const diffMs = now - timestamp;\n const diffMins = Math.floor(diffMs / (1000 * 60));\n const diffHours = Math.floor(diffMs / (1000 * 60 * 60));\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffMins < 1) return 'just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays === 1) return 'yesterday';\n if (diffDays < 7) return `${diffDays}d ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)}w ago`;\n return `${Math.floor(diffDays / 30)}mo ago`;\n };\n\n // Format number with K/M suffix\n const formatNumber = (num: number): string => {\n if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M`;\n if (num >= 1000) return `${(num / 1000).toFixed(1)}K`;\n return num.toString();\n };\n\n // Handle repository click\n const handleSelectRepository = useCallback((repo: RecentRepository) => {\n setSelectedId(getItemId(repo));\n\n const githubRepo: GitHubRepository = {\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: {\n login: repo.owner.login,\n avatar_url: repo.owner.avatar_url,\n },\n private: false,\n html_url: repo.html_url,\n description: repo.description,\n fork: false,\n clone_url: `https://github.com/${repo.full_name}.git`,\n language: repo.language,\n default_branch: 'main',\n stargazers_count: repo.stargazers_count,\n forks_count: repo.forks_count,\n };\n\n events.emit<RepositoryPreviewEventPayload>({\n type: 'repository:preview',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: githubRepo,\n source: 'click',\n },\n });\n }, [events]);\n\n // Handle repository double-click (open)\n const handleOpenRepository = useCallback((repo: RecentRepository) => {\n if (onNavigate) {\n onNavigate(`/${repo.full_name}`);\n } else {\n const githubRepo: GitHubRepository = {\n id: repo.id,\n name: repo.name,\n full_name: repo.full_name,\n owner: {\n login: repo.owner.login,\n avatar_url: repo.owner.avatar_url,\n },\n private: false,\n html_url: repo.html_url,\n description: repo.description,\n fork: false,\n clone_url: `https://github.com/${repo.full_name}.git`,\n language: repo.language,\n default_branch: 'main',\n stargazers_count: repo.stargazers_count,\n forks_count: repo.forks_count,\n };\n\n events.emit({\n type: 'repository:selected',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: {\n repository: githubRepo,\n source: 'click',\n },\n });\n }\n }, [events, onNavigate]);\n\n // Handle owner click\n const handleSelectOwner = useCallback((owner: RecentOwner) => {\n setSelectedId(getItemId(owner));\n\n events.emit({\n type: 'owner:preview',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }, [events]);\n\n // Handle owner double-click (open)\n const handleOpenOwner = useCallback((owner: RecentOwner) => {\n if (onNavigate) {\n onNavigate(`/${owner.login}`);\n } else {\n events.emit({\n type: 'owner:selected',\n source: 'recent-repositories-panel',\n timestamp: Date.now(),\n payload: { owner },\n });\n }\n }, [events, onNavigate]);\n\n // Remove a single item\n const handleRemoveItem = useCallback((item: RecentItem, e: React.MouseEvent) => {\n e.stopPropagation();\n\n if (item.type === 'repository') {\n const repos = loadRecentRepositories().filter(r => r.id !== item.id);\n saveRecentRepositories(repos);\n } else {\n const owners = loadRecentOwners().filter(o => o.id !== item.id);\n saveRecentOwners(owners);\n }\n\n setItems(prev => prev.filter(i => getItemId(i) !== getItemId(item)));\n\n if (selectedId === getItemId(item)) {\n setSelectedId(null);\n }\n }, [selectedId]);\n\n // Clear all history\n const handleClearAll = useCallback(() => {\n if (filter === 'all' || filter === 'repos') {\n saveRecentRepositories([]);\n }\n if (filter === 'all' || filter === 'owners') {\n saveRecentOwners([]);\n }\n\n if (filter === 'all') {\n setItems([]);\n } else {\n setItems(prev => prev.filter(item =>\n filter === 'repos' ? item.type !== 'repository' : item.type !== 'owner'\n ));\n }\n setSelectedId(null);\n }, [filter]);\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px' }}>\n <History size={24} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n Recent\n </h2>\n </div>\n {items.length > 0 && (\n <button\n onClick={handleClearAll}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n background: 'transparent',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n title=\"Clear history\"\n >\n <Trash2 size={14} />\n Clear\n </button>\n )}\n </div>\n\n {/* Filter tabs */}\n {items.length > 0 && (\n <div\n style={{\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n gap: '4px',\n }}\n >\n {[\n { key: 'all', label: 'All' },\n { key: 'repos', label: 'Repositories' },\n { key: 'owners', label: 'Owners' },\n ].map(({ key, label }) => (\n <button\n key={key}\n onClick={() => setFilter(key as typeof filter)}\n style={{\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n background: filter === key ? theme.colors.primary : theme.colors.backgroundSecondary,\n color: filter === key ? '#fff' : theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n cursor: 'pointer',\n fontWeight: filter === key ? theme.fontWeights.semibold : theme.fontWeights.body,\n }}\n >\n {label}\n </button>\n ))}\n </div>\n )}\n\n {/* Empty State */}\n {filteredItems.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={48} color={theme.colors.border} style={{ marginBottom: 16 }} />\n <p style={{ margin: 0, fontSize: `${theme.fontSizes[2]}px` }}>\n {items.length === 0 ? 'No recent activity' : 'No items match filter'}\n </p>\n <p style={{ margin: '8px 0 0', fontSize: `${theme.fontSizes[1]}px` }}>\n {items.length === 0\n ? 'Repositories and owners you visit will appear here'\n : 'Try a different filter'}\n </p>\n </div>\n )}\n\n {/* Items List */}\n {filteredItems.length > 0 && (\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n }}\n >\n {filteredItems.map((item) => {\n const itemId = getItemId(item);\n const isSelected = selectedId === itemId;\n const isHovered = hoveredId === itemId;\n\n if (item.type === 'repository') {\n return (\n <button\n key={itemId}\n type=\"button\"\n onClick={() => handleSelectRepository(item)}\n onDoubleClick={() => handleOpenRepository(item)}\n onMouseEnter={() => setHoveredId(itemId)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '8px',\n border: isSelected\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: isSelected\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n transition: 'all 0.15s ease',\n position: 'relative',\n }}\n >\n {isHovered && (\n <button\n onClick={(e) => handleRemoveItem(item, e)}\n style={{\n position: 'absolute',\n top: '8px',\n right: '8px',\n padding: '4px',\n borderRadius: '4px',\n border: 'none',\n background: theme.colors.backgroundSecondary,\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"Remove from history\"\n >\n <X size={14} />\n </button>\n )}\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <BookOpen size={16} color={theme.colors.textSecondary} />\n {item.owner.avatar_url && (\n <img\n src={item.owner.avatar_url}\n alt={item.owner.login}\n style={{\n width: 24,\n height: 24,\n borderRadius: '50%',\n border: `1px solid ${theme.colors.border}`,\n }}\n />\n )}\n <div style={{ display: 'flex', flexDirection: 'column', minWidth: 0 }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {item.owner.login}\n </span>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {item.name}\n </span>\n </div>\n </div>\n\n {item.description && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {item.description}\n </p>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {item.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: theme.colors.info,\n }}\n />\n {item.language}\n </span>\n )}\n {item.stargazers_count !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={14} />\n {formatNumber(item.stargazers_count)}\n </span>\n )}\n {item.forks_count !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <GitFork size={14} />\n {formatNumber(item.forks_count)}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={14} />\n {formatRelativeTime(item.visitedAt)}\n </span>\n <a\n href={item.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n );\n }\n\n // Owner item\n return (\n <button\n key={itemId}\n type=\"button\"\n onClick={() => handleSelectOwner(item)}\n onDoubleClick={() => handleOpenOwner(item)}\n onMouseEnter={() => setHoveredId(itemId)}\n onMouseLeave={() => setHoveredId(null)}\n style={{\n width: '100%',\n padding: '12px',\n margin: '4px 0',\n borderRadius: '8px',\n border: isSelected\n ? `2px solid ${theme.colors.primary}`\n : `1px solid ${theme.colors.border}`,\n backgroundColor: isSelected\n ? `${theme.colors.primary}10`\n : theme.colors.surface,\n cursor: 'pointer',\n textAlign: 'left',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n transition: 'all 0.15s ease',\n position: 'relative',\n }}\n >\n {isHovered && (\n <button\n onClick={(e) => handleRemoveItem(item, e)}\n style={{\n position: 'absolute',\n top: '8px',\n right: '8px',\n padding: '4px',\n borderRadius: '4px',\n border: 'none',\n background: theme.colors.backgroundSecondary,\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n title=\"Remove from history\"\n >\n <X size={14} />\n </button>\n )}\n\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n {item.ownerType === 'Organization' ? (\n <Building2 size={16} color={theme.colors.textSecondary} />\n ) : (\n <User size={16} color={theme.colors.textSecondary} />\n )}\n {item.avatar_url && (\n <img\n src={item.avatar_url}\n alt={item.login}\n style={{\n width: 32,\n height: 32,\n borderRadius: item.ownerType === 'Organization' ? 8 : '50%',\n border: `1px solid ${theme.colors.border}`,\n }}\n />\n )}\n <div style={{ display: 'flex', flexDirection: 'column', minWidth: 0 }}>\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n }}\n >\n {item.name || item.login}\n </span>\n {item.name && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n @{item.login}\n </span>\n )}\n </div>\n </div>\n\n {item.bio && (\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {item.bio}\n </p>\n )}\n\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {item.public_repos !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <BookOpen size={14} />\n {formatNumber(item.public_repos)} repos\n </span>\n )}\n {item.followers !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <User size={14} />\n {formatNumber(item.followers)} followers\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={14} />\n {formatRelativeTime(item.visitedAt)}\n </span>\n <a\n href={`https://github.com/${item.login}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={(e) => e.stopPropagation()}\n style={{\n marginLeft: 'auto',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <ExternalLink size={14} />\n </a>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * RecentRepositoriesPanel - A panel for displaying recently visited repositories and owners\n *\n * Features:\n * - Persists visited repos and owners in localStorage\n * - Shows owner avatar, repo name, description\n * - Displays stars, forks, language, and last visited time\n * - Filter by repositories or owners\n * - Click to preview, double-click to open\n * - Remove individual items or clear all history\n */\nexport const RecentRepositoriesPanel: React.FC<PanelComponentProps & {\n onNavigate?: (path: string) => void;\n}> = (props) => {\n return <RecentRepositoriesPanelContent {...props} />;\n};\n\n/**\n * Panel metadata for registration\n */\nexport const RecentRepositoriesPanelMetadata = {\n id: 'recent-repositories',\n name: 'Recent',\n description: 'View and navigate to recently visited repositories and owners',\n icon: 'history',\n version: '0.1.0',\n slices: [],\n surfaces: ['panel'],\n};\n","import React, { useState, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n BookOpen,\n Network,\n ArrowRight,\n Github,\n Sparkles,\n ExternalLink,\n FolderOpen,\n ChevronRight,\n} from 'lucide-react';\n\nimport type { PanelComponentProps } from '../types';\n\n/**\n * Highlighted project for the quick start section\n */\nexport interface HighlightedProject {\n owner: string;\n repo: string;\n label?: string; // Optional display label, defaults to \"owner/repo\"\n}\n\n/**\n * Featured organization for the organizations section\n */\nexport interface FeaturedOrganization {\n login: string;\n description?: string;\n}\n\n/**\n * Curated collection of repositories\n */\nexport interface CuratedCollection {\n id: string;\n name: string;\n description: string;\n icon?: string;\n theme?: string;\n repositoryCount?: number;\n}\n\n/**\n * Props for the WelcomePanel\n */\nexport interface WelcomePanelProps extends PanelComponentProps {\n onNavigate?: (owner: string, repo: string) => void;\n highlightedProjects?: HighlightedProject[];\n featuredOrganizations?: FeaturedOrganization[];\n onOrganizationClick?: (org: string) => void;\n curatedCollections?: CuratedCollection[];\n onCollectionClick?: (collectionId: string) => void;\n}\n\n/**\n * Parse a GitHub URL or owner/repo string\n */\nfunction parseGitHubInput(input: string): { owner: string; repo: string } | null {\n const trimmed = input.trim();\n\n // Try full URL: https://github.com/owner/repo\n const urlMatch = trimmed.match(/github\\.com\\/([^/]+)\\/([^/]+)/);\n if (urlMatch) {\n return { owner: urlMatch[1], repo: urlMatch[2].replace(/\\.git$/, '') };\n }\n\n // Try owner/repo format\n const shortMatch = trimmed.match(/^([^/]+)\\/([^/]+)$/);\n if (shortMatch) {\n return { owner: shortMatch[1], repo: shortMatch[2] };\n }\n\n return null;\n}\n\n/**\n * Feature card component\n */\nconst FeatureCard: React.FC<{\n icon: React.ReactNode;\n title: string;\n description: string;\n theme: ReturnType<typeof useTheme>['theme'];\n link?: string;\n linkLabel?: string;\n}> = ({ icon, title, description, theme, link, linkLabel }) => {\n // Split title to stack words vertically - first word in text color, rest in primary\n const words = title.split(' ');\n const firstWord = words[0];\n const restWords = words.slice(1).join(' ');\n\n return (\n <div\n style={{\n padding: '24px',\n borderRadius: '12px',\n backgroundColor: theme.colors.surface,\n border: `1px solid ${theme.colors.border}`,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '12px',\n flex: 1,\n minWidth: '200px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n width: 48,\n height: 48,\n borderRadius: '10px',\n backgroundColor: `${theme.colors.primary}15`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.primary,\n }}\n >\n {icon}\n </div>\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n lineHeight: 1.3,\n }}\n >\n <span style={{ color: theme.colors.text }}>{firstWord}</span>\n {restWords && (\n <span style={{ color: theme.colors.primary }}>{restWords}</span>\n )}\n </h3>\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[2]}px`,\n color: theme.colors.textSecondary,\n lineHeight: 1.5,\n }}\n >\n {description}\n </p>\n {link && (\n <a\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n marginTop: '4px',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.primary,\n textDecoration: 'none',\n }}\n >\n {linkLabel || 'Learn more'}\n <ExternalLink size={14} />\n </a>\n )}\n </div>\n );\n};\n\n// Default highlighted projects\nconst defaultHighlightedProjects: HighlightedProject[] = [\n { owner: 'facebook', repo: 'react' },\n { owner: 'vercel', repo: 'next.js' },\n];\n\n/**\n * Collection card component\n */\nconst CollectionCard: React.FC<{\n collection: CuratedCollection;\n theme: ReturnType<typeof useTheme>['theme'];\n onClick: () => void;\n}> = ({ collection, theme, onClick }) => {\n return (\n <button\n onClick={onClick}\n style={{\n padding: '20px 24px',\n borderRadius: '12px',\n backgroundColor: theme.colors.surface,\n border: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '16px',\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n minWidth: '280px',\n maxWidth: '320px',\n textAlign: 'left',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = theme.colors.primary;\n e.currentTarget.style.transform = 'translateY(-2px)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = theme.colors.border;\n e.currentTarget.style.transform = 'translateY(0)';\n }}\n >\n {/* Collection Icon */}\n <div\n style={{\n width: 48,\n height: 48,\n borderRadius: '10px',\n backgroundColor: `${theme.colors.primary}15`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.primary,\n flexShrink: 0,\n }}\n >\n <FolderOpen size={24} />\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n marginBottom: '4px',\n }}\n >\n {collection.name}\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {collection.description}\n </div>\n {collection.repositoryCount !== undefined && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n {collection.repositoryCount} repositories\n </div>\n )}\n </div>\n <ChevronRight size={20} style={{ color: theme.colors.textSecondary, flexShrink: 0 }} />\n </button>\n );\n};\n\n/**\n * WelcomePanel - A landing panel with branding and repo search\n *\n * Features:\n * - Brand introduction with tagline\n * - Search input for owner/repo or GitHub URLs\n * - Feature highlights (documentation, diagrams, chat)\n * - Configurable quick start links to repos\n */\nexport const WelcomePanel: React.FC<WelcomePanelProps> = ({\n onNavigate,\n highlightedProjects = defaultHighlightedProjects,\n curatedCollections = [],\n onCollectionClick,\n}) => {\n const { theme } = useTheme();\n const [repoInput, setRepoInput] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const handleSubmit = useCallback((e: React.FormEvent) => {\n e.preventDefault();\n setError(null);\n\n const parsed = parseGitHubInput(repoInput);\n if (!parsed) {\n setError('Enter a valid format: owner/repo or GitHub URL');\n return;\n }\n\n if (onNavigate) {\n onNavigate(parsed.owner, parsed.repo);\n } else {\n // Default: navigate via window.location\n window.location.href = `/${parsed.owner}/${parsed.repo}`;\n }\n }, [repoInput, onNavigate]);\n\n const handleProjectClick = useCallback((project: HighlightedProject) => {\n if (onNavigate) {\n onNavigate(project.owner, project.repo);\n } else {\n window.location.href = `/${project.owner}/${project.repo}`;\n }\n }, [onNavigate]);\n\n const handleCollectionClick = useCallback((collection: CuratedCollection) => {\n if (onCollectionClick) {\n onCollectionClick(collection.id);\n }\n }, [onCollectionClick]);\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n overflowY: 'auto',\n }}\n >\n {/* Curated Collections Section */}\n {curatedCollections.length > 0 && (\n <div\n style={{\n padding: '48px 32px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '24px',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n <h2\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[6] || 32}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n textAlign: 'center',\n }}\n >\n Explore Curated Collections\n </h2>\n <div\n style={{\n display: 'flex',\n gap: '16px',\n flexWrap: 'wrap',\n justifyContent: 'center',\n maxWidth: '1200px',\n }}\n >\n {curatedCollections.map((collection) => (\n <CollectionCard\n key={collection.id}\n collection={collection}\n theme={theme}\n onClick={() => handleCollectionClick(collection)}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Hero Section */}\n <div\n style={{\n padding: '48px 32px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Tagline */}\n <h1\n style={{\n margin: '0 0 32px',\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.bold,\n color: theme.colors.text,\n }}\n >\n Explore your Projects\n </h1>\n\n {/* Search Input */}\n <form\n onSubmit={handleSubmit}\n style={{\n width: '100%',\n maxWidth: '500px',\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '8px',\n padding: '6px',\n borderRadius: '12px',\n backgroundColor: theme.colors.surface,\n border: `2px solid ${error ? theme.colors.error : theme.colors.border}`,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n paddingLeft: '12px',\n color: theme.colors.textSecondary,\n }}\n >\n <Github size={20} />\n </div>\n <input\n type=\"text\"\n value={repoInput}\n onChange={(e) => {\n setRepoInput(e.target.value);\n setError(null);\n }}\n placeholder=\"owner/repo or paste GitHub URL\"\n style={{\n flex: 1,\n padding: '12px 8px',\n border: 'none',\n background: 'transparent',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n outline: 'none',\n }}\n />\n <button\n type=\"submit\"\n style={{\n padding: '12px 20px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: '#fff',\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n Explore\n <ArrowRight size={18} />\n </button>\n </div>\n {error && (\n <p\n style={{\n margin: '8px 0 0',\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.error,\n }}\n >\n {error}\n </p>\n )}\n </form>\n </div>\n\n {/* Features Section */}\n <div\n style={{\n padding: '48px 32px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '20px',\n flexWrap: 'wrap',\n justifyContent: 'center',\n maxWidth: '900px',\n }}\n >\n <FeatureCard\n icon={<BookOpen size={24} />}\n title=\"Reliable Documentation\"\n description=\"Always up-to-date documentation generated directly from your codebase, never out of sync.\"\n theme={theme}\n link=\"https://github.com/principal-ai/alexandria-cli\"\n linkLabel=\"alexandria-cli\"\n />\n <FeatureCard\n icon={<Network size={24} />}\n title=\"Interactive Diagrams\"\n description=\"Visualize repository structure, dependencies, and architecture with auto-generated diagrams you can explore.\"\n theme={theme}\n link=\"https://www.npmjs.com/package/@principal-ai/visual-validation-cli\"\n linkLabel=\"visual-validation-cli\"\n />\n <FeatureCard\n icon={<Sparkles size={24} />}\n title=\"Principal Agent\"\n description=\"Ask questions about any repository and get instant, context-aware answers powered by AI.\"\n theme={theme}\n />\n </div>\n </div>\n\n </div>\n );\n};\n\n/**\n * Panel metadata for registration\n */\nexport const WelcomePanelMetadata = {\n id: 'welcome',\n name: 'Welcome',\n description: 'Landing page with branding and repository search',\n icon: 'home',\n version: '0.1.0',\n slices: [],\n surfaces: ['panel'],\n};\n","/**\n * GitHub Panel Tools\n *\n * UTCP-compatible tools for GitHub repository operations.\n * These tools emit events that the GitHub panels listen for.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: List Repositories\n *\n * Triggers a refresh of the user's GitHub repositories.\n * The panel will emit repository data when available.\n */\nexport const listRepositoriesTool: PanelTool = {\n name: 'list_repositories',\n description: 'Get a list of GitHub repositories the user has access to, including owned repos, starred repos, and organization repos.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'list', 'browse'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github:list-repositories',\n },\n};\n\n/**\n * Tool: Select Repository\n *\n * Select a repository to view its details and README.\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_repository',\n description: 'Select a GitHub repository to view its details, README, and files. Use the full repository name in \"owner/repo\" format.',\n inputs: {\n type: 'object',\n properties: {\n repository: {\n type: 'string',\n description: 'The full repository name in \"owner/repo\" format (e.g., \"facebook/react\")',\n },\n },\n required: ['repository'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n repository: { type: 'string' },\n },\n },\n tags: ['github', 'repository', 'select', 'navigate'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'repository:selected',\n },\n};\n\n/**\n * Tool: Preview Repository\n *\n * Preview a repository's README without fully selecting it.\n */\nexport const previewRepositoryTool: PanelTool = {\n name: 'preview_repository',\n description: 'Preview a GitHub repository\\'s README in the viewer without navigating to it.',\n inputs: {\n type: 'object',\n properties: {\n repository: {\n type: 'string',\n description: 'The full repository name in \"owner/repo\" format (e.g., \"facebook/react\")',\n },\n },\n required: ['repository'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'preview', 'readme'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'repository:preview',\n },\n};\n\n/**\n * Tool: Search Repositories\n *\n * Search through the user's repositories.\n */\nexport const searchRepositoriesTool: PanelTool = {\n name: 'search_repositories',\n description: 'Search through the user\\'s GitHub repositories by name, description, or language.',\n inputs: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'The search query to filter repositories',\n },\n },\n required: ['query'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'search', 'filter'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github:search-repositories',\n },\n};\n\n/**\n * Tool: Open Repository Switcher\n *\n * Open the repository switcher modal.\n */\nexport const openRepositorySwitcherTool: PanelTool = {\n name: 'open_repository_switcher',\n description: 'Open the repository switcher modal to browse and select a different repository.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'repository', 'switch', 'modal'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'repository:open-switcher',\n },\n};\n\n/**\n * Tool: Request GitHub Login\n *\n * Prompt the user to sign in to GitHub.\n */\nexport const requestGitHubLoginTool: PanelTool = {\n name: 'request_github_login',\n description: 'Prompt the user to sign in to their GitHub account to access repositories.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'auth', 'login', 'sign-in'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github:login-requested',\n },\n};\n\n/**\n * Tool: List Issues\n *\n * Request the list of issues for the current repository.\n */\nexport const listIssuesTool: PanelTool = {\n name: 'list_issues',\n description: 'Get a list of GitHub issues for the current repository.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'issues', 'list', 'browse'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github-issues:request',\n },\n};\n\n/**\n * Tool: Refresh Issues\n *\n * Refresh the list of issues for the current repository.\n */\nexport const refreshIssuesTool: PanelTool = {\n name: 'refresh_issues',\n description: 'Refresh the list of GitHub issues for the current repository.',\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['github', 'issues', 'refresh', 'update'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'github-issues:refresh',\n },\n};\n\n/**\n * All GitHub tools exported as an array.\n */\nexport const githubTools: PanelTool[] = [\n listRepositoriesTool,\n selectRepositoryTool,\n previewRepositoryTool,\n searchRepositoriesTool,\n openRepositorySwitcherTool,\n requestGitHubLoginTool,\n listIssuesTool,\n refreshIssuesTool,\n];\n\n/**\n * GitHub tools metadata for registration.\n */\nexport const githubToolsMetadata: PanelToolsMetadata = {\n id: 'github-panels',\n name: 'GitHub Panels',\n description: 'Tools for browsing and managing GitHub repositories',\n tools: githubTools,\n};\n","import { GitHubProjectsPanel, GitHubProjectsPanelMetadata } from './panels/GitHubProjectsPanel';\nimport { GitHubSearchPanel, GitHubSearchPanelMetadata } from './panels/GitHubSearchPanel';\nimport { GitHubIssuesPanel, GitHubIssuesPanelMetadata } from './panels/GitHubIssuesPanel';\nimport { OwnerRepositoriesPanel, OwnerRepositoriesPanelMetadata } from './panels/OwnerRepositoriesPanel';\nimport { RecentRepositoriesPanel, RecentRepositoriesPanelMetadata } from './panels/RecentRepositoriesPanel';\nimport { WelcomePanel, WelcomePanelMetadata } from './panels/WelcomePanel';\nimport type { PanelDefinition, PanelContextValue, PanelTool } from './types';\nimport { githubTools, githubToolsMetadata } from './tools';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n ...GitHubProjectsPanelMetadata,\n tools: githubTools, // Add tools to panel metadata\n },\n component: GitHubProjectsPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Projects Panel mounted');\n\n // Refresh GitHub data if available\n const slice = context.getSlice('github-repositories');\n if (slice && !slice.loading) {\n await slice.refresh();\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Projects Panel unmounting');\n },\n },\n {\n metadata: GitHubSearchPanelMetadata,\n component: GitHubSearchPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Search Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Search Panel unmounting');\n },\n },\n {\n metadata: GitHubIssuesPanelMetadata,\n component: GitHubIssuesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Issues Panel mounted');\n\n // Refresh issues data if available\n const slice = context.getSlice('github-issues');\n if (slice && !slice.loading) {\n await slice.refresh();\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Issues Panel unmounting');\n },\n },\n {\n metadata: OwnerRepositoriesPanelMetadata,\n component: OwnerRepositoriesPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Owner Repositories Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Owner Repositories Panel unmounting');\n },\n },\n {\n metadata: RecentRepositoriesPanelMetadata,\n component: RecentRepositoriesPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Recent Repositories Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Recent Repositories Panel unmounting');\n },\n },\n {\n metadata: WelcomePanelMetadata,\n component: WelcomePanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Welcome Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Welcome Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - GitHub Panels Extension');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - GitHub Panels Extension');\n};\n\n// Export components for direct use\nexport { GitHubProjectCard } from './components/GitHubProjectCard';\nexport { GitHubProjectsPanel } from './panels/GitHubProjectsPanel';\nexport { GitHubSearchPanel } from './panels/GitHubSearchPanel';\nexport { GitHubIssuesPanel } from './panels/GitHubIssuesPanel';\nexport { OwnerRepositoriesPanel } from './panels/OwnerRepositoriesPanel';\nexport { RecentRepositoriesPanel, addRecentRepository, addRecentOwner } from './panels/RecentRepositoriesPanel';\nexport type { OwnerInfo } from './panels/RecentRepositoriesPanel';\nexport { WelcomePanel } from './panels/WelcomePanel';\nexport type { WelcomePanelProps, HighlightedProject, FeaturedOrganization, CuratedCollection } from './panels/WelcomePanel';\n\n// Export types\nexport type {\n GitHubOwner,\n GitHubRepository,\n GitHubOrganization,\n GitHubRepositoriesSliceData,\n RepositorySelectedEventPayload,\n RepositoryPreviewEventPayload,\n GitHubPanelEventType,\n GitHubIssue,\n GitHubIssueLabel,\n GitHubIssueUser,\n GitHubIssuesSliceData,\n IssueSelectedEventPayload,\n} from './types/github';\n\n// Export tools\nexport {\n githubTools,\n githubToolsMetadata,\n listRepositoriesTool,\n selectRepositoryTool,\n previewRepositoryTool,\n searchRepositoriesTool,\n openRepositorySwitcherTool,\n requestGitHubLoginTool,\n listIssuesTool,\n refreshIssuesTool,\n} from './tools';\n"],"names":["__iconNode","Loader2","AlertCircle","CheckCircle2","React","Filter"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]}