@industry-theme/alexandria-panels 0.1.21 → 0.1.22
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/building-2.js","../node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/lucide-react/dist/esm/icons/check.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.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/door-closed.js","../node_modules/lucide-react/dist/esm/icons/download.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/focus.js","../node_modules/lucide-react/dist/esm/icons/folder-git-2.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/git-fork.js","../node_modules/lucide-react/dist/esm/icons/house.js","../node_modules/lucide-react/dist/esm/icons/layers.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/mail.js","../node_modules/lucide-react/dist/esm/icons/map-pin.js","../node_modules/lucide-react/dist/esm/icons/move-up.js","../node_modules/lucide-react/dist/esm/icons/pen.js","../node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/lucide-react/dist/esm/icons/rotate-ccw.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/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/panels/LocalProjectsPanel/RepositoryAvatar.tsx","../src/panels/LocalProjectsPanel/LocalProjectCard.tsx","../src/panels/LocalProjectsPanel/index.tsx","../src/panels/WorkspaceRepositoriesPanel/index.tsx","../src/panels/WorkspacesListPanel/WorkspaceCard.tsx","../src/panels/WorkspacesListPanel/index.tsx","../src/panels/WorkspaceCollectionPanel/index.tsx","../src/panels/shared/GitHubRepositoryCard.tsx","../src/panels/GitHubStarredPanel/index.tsx","../src/panels/GitHubProjectsPanel/index.tsx","../src/panels/UserProfilePanel/index.tsx","../src/panels/LocalProjectsPanel/tools.ts","../src/panels/WorkspaceRepositoriesPanel/tools.ts","../src/panels/WorkspacesListPanel/tools.ts","../src/panels/WorkspaceCollectionPanel/tools.ts","../src/panels/GitHubStarredPanel/tools.ts","../src/panels/GitHubProjectsPanel/tools.ts","../src/panels/UserProfilePanel/tools.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: \"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: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=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 = [[\"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 = [[\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]];\nconst Circle = createLucideIcon(\"circle\", __iconNode);\n\nexport { __iconNode, Circle as default };\n//# sourceMappingURL=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: \"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: \"M10 12h.01\", key: \"1kxr2c\" }],\n [\"path\", { d: \"M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14\", key: \"36qu9e\" }],\n [\"path\", { d: \"M2 20h20\", key: \"owomy5\" }]\n];\nconst DoorClosed = createLucideIcon(\"door-closed\", __iconNode);\n\nexport { __iconNode, DoorClosed as default };\n//# sourceMappingURL=door-closed.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 15V3\", key: \"m9g1x1\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"path\", { d: \"m7 10 5 5 5-5\", key: \"brsn70\" }]\n];\nconst Download = createLucideIcon(\"download\", __iconNode);\n\nexport { __iconNode, Download as default };\n//# sourceMappingURL=download.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"path\", { d: \"M3 7V5a2 2 0 0 1 2-2h2\", key: \"aa7l1z\" }],\n [\"path\", { d: \"M17 3h2a2 2 0 0 1 2 2v2\", key: \"4qcy5o\" }],\n [\"path\", { d: \"M21 17v2a2 2 0 0 1-2 2h-2\", key: \"6vwrx8\" }],\n [\"path\", { d: \"M7 21H5a2 2 0 0 1-2-2v-2\", key: \"ioqczr\" }]\n];\nconst Focus = createLucideIcon(\"focus\", __iconNode);\n\nexport { __iconNode, Focus as default };\n//# sourceMappingURL=focus.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: \"M9 20H4a2 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.9H20a2 2 0 0 1 2 2v5\",\n key: \"1w6njk\"\n }\n ],\n [\"circle\", { cx: \"13\", cy: \"12\", r: \"2\", key: \"1j92g6\" }],\n [\"path\", { d: \"M18 19c-2.8 0-5-2.2-5-5v8\", key: \"pkpw2h\" }],\n [\"circle\", { cx: \"20\", cy: \"19\", r: \"2\", key: \"1obnsp\" }]\n];\nconst FolderGit2 = createLucideIcon(\"folder-git-2\", __iconNode);\n\nexport { __iconNode, FolderGit2 as default };\n//# sourceMappingURL=folder-git-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 [\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 [\"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 [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n d: \"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\n key: \"r6nss1\"\n }\n ]\n];\nconst House = createLucideIcon(\"house\", __iconNode);\n\nexport { __iconNode, House as default };\n//# sourceMappingURL=house.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.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\",\n key: \"zw3jo\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\",\n key: \"1wduqc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\",\n key: \"kqbvx6\"\n }\n ]\n];\nconst Layers = createLucideIcon(\"layers\", __iconNode);\n\nexport { __iconNode, Layers as default };\n//# sourceMappingURL=layers.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: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.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 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n];\nconst MapPin = createLucideIcon(\"map-pin\", __iconNode);\n\nexport { __iconNode, MapPin as default };\n//# sourceMappingURL=map-pin.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 6L12 2L16 6\", key: \"1yvkyx\" }],\n [\"path\", { d: \"M12 2V22\", key: \"r89rzk\" }]\n];\nconst MoveUp = createLucideIcon(\"move-up\", __iconNode);\n\nexport { __iconNode, MoveUp as default };\n//# sourceMappingURL=move-up.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: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ]\n];\nconst Pen = createLucideIcon(\"pen\", __iconNode);\n\nexport { __iconNode, Pen as default };\n//# sourceMappingURL=pen.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 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.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];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.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.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 from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { RepositoryAvatarProps } from './types';\n\n/**\n * RepositoryAvatar - Displays repository owner avatar\n *\n * Priority:\n * 1. customAvatarUrl prop\n * 2. GitHub avatar from owner username\n * 3. Fallback icon or initial\n */\nexport const RepositoryAvatar: React.FC<RepositoryAvatarProps> = ({\n owner,\n customAvatarUrl,\n size = 32,\n fallbackIcon,\n}) => {\n const { theme } = useTheme();\n\n // Use rounded squares for avatar\n const borderRadius = `${Math.min(8, size / 4)}px`;\n\n // Determine avatar URL\n const avatarUrl = customAvatarUrl || (owner ? `https://github.com/${owner}.png` : null);\n\n const getContent = () => {\n if (avatarUrl) {\n return (\n <img\n src={avatarUrl}\n alt={owner || 'Repository'}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n onError={(e) => {\n // Hide broken image and show fallback\n e.currentTarget.style.display = 'none';\n }}\n />\n );\n }\n\n if (fallbackIcon) {\n return fallbackIcon;\n }\n\n return null;\n };\n\n return (\n <div\n style={{\n width: `${size}px`,\n height: `${size}px`,\n borderRadius,\n backgroundColor: theme.colors.backgroundTertiary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {getContent()}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FolderOpen, Focus, Loader2, X, Copy, Check, Plus, MoveUp, Lock } from 'lucide-react';\nimport { RepositoryAvatar } from './RepositoryAvatar';\nimport type { LocalProjectCardProps } from './types';\nimport './LocalProjectsPanel.css';\n\n/**\n * Language color mapping for visual indicators\n */\nconst LANGUAGE_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\nconst getLanguageColor = (language: string): string => {\n return LANGUAGE_COLORS[language] || '#6e7681';\n};\n\n/**\n * LocalProjectCard - Individual project card with actions\n *\n * Displays repository info and provides action buttons based on mode:\n * - default: Open and Remove buttons\n * - add-to-workspace: Add button only\n * - minimal: Open button only\n */\nexport const LocalProjectCard: React.FC<LocalProjectCardProps> = ({\n entry,\n actionMode = 'default',\n isSelected = false,\n onSelect,\n onOpen,\n onRemove,\n onAddToWorkspace,\n onRemoveFromWorkspace,\n onMoveToWorkspace,\n isLoading = false,\n windowState = 'closed',\n compact: _compact = false,\n isInWorkspaceDirectory,\n workspacePath,\n userHomePath,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [copiedPath, setCopiedPath] = useState(false);\n const [isMoving, setIsMoving] = useState(false);\n const [isRemoving, setIsRemoving] = useState(false);\n\n // Get avatar URL from GitHub owner\n const avatarUrl = entry.github?.owner\n ? `https://github.com/${entry.github.owner}.png`\n : null;\n\n // Format path for display - strip workspace path or replace home with ~\n const getDisplayPath = (path: string): string => {\n // First try to strip workspace path\n if (workspacePath && path.startsWith(workspacePath)) {\n const relativePath = path.slice(workspacePath.length);\n // Remove leading slash if present\n return relativePath.startsWith('/') ? relativePath.slice(1) : relativePath;\n }\n // Then try to replace home path with ~\n if (userHomePath && path.startsWith(userHomePath)) {\n return '~' + path.slice(userHomePath.length);\n }\n return path;\n };\n\n const displayPath = getDisplayPath(entry.path);\n\n const handleCardClick = () => {\n onSelect?.(entry);\n };\n\n const handleDoubleClick = () => {\n onOpen?.(entry);\n };\n\n const handleOpenClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onOpen?.(entry);\n };\n\n const handleRemoveClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.(entry);\n };\n\n const handleAddToWorkspaceClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAddToWorkspace?.(entry);\n };\n\n const handleRemoveFromWorkspaceClick = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n setIsRemoving(true);\n onRemoveFromWorkspace?.(entry);\n } finally {\n setIsRemoving(false);\n }\n };\n\n const handleMoveToWorkspaceClick = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n setIsMoving(true);\n onMoveToWorkspace?.(entry);\n } finally {\n setIsMoving(false);\n }\n };\n\n\n const handleCopyPath = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n await navigator.clipboard.writeText(entry.path);\n setCopiedPath(true);\n setTimeout(() => setCopiedPath(false), 2000);\n } catch (err) {\n console.error('Failed to copy path:', err);\n }\n };\n\n // Action button style - flex to share width\n const actionButtonStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n flex: 1,\n height: '24px',\n padding: '0 8px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n transition: 'all 0.15s ease',\n };\n\n // Button hover handlers for consistent styling with WorkspaceCard\n const handleButtonHover = (e: React.MouseEvent<HTMLButtonElement>, isDestructive = false) => {\n if (isDestructive) {\n e.currentTarget.style.backgroundColor = `${theme.colors.error || '#ef4444'}15`;\n e.currentTarget.style.color = theme.colors.error || '#ef4444';\n } else {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }\n };\n\n const handleButtonLeave = (e: React.MouseEvent<HTMLButtonElement>, defaultColor?: string) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = defaultColor || theme.colors.textSecondary;\n };\n\n const renderActionButtons = () => {\n if (actionMode === 'add-to-workspace') {\n return (\n <button\n type=\"button\"\n onClick={handleAddToWorkspaceClick}\n disabled={isLoading}\n title=\"Add to workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isLoading ? <Loader2 size={14} className=\"animate-spin\" /> : <Plus size={14} />}\n <span>Add</span>\n </button>\n );\n }\n\n if (actionMode === 'workspace') {\n return (\n <>\n {isInWorkspaceDirectory === false && onMoveToWorkspace && (\n <button\n type=\"button\"\n onClick={handleMoveToWorkspaceClick}\n disabled={isMoving}\n title=\"Move to workspace directory\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isMoving ? <Loader2 size={14} className=\"animate-spin\" /> : <MoveUp size={14} />}\n <span>Move</span>\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleCopyPath}\n title={copiedPath ? 'Copied!' : `Copy path: ${entry.path}`}\n style={{\n ...actionButtonStyle,\n color: copiedPath ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e, copiedPath ? theme.colors.success || '#10b981' : undefined)}\n >\n {copiedPath ? <Check size={14} /> : <Copy size={14} />}\n <span>{copiedPath ? 'Copied' : 'Copy'}</span>\n </button>\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title=\"Open repository\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n <FolderOpen size={14} />\n <span>Open</span>\n </button>\n {onRemoveFromWorkspace && (\n <button\n type=\"button\"\n onClick={handleRemoveFromWorkspaceClick}\n disabled={isRemoving}\n title=\"Remove from workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e, true)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isRemoving ? <Loader2 size={14} className=\"animate-spin\" /> : <X size={14} />}\n <span>Remove</span>\n </button>\n )}\n </>\n );\n }\n\n // Default and minimal modes\n return (\n <>\n <button\n type=\"button\"\n onClick={handleCopyPath}\n title={copiedPath ? 'Copied!' : `Copy path: ${entry.path}`}\n style={{\n ...actionButtonStyle,\n color: copiedPath ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e, copiedPath ? theme.colors.success || '#10b981' : undefined)}\n >\n {copiedPath ? <Check size={14} /> : <Copy size={14} />}\n <span>{copiedPath ? 'Copied' : 'Copy'}</span>\n </button>\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title={\n windowState === 'ready'\n ? 'Focus window'\n : windowState === 'opening'\n ? 'Window is opening...'\n : 'Open locally'\n }\n disabled={windowState === 'opening'}\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {windowState === 'ready' ? (\n <Focus size={14} />\n ) : windowState === 'opening' ? (\n <Loader2 size={14} className=\"animate-spin\" />\n ) : (\n <FolderOpen size={14} />\n )}\n <span>{windowState === 'ready' ? 'Focus' : 'Open'}</span>\n </button>\n {actionMode === 'default' && onRemove && (\n <button\n type=\"button\"\n onClick={handleRemoveClick}\n disabled={isLoading}\n title=\"Remove from local projects\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e, true)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isLoading ? <Loader2 size={14} className=\"animate-spin\" /> : <X size={14} />}\n <span>Remove</span>\n </button>\n )}\n </>\n );\n };\n\n const cardStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '12px',\n padding: '12px',\n borderRadius: '6px',\n backgroundColor: isSelected\n ? theme.colors.backgroundTertiary\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${\n isSelected\n ? theme.colors.primary || theme.colors.border\n : isHovered\n ? theme.colors.border\n : 'transparent'\n }`,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n fontFamily: theme.fonts.body,\n };\n\n return (\n <div\n className=\"local-project-card\"\n style={cardStyle}\n onClick={handleCardClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Avatar */}\n <RepositoryAvatar\n customAvatarUrl={avatarUrl}\n size={48}\n fallbackIcon={\n <div\n style={{\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n {entry.name[0]?.toUpperCase() || '?'}\n </div>\n }\n />\n\n {/* Content column */}\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n minWidth: 0,\n }}\n >\n {/* Name row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span\n className={entry.github?.primaryLanguage ? 'project-name-underline' : undefined}\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n '--underline-color': entry.github?.primaryLanguage\n ? getLanguageColor(entry.github.primaryLanguage)\n : theme.colors.textSecondary,\n } as React.CSSProperties}\n >\n {entry.name}\n </span>\n {/* Private badge */}\n {entry.github && entry.github.isPublic === false && (\n <span title=\"Private repository\">\n <Lock\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n </div>\n\n {/* Description row with action buttons */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n minHeight: '24px',\n position: 'relative',\n }}\n >\n {/* Description - hidden when hovered */}\n <div\n style={{\n flex: 1,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n lineHeight: 1.4,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n opacity: isHovered ? 0 : 1,\n transition: 'opacity 0.15s ease',\n }}\n title={entry.github?.description || displayPath}\n >\n {entry.github?.description || displayPath}\n </div>\n\n {/* Action buttons - cover full width when hovered */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n transition: 'opacity 0.15s ease',\n }}\n >\n {renderActionButtons()}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Search, Plus, Building2, FolderGit2 } from 'lucide-react';\nimport './LocalProjectsPanel.css';\nimport type { AlexandriaEntry } from '@principal-ai/alexandria-core-library/types';\nimport type { PanelComponentProps } from '../../types';\nimport { LocalProjectCard } from './LocalProjectCard';\nimport type {\n AlexandriaRepositoriesSlice,\n LocalProjectsPanelActions,\n RepositoryWindowState,\n} from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.local-projects';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * LocalProjectsPanelContent - Internal component that uses theme\n */\nconst LocalProjectsPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState('');\n const [isAdding, setIsAdding] = useState(false);\n const [selectedEntry, setSelectedEntry] = useState<AlexandriaEntry | null>(null);\n const [windowStates, setWindowStates] = useState<Map<string, RepositoryWindowState>>(new Map());\n const [sortByOrg, setSortByOrg] = useState(false);\n\n // Get extended actions (type assertion for panel-specific actions)\n const panelActions = actions as LocalProjectsPanelActions;\n\n // Get repositories from context slice\n const repoSlice = context.getSlice<AlexandriaRepositoriesSlice>('alexandriaRepositories');\n const repositories = useMemo(\n () => repoSlice?.data?.repositories || [],\n [repoSlice?.data?.repositories]\n );\n const loading = repoSlice?.loading ?? false;\n\n // Handle open repository\n const handleOpenRepository = useCallback(\n async (entry: AlexandriaEntry) => {\n if (!panelActions.openRepository) {\n console.warn('Open repository action not available');\n return;\n }\n\n // Update window state to opening\n setWindowStates((prev) => new Map(prev).set(entry.path, 'opening'));\n\n try {\n await panelActions.openRepository(entry);\n\n // Update window state to ready\n setWindowStates((prev) => new Map(prev).set(entry.path, 'ready'));\n\n // Emit event\n events.emit(createPanelEvent(`${PANEL_ID}:repository-opened`, { entry }));\n } catch (error) {\n console.error('Error opening repository:', error);\n setWindowStates((prev) => new Map(prev).set(entry.path, 'closed'));\n }\n },\n [panelActions, events]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n // Filter event from tools\n events.on<{ filter: string }>(`${PANEL_ID}:filter`, (event) => {\n if (event.payload?.filter !== undefined) {\n setFilter(event.payload.filter);\n }\n }),\n\n // Select repository event from tools\n events.on<{ identifier: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const entry = repositories.find(\n (r) => r.name === identifier || r.path === identifier\n );\n if (entry) {\n setSelectedEntry(entry);\n events.emit(createPanelEvent(`${PANEL_ID}:repository-selected`, { entry }));\n }\n }\n }),\n\n // Open repository event from tools\n events.on<{ identifier: string }>(`${PANEL_ID}:open-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const entry = repositories.find(\n (r) => r.name === identifier || r.path === identifier\n );\n if (entry) {\n handleOpenRepository(entry);\n }\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, repositories, handleOpenRepository]);\n\n // Handle add project\n const handleAddProject = async () => {\n if (!panelActions.selectDirectory || !panelActions.registerRepository) {\n console.warn('Add project actions not available');\n return;\n }\n\n try {\n setIsAdding(true);\n const result = await panelActions.selectDirectory();\n\n if (!result) {\n return;\n }\n\n await panelActions.registerRepository(result.name, result.path);\n\n // Refresh the repositories\n await context.refresh('repository', 'alexandriaRepositories');\n } catch (error) {\n console.error('Failed to add project:', error);\n } finally {\n setIsAdding(false);\n }\n };\n\n // Handle remove repository\n const handleRemoveRepository = async (entry: AlexandriaEntry) => {\n if (!panelActions.removeRepository) {\n console.warn('Remove repository action not available');\n return;\n }\n\n try {\n await panelActions.removeRepository(entry.name, false);\n await context.refresh('repository', 'alexandriaRepositories');\n } catch (error) {\n console.error('Failed to remove repository:', error);\n }\n };\n\n // Handle select repository\n const handleSelectRepository = (entry: AlexandriaEntry) => {\n setSelectedEntry(entry);\n events.emit(createPanelEvent(`${PANEL_ID}:repository-selected`, { entry }));\n };\n\n // Filter and sort repositories\n const normalizedFilter = filter.trim().toLowerCase();\n\n const filteredAndSortedRepositories = useMemo(() => {\n // Filter repositories by search term\n const filtered = repositories.filter((entry) => {\n if (!normalizedFilter) return true;\n\n const haystack = [\n entry.name,\n entry.github?.name ?? '',\n entry.github?.owner ?? '',\n entry.remoteUrl ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(normalizedFilter);\n });\n\n // Sort alphabetically\n return filtered.sort((a, b) => {\n if (sortByOrg) {\n // Sort by org/owner first, then by repo name\n const aOrg = (a.github?.owner ?? '').toLowerCase();\n const bOrg = (b.github?.owner ?? '').toLowerCase();\n const orgCompare = aOrg.localeCompare(bOrg);\n if (orgCompare !== 0) return orgCompare;\n }\n // Sort by repo name\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n }, [repositories, normalizedFilter, sortByOrg]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // Loading state\n if (loading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading local projects...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"local-projects-panel\" style={contentContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <FolderGit2 size={18} style={{ color: theme.colors.success || '#10b981' }} />\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Local Projects\n </span>\n {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.background,\n }}\n >\n {repositories.length}\n </span>\n )}\n <div style={{ marginLeft: 'auto', display: 'flex', gap: '8px' }}>\n <button\n onClick={() => setSortByOrg(!sortByOrg)}\n title={sortByOrg ? 'Sorting by organization' : 'Sorting by repo name'}\n style={{\n padding: '6px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: sortByOrg ? `${theme.colors.primary}20` : theme.colors.background,\n color: sortByOrg ? theme.colors.primary : theme.colors.textSecondary,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.15s',\n flexShrink: 0,\n }}\n >\n {sortByOrg ? <Building2 size={16} /> : <FolderGit2 size={16} />}\n </button>\n {panelActions.selectDirectory && (\n <button\n onClick={handleAddProject}\n disabled={isAdding}\n title=\"Add existing project\"\n style={{\n padding: '6px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n cursor: isAdding ? 'default' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: isAdding ? 0.6 : 1,\n transition: 'opacity 0.2s',\n flexShrink: 0,\n }}\n >\n <Plus size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Search bar */}\n <div style={{ padding: '8px 16px' }}>\n <div style={{ position: 'relative' }}>\n <Search\n size={16}\n style={{\n position: 'absolute',\n top: '50%',\n left: '12px',\n transform: 'translateY(-50%)',\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n zIndex: 1,\n }}\n />\n <input\n type=\"text\"\n value={filter}\n placeholder=\"Filter local projects...\"\n onChange={(event) => setFilter(event.target.value)}\n style={{\n width: '100%',\n boxSizing: 'border-box',\n padding: '8px 12px 8px 36px',\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 fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n </div>\n </div>\n\n {/* Scrollable content */}\n <div\n className=\"local-projects-list\"\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {/* Repository list */}\n {filteredAndSortedRepositories.map((entry) => (\n <LocalProjectCard\n key={entry.path}\n entry={entry}\n isSelected={selectedEntry?.path === entry.path}\n onSelect={handleSelectRepository}\n onOpen={handleOpenRepository}\n onRemove={handleRemoveRepository}\n windowState={windowStates.get(entry.path) || 'closed'}\n />\n ))}\n\n {/* No results message */}\n {filteredAndSortedRepositories.length === 0 && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>\n {normalizedFilter\n ? 'No local projects match your filter.'\n : 'No local projects found.'}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * LocalProjectsPanel - Browse and manage local Alexandria repositories\n *\n * Features:\n * - List all registered local repositories\n * - Search/filter by name, owner, or path\n * - Add new projects via directory picker\n * - Open projects in dev workspace\n * - Remove projects from registry\n *\n * Data Slices:\n * - alexandriaRepositories: List of AlexandriaEntry objects\n *\n * Events Emitted:\n * - industry-theme.local-projects:repository-selected\n * - industry-theme.local-projects:repository-opened\n *\n * Events Listened:\n * - industry-theme.local-projects:filter\n * - industry-theme.local-projects:select-repository\n * - industry-theme.local-projects:open-repository\n */\nexport const LocalProjectsPanel: React.FC<PanelComponentProps> = (props) => {\n return <LocalProjectsPanelContent {...props} />;\n};\n\n/**\n * LocalProjectsPanelPreview - Compact preview for panel tabs/thumbnails\n */\nexport const LocalProjectsPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <div\n style={{\n width: '16px',\n height: '16px',\n borderRadius: '2px',\n backgroundColor: `${theme.colors.success || '#10b981'}40`,\n }}\n />\n <span>Local Projects</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Browse your cloned repositories sorted by recent activity\n </div>\n </div>\n );\n};\n\n// Re-export types and components\nexport type { LocalProjectCardProps, RepositoryAvatarProps } from './types';\nexport { LocalProjectCard } from './LocalProjectCard';\nexport { RepositoryAvatar } from './RepositoryAvatar';\n","import React, { useMemo, useEffect, useCallback, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Folder, Home, Check } from 'lucide-react';\nimport type { AlexandriaEntry } from '@principal-ai/alexandria-core-library/types';\nimport type { PanelComponentProps } from '../../types';\nimport { LocalProjectCard } from '../LocalProjectsPanel/LocalProjectCard';\nimport '../LocalProjectsPanel/LocalProjectsPanel.css';\nimport type { Workspace, WorkspaceRepositoriesPanelActions } from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.workspace-repositories';\n\n// Helper to create panel events\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * WorkspaceRepositoriesPanelContent - Internal component that uses theme\n */\nconst WorkspaceRepositoriesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [repositoryLocations, setRepositoryLocations] = React.useState<Map<string, boolean>>(\n new Map()\n );\n const [copiedPath, setCopiedPath] = useState(false);\n const [isPathHovered, setIsPathHovered] = useState(false);\n\n // Get extended actions\n const panelActions = actions as WorkspaceRepositoriesPanelActions;\n\n // Get data from context using framework's getSlice pattern\n const workspaceSlice = context.getSlice<Workspace>('workspace');\n const repositoriesSlice = context.getSlice<AlexandriaEntry[]>('workspaceRepositories');\n const userHomePathSlice = context.getSlice<string>('userHomePath');\n\n const workspace = workspaceSlice?.data ?? null;\n const userHomePath = userHomePathSlice?.data ?? undefined;\n const isLoading = workspaceSlice?.loading || repositoriesSlice?.loading || false;\n\n // Sort repositories alphabetically by name\n const sortedRepositories = useMemo(() => {\n const repos = repositoriesSlice?.data ?? [];\n return [...repos].sort((a, b) => a.name.localeCompare(b.name));\n }, [repositoriesSlice?.data]);\n\n // Check locations for all repositories\n useEffect(() => {\n const checkLocations = async () => {\n if (!workspace?.id || !panelActions.isRepositoryInWorkspaceDirectory || !sortedRepositories.length) {\n return;\n }\n\n const locationMap = new Map<string, boolean>();\n await Promise.all(\n sortedRepositories.map(async (repo) => {\n try {\n const isInWorkspace = await panelActions.isRepositoryInWorkspaceDirectory!(repo, workspace.id);\n if (isInWorkspace !== null) {\n locationMap.set(repo.path, isInWorkspace);\n }\n } catch (error) {\n console.error(`Failed to check location for ${repo.name}:`, error);\n }\n })\n );\n setRepositoryLocations(locationMap);\n };\n\n checkLocations();\n }, [workspace, sortedRepositories, panelActions]);\n\n // Group repositories by location\n const { repositoriesInWorkspace, repositoriesOutsideWorkspace } = useMemo(() => {\n const inWorkspace: AlexandriaEntry[] = [];\n const outsideWorkspace: AlexandriaEntry[] = [];\n\n sortedRepositories.forEach((repo) => {\n const isInWorkspace = repositoryLocations.get(repo.path);\n if (isInWorkspace === true) {\n inWorkspace.push(repo);\n } else if (isInWorkspace === false) {\n outsideWorkspace.push(repo);\n }\n });\n\n return { repositoriesInWorkspace: inWorkspace, repositoriesOutsideWorkspace: outsideWorkspace };\n }, [sortedRepositories, repositoryLocations]);\n\n // Event handlers\n const handleSelectRepository = useCallback(\n (repository: AlexandriaEntry) => {\n events.emit(\n createPanelEvent('repository:selected', {\n repositoryId: repository.github?.id || repository.name,\n repository,\n repositoryPath: repository.path,\n })\n );\n },\n [events]\n );\n\n const handleOpenRepository = useCallback(\n (repository: AlexandriaEntry) => {\n events.emit(\n createPanelEvent('repository:opened', {\n repositoryId: repository.github?.id || repository.name,\n repository,\n })\n );\n },\n [events]\n );\n\n const handleRemoveFromWorkspace = useCallback(\n async (repository: AlexandriaEntry) => {\n if (!workspace?.id || !panelActions.removeRepositoryFromWorkspace) return;\n try {\n const repositoryId = repository.github?.id || repository.name;\n await panelActions.removeRepositoryFromWorkspace(repositoryId, workspace.id);\n } catch (error) {\n console.error('Failed to remove repository from workspace:', error);\n alert(\n `Failed to remove repository: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n [workspace, panelActions]\n );\n\n const handleMoveToWorkspace = useCallback(\n async (repository: AlexandriaEntry) => {\n if (!workspace?.id || !panelActions.moveRepositoryToWorkspaceDirectory) return;\n try {\n await panelActions.moveRepositoryToWorkspaceDirectory(repository, workspace.id);\n setRepositoryLocations((prev) => new Map(prev).set(repository.path, true));\n } catch (error) {\n console.error('Failed to move repository:', error);\n alert(\n `Failed to move repository: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n [workspace, panelActions]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ repositoryPath: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const path = event.payload?.repositoryPath;\n if (path) {\n const repository = sortedRepositories.find((r) => r.path === path);\n if (repository) {\n handleSelectRepository(repository);\n }\n }\n }),\n\n events.on<{ repositoryPath: string }>(`${PANEL_ID}:open-repository`, (event) => {\n const path = event.payload?.repositoryPath;\n if (path) {\n const repository = sortedRepositories.find((r) => r.path === path);\n if (repository) {\n handleOpenRepository(repository);\n }\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, sortedRepositories, handleSelectRepository, handleOpenRepository]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // No workspace selected\n if (!workspace) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <Folder\n size={48}\n style={{\n color: theme.colors.textSecondary,\n opacity: 0.5,\n }}\n />\n <div>\n <h3\n style={{\n margin: '0 0 8px 0',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n No Workspace Selected\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a workspace to see its repositories.\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={contentContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Folder 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 fontFamily: theme.fonts.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {workspace.name}\n </span>\n {sortedRepositories.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.background,\n flexShrink: 0,\n }}\n >\n {sortedRepositories.length}\n </span>\n )}\n {/* Home directory button */}\n {workspace.suggestedClonePath && (\n <button\n type=\"button\"\n onClick={async () => {\n try {\n await navigator.clipboard.writeText(workspace.suggestedClonePath!);\n setCopiedPath(true);\n setTimeout(() => setCopiedPath(false), 2000);\n } catch (err) {\n console.error('Failed to copy path:', err);\n }\n }}\n onMouseEnter={() => setIsPathHovered(true)}\n onMouseLeave={() => setIsPathHovered(false)}\n title={copiedPath ? 'Copied!' : `Click to copy: ${workspace.suggestedClonePath}`}\n style={{\n marginLeft: 'auto',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 8px',\n borderRadius: '4px',\n border: `1px solid ${copiedPath ? theme.colors.success || '#10b981' : theme.colors.border}`,\n backgroundColor: copiedPath\n ? `${theme.colors.success || '#10b981'}15`\n : theme.colors.backgroundTertiary,\n color: copiedPath\n ? theme.colors.success || '#10b981'\n : theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n minWidth: 0,\n maxWidth: isPathHovered || copiedPath ? '200px' : '32px',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {copiedPath ? <Check size={14} style={{ flexShrink: 0 }} /> : <Home size={14} style={{ flexShrink: 0 }} />}\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.monospace,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n opacity: isPathHovered || copiedPath ? 1 : 0,\n width: isPathHovered || copiedPath ? 'auto' : 0,\n transition: 'opacity 0.15s ease',\n }}\n >\n {copiedPath ? 'Copied!' : workspace.suggestedClonePath}\n </span>\n </button>\n )}\n </div>\n\n {/* Workspace description */}\n {workspace.description && (\n <div style={{ padding: '8px 16px' }}>\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n {workspace.description}\n </p>\n </div>\n )}\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '8px 16px',\n }}\n >\n {/* Empty state */}\n {sortedRepositories.length === 0 && !isLoading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>No repositories in this workspace.</p>\n </div>\n )}\n\n {/* Repositories in workspace directory */}\n {repositoriesInWorkspace.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <h4\n style={{\n margin: 0,\n paddingBottom: '4px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n In Workspace Directory\n </h4>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {repositoriesInWorkspace.map((repository) => (\n <LocalProjectCard\n key={repository.path}\n entry={repository}\n actionMode=\"workspace\"\n isInWorkspaceDirectory={true}\n workspacePath={workspace.suggestedClonePath}\n userHomePath={userHomePath}\n onSelect={handleSelectRepository}\n onOpen={handleOpenRepository}\n onRemoveFromWorkspace={handleRemoveFromWorkspace}\n onMoveToWorkspace={handleMoveToWorkspace}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Repositories outside workspace directory */}\n {repositoriesOutsideWorkspace.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <h4\n style={{\n margin: 0,\n paddingBottom: '4px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n Outside Workspace Directory\n </h4>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {repositoriesOutsideWorkspace.map((repository) => (\n <LocalProjectCard\n key={repository.path}\n entry={repository}\n actionMode=\"workspace\"\n isInWorkspaceDirectory={false}\n workspacePath={workspace.suggestedClonePath}\n userHomePath={userHomePath}\n onSelect={handleSelectRepository}\n onOpen={handleOpenRepository}\n onRemoveFromWorkspace={handleRemoveFromWorkspace}\n onMoveToWorkspace={handleMoveToWorkspace}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * WorkspaceRepositoriesPanel - Workspace repository management panel\n *\n * Features:\n * - List all repositories in a workspace\n * - Group by in/outside workspace directory\n * - Move repositories to workspace directory\n * - Remove repositories from workspace\n *\n * Data Slices:\n * - workspace: Workspace object\n * - workspaceRepositories: AlexandriaEntry[]\n *\n * Events Emitted:\n * - repository:selected\n * - repository:opened\n */\nexport const WorkspaceRepositoriesPanel: React.FC<PanelComponentProps> = (props) => {\n return <WorkspaceRepositoriesPanelContent {...props} />;\n};\n\n// Re-export types\nexport type {\n Workspace,\n WorkspaceRepositoriesPanelActions,\n RepositorySelectedPayload,\n RepositoryOpenedPayload,\n} from './types';\n","import React, { useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { DoorClosed, Edit2, Check, X, ExternalLink, Trash2, Lock } from 'lucide-react';\nimport type { WorkspaceCardProps } from './types';\n\n/**\n * WorkspaceCard - Displays a single workspace with actions\n */\nexport const WorkspaceCard: React.FC<WorkspaceCardProps> = ({\n workspace,\n isSelected = false,\n isDefault = false,\n onClick,\n onOpen,\n onDelete,\n onUpdateName,\n themeColor,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n const [editedName, setEditedName] = useState(workspace.name);\n const [isSaving, setIsSaving] = useState(false);\n\n // Use theme color or fallback to primary\n const iconColor = themeColor || theme.colors.primary;\n\n const handleStartEdit = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsEditing(true);\n setEditedName(workspace.name);\n };\n\n const handleSave = async (e?: React.MouseEvent) => {\n if (e) e.stopPropagation();\n\n const trimmedName = editedName.trim();\n if (!trimmedName || trimmedName === workspace.name) {\n setIsEditing(false);\n setEditedName(workspace.name);\n return;\n }\n\n if (!onUpdateName) {\n setIsEditing(false);\n return;\n }\n\n try {\n setIsSaving(true);\n await onUpdateName(workspace.id, trimmedName);\n setIsEditing(false);\n } catch (error) {\n console.error('Failed to update workspace name:', error);\n setEditedName(workspace.name);\n } finally {\n setIsSaving(false);\n }\n };\n\n const handleCancel = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation();\n setIsEditing(false);\n setEditedName(workspace.name);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n handleCancel();\n }\n };\n\n const handleClick = () => {\n if (!isEditing) {\n onClick?.(workspace);\n }\n };\n\n const handleDoubleClick = () => {\n if (!isEditing) {\n onOpen?.(workspace);\n }\n };\n\n const handleOpenClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onOpen?.(workspace);\n };\n\n const handleDeleteClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(workspace);\n };\n\n const cardStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n padding: '12px',\n borderRadius: '6px',\n backgroundColor: isSelected\n ? theme.colors.backgroundTertiary\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${\n isSelected\n ? theme.colors.primary || theme.colors.border\n : isHovered\n ? theme.colors.border\n : 'transparent'\n }`,\n cursor: isEditing ? 'default' : 'pointer',\n transition: 'all 0.15s ease',\n };\n\n const headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n };\n\n const actionButtonStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n flex: 1,\n height: '24px',\n padding: '0 8px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n transition: 'all 0.15s ease',\n };\n\n return (\n <div\n style={cardStyle}\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Icon */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '48px',\n height: '48px',\n borderRadius: '6px',\n backgroundColor: `color-mix(in srgb, ${iconColor} 12%, transparent)`,\n color: iconColor,\n flexShrink: 0,\n }}\n >\n {workspace.icon ? (\n <span style={{ fontSize: `${theme.fontSizes[4]}px` }}>{workspace.icon}</span>\n ) : (\n <DoorClosed size={28} />\n )}\n </div>\n\n {/* Content column */}\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n minWidth: 0,\n }}\n >\n {/* Header row */}\n <div style={headerStyle}>\n {isEditing ? (\n <>\n <input\n type=\"text\"\n value={editedName}\n onChange={(e) => setEditedName(e.target.value)}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n autoFocus\n disabled={isSaving}\n style={{\n flex: 1,\n padding: '4px 8px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n <button\n onClick={handleSave}\n disabled={isSaving}\n title=\"Save (Enter)\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: theme.colors.success,\n color: theme.colors.background,\n cursor: isSaving ? 'not-allowed' : 'pointer',\n opacity: isSaving ? 0.6 : 1,\n transition: 'opacity 0.15s ease',\n }}\n >\n <Check size={16} />\n </button>\n <button\n onClick={handleCancel}\n disabled={isSaving}\n title=\"Cancel (Esc)\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: isSaving ? 'not-allowed' : 'pointer',\n opacity: isSaving ? 0.6 : 1,\n transition: 'opacity 0.15s ease',\n }}\n >\n <X size={16} />\n </button>\n </>\n ) : (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {workspace.name}\n </span>\n {/* Private badge */}\n {workspace.isPrivate && (\n <span title=\"Private workspace\">\n <Lock\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n {/* Spacer to push default badge right */}\n <span style={{ flex: 1 }} />\n {isDefault && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontWeight: 400,\n flexShrink: 0,\n }}\n >\n Default\n </span>\n )}\n </>\n )}\n </div>\n\n {/* Description row with action buttons */}\n {!isEditing && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n minHeight: '24px',\n position: 'relative',\n }}\n >\n {/* Description - hidden when hovered */}\n <div\n style={{\n flex: 1,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n lineHeight: 1.4,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n opacity: isHovered ? 0 : 1,\n transition: 'opacity 0.15s ease',\n }}\n title={workspace.description}\n >\n {workspace.description || '\\u00A0'}\n </div>\n\n {/* Action buttons - cover full width when hovered */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n transition: 'opacity 0.15s ease',\n }}\n >\n {onOpen && (\n <button\n onClick={handleOpenClick}\n title=\"Open workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <ExternalLink size={14} />\n <span>Open</span>\n </button>\n )}\n {onUpdateName && (\n <button\n onClick={handleStartEdit}\n title=\"Edit workspace name\"\n style={actionButtonStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <Edit2 size={14} />\n <span>Edit</span>\n </button>\n )}\n {onDelete && (\n <button\n onClick={handleDeleteClick}\n title=\"Delete workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${theme.colors.error}15`;\n e.currentTarget.style.color = theme.colors.error;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <Trash2 size={14} />\n <span>Delete</span>\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Search, Plus, X, Layers } from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport { WorkspaceCard } from './WorkspaceCard';\nimport type {\n Workspace,\n WorkspacesSlice,\n WorkspacesListPanelActions,\n} from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.workspaces-list';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * WorkspacesListPanelContent - Internal component that uses theme\n */\nconst WorkspacesListPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [searchQuery, setSearchQuery] = useState('');\n const [showSearchBox, setShowSearchBox] = useState(false);\n const [selectedWorkspaceId, setSelectedWorkspaceId] = useState<string | null>(null);\n const [workspaceRepositories, setWorkspaceRepositories] = useState<Map<string, string[]>>(\n new Map()\n );\n\n // Get extended actions\n const panelActions = actions as WorkspacesListPanelActions;\n\n // Get workspaces from context slice\n const workspacesSlice = context.getSlice<WorkspacesSlice>('workspaces');\n const workspaces = useMemo(\n () => workspacesSlice?.data?.workspaces || [],\n [workspacesSlice?.data?.workspaces]\n );\n const defaultWorkspaceId = workspacesSlice?.data?.defaultWorkspaceId ?? null;\n const loading = workspacesSlice?.loading ?? false;\n\n // Load repository names for search functionality\n useEffect(() => {\n const loadRepositories = async () => {\n if (!panelActions.getWorkspaceRepositories || workspaces.length === 0) {\n return;\n }\n\n const repoMap = new Map<string, string[]>();\n await Promise.all(\n workspaces.map(async (workspace) => {\n try {\n const repos = await panelActions.getWorkspaceRepositories!(workspace.id);\n repoMap.set(workspace.id, repos.map((r) => r.name));\n } catch (error) {\n console.error(`Failed to load repos for workspace ${workspace.id}:`, error);\n repoMap.set(workspace.id, []);\n }\n })\n );\n setWorkspaceRepositories(repoMap);\n };\n\n loadRepositories();\n }, [workspaces, panelActions]);\n\n // Filter and sort workspaces\n const sortedWorkspaces = useMemo(() => {\n let filtered = workspaces;\n\n // Apply search filter\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase().trim();\n filtered = workspaces.filter((workspace) => {\n // Search by workspace name\n if (workspace.name.toLowerCase().includes(query)) {\n return true;\n }\n\n // Search by description\n if (workspace.description?.toLowerCase().includes(query)) {\n return true;\n }\n\n // Search by repository names in this workspace\n const repos = workspaceRepositories.get(workspace.id) || [];\n return repos.some((repoName) => repoName.toLowerCase().includes(query));\n });\n }\n\n // Sort: default workspace first, then by name alphabetically\n return [...filtered].sort((a, b) => {\n // Default workspace always first\n if (a.id === defaultWorkspaceId) return -1;\n if (b.id === defaultWorkspaceId) return 1;\n\n // Then sort alphabetically by name (case-insensitive)\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n }, [workspaces, defaultWorkspaceId, searchQuery, workspaceRepositories]);\n\n // Handle workspace selection\n const handleWorkspaceSelect = useCallback(\n (workspace: Workspace) => {\n setSelectedWorkspaceId(workspace.id);\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:selected`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n },\n [events]\n );\n\n // Handle workspace open\n const handleOpenWorkspace = useCallback(\n async (workspace: Workspace) => {\n if (!panelActions.openWorkspace) {\n console.warn('Open workspace action not available');\n return;\n }\n\n try {\n await panelActions.openWorkspace(workspace.id);\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:opened`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n } catch (error) {\n console.error('Failed to open workspace:', error);\n }\n },\n [panelActions, events]\n );\n\n // Handle workspace delete\n const handleDeleteWorkspace = useCallback(\n async (workspace: Workspace) => {\n if (!panelActions.deleteWorkspace) {\n console.warn('Delete workspace action not available');\n return;\n }\n\n // Confirm deletion\n const confirmed = window.confirm(\n `Are you sure you want to delete \"${workspace.name}\"? This action cannot be undone.`\n );\n\n if (!confirmed) return;\n\n try {\n await panelActions.deleteWorkspace(workspace.id);\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:deleted`, {\n workspaceId: workspace.id,\n })\n );\n\n // Refresh workspaces\n await context.refresh('workspace', 'workspaces');\n } catch (error) {\n console.error('Failed to delete workspace:', error);\n }\n },\n [panelActions, events, context]\n );\n\n // Handle workspace name update\n const handleUpdateWorkspaceName = useCallback(\n async (workspaceId: string, newName: string) => {\n if (!panelActions.updateWorkspace) {\n console.warn('Update workspace action not available');\n return;\n }\n\n await panelActions.updateWorkspace(workspaceId, { name: newName });\n\n // Refresh workspaces\n await context.refresh('workspace', 'workspaces');\n },\n [panelActions, context]\n );\n\n // Handle create workspace - emits event for host app to show modal\n const handleCreateWorkspace = useCallback(() => {\n // Emit event for host app to handle (e.g., show a modal)\n events.emit(\n createPanelEvent(`${PANEL_ID}:create-workspace-requested`, {})\n );\n }, [events]);\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n // Select workspace event from tools\n events.on<{ workspaceId: string }>(`${PANEL_ID}:select-workspace`, (event) => {\n const workspaceId = event.payload?.workspaceId;\n if (workspaceId) {\n const workspace = workspaces.find((w) => w.id === workspaceId);\n if (workspace) {\n handleWorkspaceSelect(workspace);\n }\n }\n }),\n\n // Open workspace event from tools\n events.on<{ workspaceId: string }>(`${PANEL_ID}:open-workspace`, (event) => {\n const workspaceId = event.payload?.workspaceId;\n if (workspaceId) {\n const workspace = workspaces.find((w) => w.id === workspaceId);\n if (workspace) {\n handleOpenWorkspace(workspace);\n }\n }\n }),\n\n // Create workspace event from tools\n events.on<{ name: string; description?: string }>(\n `${PANEL_ID}:create-workspace`,\n async (event) => {\n const { name, description } = event.payload || {};\n if (name && panelActions.createWorkspace) {\n try {\n const workspace = await panelActions.createWorkspace(name, { description });\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:created`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n await context.refresh('workspace', 'workspaces');\n } catch (error) {\n console.error('Failed to create workspace:', error);\n }\n }\n }\n ),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, workspaces, handleWorkspaceSelect, handleOpenWorkspace, panelActions, context]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // Loading state\n if (loading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading workspaces...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={contentContainerStyle}>\n {/* Header with search and create buttons */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Layers 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 fontFamily: theme.fonts.body,\n }}\n >\n Workspaces\n </span>\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n onClick={() => {\n setShowSearchBox(!showSearchBox);\n if (showSearchBox) {\n setSearchQuery('');\n }\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: showSearchBox\n ? theme.colors.primary\n : theme.colors.backgroundTertiary,\n color: showSearchBox ? theme.colors.background : theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Search workspaces\"\n >\n <Search size={16} />\n </button>\n <button\n onClick={handleCreateWorkspace}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Create new workspace\"\n >\n <Plus size={16} />\n </button>\n </div>\n </div>\n\n {/* Search box */}\n {showSearchBox && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 16px',\n }}\n >\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search by workspace or repository name...\"\n autoFocus\n style={{\n flex: 1,\n padding: '8px 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 fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => setSearchQuery('')}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Clear search\"\n >\n <X size={16} />\n </button>\n )}\n </div>\n )}\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {/* Workspace list */}\n {sortedWorkspaces.map((workspace) => (\n <WorkspaceCard\n key={workspace.id}\n workspace={workspace}\n isSelected={workspace.id === selectedWorkspaceId}\n isDefault={workspace.id === defaultWorkspaceId}\n onClick={handleWorkspaceSelect}\n onOpen={panelActions.openWorkspace ? handleOpenWorkspace : undefined}\n onDelete={panelActions.deleteWorkspace ? handleDeleteWorkspace : undefined}\n onUpdateName={panelActions.updateWorkspace ? handleUpdateWorkspaceName : undefined}\n />\n ))}\n\n {/* No results message */}\n {sortedWorkspaces.length === 0 && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>\n {searchQuery.trim()\n ? `No workspaces found matching \"${searchQuery}\"`\n : 'No workspaces found.'}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * WorkspacesListPanel - Browse and manage workspaces\n *\n * Features:\n * - List all workspaces with default highlighted\n * - Search/filter by workspace name or repository names\n * - Create new workspaces\n * - Edit workspace names inline\n * - Delete workspaces\n * - Open workspaces in new windows\n *\n * Data Slices:\n * - workspaces: WorkspacesSlice object\n *\n * Events Emitted:\n * - industry-theme.workspaces-list:workspace:selected\n * - industry-theme.workspaces-list:workspace:opened\n * - industry-theme.workspaces-list:workspace:created\n * - industry-theme.workspaces-list:workspace:deleted\n *\n * Events Listened:\n * - industry-theme.workspaces-list:select-workspace\n * - industry-theme.workspaces-list:open-workspace\n * - industry-theme.workspaces-list:create-workspace\n */\nexport const WorkspacesListPanel: React.FC<PanelComponentProps> = (props) => {\n return <WorkspacesListPanelContent {...props} />;\n};\n\n/**\n * WorkspacesListPanelPreview - Compact preview for panel tabs/thumbnails\n */\nexport const WorkspacesListPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <Layers size={16} style={{ color: theme.colors.primary }} />\n <span>Workspaces</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Browse and manage your workspaces\n </div>\n </div>\n );\n};\n\n// Re-export components and types\nexport { WorkspaceCard } from './WorkspaceCard';\nexport type {\n Workspace,\n WorkspacesSlice,\n WorkspacesListPanelActions,\n WorkspaceCardProps,\n WorkspaceSelectedPayload,\n WorkspaceOpenedPayload,\n WorkspaceCreatedPayload,\n WorkspaceDeletedPayload,\n} from './types';\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Folder,\n Loader2,\n Trash2,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type { GitHubRepository } from '../shared/github-types';\nimport type {\n Workspace,\n WorkspaceCollectionSlice,\n WorkspaceRepositoriesSlice,\n WorkspaceCollectionPanelActions,\n} from './types';\nimport { RepositoryAvatar } from '../LocalProjectsPanel/RepositoryAvatar';\n\ntype SortField = 'name' | 'updated';\n\nexport interface WorkspaceCollectionPanelProps extends PanelComponentProps {\n selectedRepository?: string; // full_name like \"owner/repo\"\n}\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.workspace-collection';\n\n// Helper to create panel events\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * WorkspaceCollectionRepositoryCard - Displays a repository in a workspace collection\n */\ninterface WorkspaceCollectionRepositoryCardProps {\n repository: GitHubRepository;\n isSelected?: boolean;\n onSelect?: (repo: GitHubRepository) => void;\n onNavigate?: (repo: GitHubRepository) => void;\n onRemove?: (repo: GitHubRepository) => void;\n}\n\nconst WorkspaceCollectionRepositoryCard: React.FC<WorkspaceCollectionRepositoryCardProps> = ({\n repository,\n isSelected = false,\n onSelect,\n onNavigate,\n onRemove,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n const handleClick = useCallback(() => {\n if (onSelect) {\n onSelect(repository);\n }\n }, [onSelect, repository]);\n\n const handleDoubleClick = useCallback(() => {\n if (onNavigate) {\n onNavigate(repository);\n }\n }, [onNavigate, repository]);\n\n const handleRemove = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onRemove) {\n onRemove(repository);\n }\n },\n [onRemove, repository]\n );\n\n // Format relative time\n const getRelativeTime = (dateString: 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 return (\n <div\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isSelected\n ? `${theme.colors.primary}15`\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${isSelected ? theme.colors.primary : 'transparent'}`,\n cursor: onSelect ? 'pointer' : 'default',\n transition: 'background-color 0.15s, border-color 0.15s',\n }}\n >\n {/* Avatar - show original owner for forks */}\n <RepositoryAvatar\n owner={repository.fork && repository.parent ? repository.parent.owner.login : repository.owner.login}\n customAvatarUrl={repository.fork && repository.parent ? repository.parent.owner.avatar_url : repository.owner.avatar_url}\n size={40}\n />\n\n {/* Content */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header row: name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '4px',\n }}\n >\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={repository.full_name}\n >\n {repository.name}\n </span>\n </div>\n\n {/* Owner - show \"forked by\" for forks */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginBottom: '4px',\n }}\n >\n {repository.fork && repository.parent ? (\n <>\n {repository.parent.owner.login}\n <span style={{ opacity: 0.7 }}> · forked by </span>\n {repository.owner.login}\n </>\n ) : (\n repository.owner.login\n )}\n </div>\n\n {/* Description */}\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n marginBottom: '8px',\n }}\n >\n {repository.description}\n </div>\n )}\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n }}\n >\n {/* Language */}\n {repository.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: getLanguageColor(repository.language),\n }}\n />\n {repository.language}\n </span>\n )}\n\n {/* Updated time */}\n <span>Updated {getRelativeTime(repository.pushed_at || repository.updated_at)}</span>\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n opacity: isHovered || isSelected ? 1 : 0,\n transition: 'opacity 0.15s',\n }}\n >\n {/* Remove from workspace button */}\n {onRemove && (\n <button\n type=\"button\"\n onClick={handleRemove}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n }}\n title=\"Remove from workspace\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${theme.colors.error || '#ef4444'}20`;\n e.currentTarget.style.color = theme.colors.error || '#ef4444';\n e.currentTarget.style.borderColor = theme.colors.error || '#ef4444';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n e.currentTarget.style.borderColor = theme.colors.border;\n }}\n >\n <Trash2 size={16} />\n </button>\n )}\n </div>\n </div>\n );\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: '#3572A5',\n Rust: '#dea584',\n Go: '#00ADD8',\n Java: '#b07219',\n Ruby: '#701516',\n PHP: '#4F5D95',\n 'C++': '#f34b7d',\n C: '#555555',\n 'C#': '#178600',\n Swift: '#F05138',\n Kotlin: '#A97BFF',\n Shell: '#89e051',\n HTML: '#e34c26',\n CSS: '#563d7c',\n Vue: '#41b883',\n Svelte: '#ff3e00',\n };\n return colors[language] || '#8b949e';\n}\n\n/**\n * WorkspaceCollectionPanelContent - Internal component that uses theme\n */\nconst WorkspaceCollectionPanelContent: React.FC<WorkspaceCollectionPanelProps> = ({\n context,\n actions,\n events,\n selectedRepository,\n}) => {\n const { theme } = useTheme();\n const [selectedRepo, setSelectedRepo] = useState<GitHubRepository | null>(null);\n const [sortField, setSortField] = useState<SortField>('name');\n\n // Get extended actions\n const panelActions = actions as WorkspaceCollectionPanelActions;\n\n // Get data from context using framework's getSlice pattern\n const workspaceSlice = context.getSlice<WorkspaceCollectionSlice>('workspace');\n const repositoriesSlice = context.getSlice<WorkspaceRepositoriesSlice>('workspaceRepositories');\n\n const workspace = workspaceSlice?.data?.workspace ?? null;\n const repositories = repositoriesSlice?.data?.repositories ?? [];\n const isLoading = workspaceSlice?.loading || repositoriesSlice?.loading || false;\n const error = workspaceSlice?.data?.error || repositoriesSlice?.data?.error;\n\n // Sync selectedRepository prop with internal state\n useEffect(() => {\n if (selectedRepository && repositories.length > 0) {\n const repo = repositories.find(r => r.full_name === selectedRepository);\n if (repo) {\n setSelectedRepo(repo);\n }\n }\n }, [selectedRepository, repositories]);\n\n // Listen for repository:selected events to sync selection\n useEffect(() => {\n const unsubscribe = events.on('repository:selected', (event) => {\n const payload = event.payload as { repository?: { id?: number; full_name?: string } };\n if (payload?.repository?.full_name && repositories.length > 0) {\n const repo = repositories.find(r => r.full_name === payload.repository?.full_name);\n if (repo) {\n setSelectedRepo(repo);\n }\n }\n });\n\n return () => unsubscribe();\n }, [events, repositories]);\n\n // Toggle sort between name and updated\n const toggleSort = () => {\n setSortField(sortField === 'name' ? 'updated' : 'name');\n };\n\n // Sort repositories\n const sortedRepositories = useMemo(() => {\n return [...repositories].sort((a, b) => {\n if (sortField === 'name') {\n return a.name.localeCompare(b.name);\n } else {\n // Sort by updated (most recent first)\n const aTime = new Date(a.pushed_at || a.updated_at || 0).getTime();\n const bTime = new Date(b.pushed_at || b.updated_at || 0).getTime();\n return bTime - aTime;\n }\n });\n }, [repositories, sortField]);\n\n // Event handlers\n const handleSelectRepository = useCallback(\n (repository: GitHubRepository) => {\n setSelectedRepo(repository);\n events.emit(\n createPanelEvent('repository:selected', {\n repositoryKey: repository.full_name,\n repository,\n })\n );\n // Also call preview action if available\n if (panelActions.previewRepository) {\n panelActions.previewRepository(repository);\n }\n },\n [events, panelActions]\n );\n\n const handleNavigateRepository = useCallback(\n (repository: GitHubRepository) => {\n events.emit(\n createPanelEvent('repository:navigate', {\n owner: repository.owner.login,\n repo: repository.name,\n repository,\n })\n );\n if (panelActions.navigateToRepository) {\n panelActions.navigateToRepository(repository.owner.login, repository.name);\n }\n },\n [events, panelActions]\n );\n\n const handleRemoveRepository = useCallback(\n async (repository: GitHubRepository) => {\n if (!workspace?.id || !panelActions.removeRepositoryFromWorkspace) return;\n\n try {\n await panelActions.removeRepositoryFromWorkspace(repository.full_name, workspace.id);\n events.emit(\n createPanelEvent('repository:removed', {\n repositoryKey: repository.full_name,\n workspaceId: workspace.id,\n })\n );\n // Clear selection if removed repo was selected\n if (selectedRepo?.id === repository.id) {\n setSelectedRepo(null);\n }\n } catch (err) {\n console.error('Failed to remove repository from workspace:', err);\n }\n },\n [workspace, panelActions, events, selectedRepo]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ repositoryKey: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const key = event.payload?.repositoryKey;\n if (key) {\n const repository = repositories.find(\n (r) => r.full_name === key || r.name === key\n );\n if (repository) {\n handleSelectRepository(repository);\n }\n }\n }),\n\n events.on<{ repositoryKey: string }>(`${PANEL_ID}:navigate-repository`, (event) => {\n const key = event.payload?.repositoryKey;\n if (key) {\n const repository = repositories.find(\n (r) => r.full_name === key || r.name === key\n );\n if (repository) {\n handleNavigateRepository(repository);\n }\n }\n }),\n\n events.on<{ repositoryKey: string }>(`${PANEL_ID}:remove-repository`, (event) => {\n const key = event.payload?.repositoryKey;\n if (key) {\n const repository = repositories.find(\n (r) => r.full_name === key || r.name === key\n );\n if (repository) {\n void handleRemoveRepository(repository);\n }\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, repositories, handleSelectRepository, handleNavigateRepository, handleRemoveRepository]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // No workspace selected\n if (!workspace) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <Folder\n size={48}\n style={{\n color: theme.colors.textSecondary,\n opacity: 0.5,\n }}\n />\n <div>\n <h3\n style={{\n margin: '0 0 8px 0',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n No Workspace Selected\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a workspace to see its repositories.\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // Loading state\n if (isLoading && repositories.length === 0) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n }}\n >\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={contentContainerStyle}>\n {/* Header with repository count and sort toggle */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Folder 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 fontFamily: theme.fonts.body,\n }}\n >\n Repositories\n </span>\n {repositories.length > 0 && (\n <>\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.background,\n }}\n >\n {repositories.length}\n </span>\n <button\n onClick={toggleSort}\n style={{\n marginLeft: 'auto',\n padding: '4px 10px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n background: theme.colors.background,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {sortField === 'name' ? 'A-Z' : 'Recent'}\n </button>\n </>\n )}\n </div>\n\n {/* Error banner */}\n {error && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 14px',\n margin: '8px 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error || '#ef4444'}20`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <span>{error}</span>\n </div>\n )}\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {/* Empty state */}\n {repositories.length === 0 && !isLoading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Folder\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>No repositories in this workspace.</p>\n <p\n style={{\n margin: '8px 0 0 0',\n fontSize: `${theme.fontSizes[0]}px`,\n }}\n >\n Add repositories to organize your projects.\n </p>\n </div>\n )}\n\n {/* Repository list */}\n {sortedRepositories.map((repository) => (\n <WorkspaceCollectionRepositoryCard\n key={repository.id}\n repository={repository}\n isSelected={selectedRepo?.id === repository.id}\n onSelect={handleSelectRepository}\n onNavigate={panelActions.navigateToRepository ? handleNavigateRepository : undefined}\n onRemove={panelActions.removeRepositoryFromWorkspace ? handleRemoveRepository : undefined}\n />\n ))}\n </div>\n </div>\n );\n};\n\n/**\n * WorkspaceCollectionPanel - Browser-based workspace repository management panel\n *\n * Props:\n * - selectedRepository: Full name of the selected repo (e.g., \"owner/repo\")\n *\n * Features:\n * - List all repositories in a workspace\n * - Toggle between name (A-Z) and recently updated sorting\n * - Syncs selection with selectedRepository prop and repository:selected events\n * - Navigate to repository pages\n * - Remove repositories from workspace\n *\n * Data Slices:\n * - workspace: WorkspaceCollectionSlice\n * - workspaceRepositories: WorkspaceRepositoriesSlice\n *\n * Events Emitted:\n * - repository:selected\n * - repository:navigate\n * - repository:removed\n */\nexport const WorkspaceCollectionPanel: React.FC<WorkspaceCollectionPanelProps> = (props) => {\n return <WorkspaceCollectionPanelContent {...props} />;\n};\n\n/**\n * Preview component for panel tabs/thumbnails\n */\nexport const WorkspaceCollectionPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <Folder size={16} style={{ color: theme.colors.primary }} />\n <span>Workspace Collection</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Repositories in your workspace\n </div>\n </div>\n );\n};\n\n// Re-export types\nexport type {\n Workspace,\n WorkspaceCollectionSlice,\n WorkspaceRepositoriesSlice,\n WorkspaceCollectionPanelActions,\n RepositorySelectedPayload,\n RepositoryRemovedPayload,\n RepositoryNavigatePayload,\n} from './types';\n","import React, { useCallback, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n ExternalLink,\n GitFork,\n Lock,\n Star,\n FolderOpen,\n Download,\n Scale,\n} from 'lucide-react';\nimport type { GitHubRepository, LocalRepositoryReference } from './github-types';\nimport { RepositoryAvatar } from '../LocalProjectsPanel/RepositoryAvatar';\n\nexport interface GitHubRepositoryCardProps {\n /** GitHub repository data */\n repository: GitHubRepository;\n /** Local repository reference if cloned */\n localRepo?: LocalRepositoryReference;\n /** Callback when clone button is clicked */\n onClone?: (repo: GitHubRepository) => void;\n /** Callback when open button is clicked (for local repos) */\n onOpen?: (localPath: string) => void;\n /** Whether an operation is in progress */\n isLoading?: boolean;\n /** Whether the card is selected */\n isSelected?: boolean;\n /** Callback when card is clicked */\n onSelect?: (repo: GitHubRepository) => void;\n}\n\n/**\n * GitHubRepositoryCard - Displays a GitHub repository with clone/open actions\n *\n * Used by GitHubStarredPanel and GitHubProjectsPanel to display repositories\n * with consistent styling and behavior.\n */\nexport const GitHubRepositoryCard: React.FC<GitHubRepositoryCardProps> = ({\n repository,\n localRepo,\n onClone,\n onOpen,\n isLoading = false,\n isSelected = false,\n onSelect,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n const isCloned = Boolean(localRepo);\n\n const handleClone = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onClone && !isLoading) {\n onClone(repository);\n }\n },\n [onClone, repository, isLoading]\n );\n\n const handleOpen = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onOpen && localRepo && !isLoading) {\n onOpen(localRepo.path);\n }\n },\n [onOpen, localRepo, isLoading]\n );\n\n const handleClick = useCallback(() => {\n if (onSelect) {\n onSelect(repository);\n }\n }, [onSelect, repository]);\n\n const handleOpenOnGitHub = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n window.open(repository.html_url, '_blank', 'noopener,noreferrer');\n },\n [repository.html_url]\n );\n\n // Format relative time\n const getRelativeTime = (dateString: 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 return (\n <div\n onClick={handleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isSelected\n ? `${theme.colors.primary}15`\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${isSelected ? theme.colors.primary : 'transparent'}`,\n cursor: onSelect ? 'pointer' : 'default',\n transition: 'background-color 0.15s, border-color 0.15s',\n }}\n >\n {/* Avatar */}\n <RepositoryAvatar\n owner={repository.owner.login}\n customAvatarUrl={repository.owner.avatar_url}\n size={40}\n />\n\n {/* Content */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header row: name + badges */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '4px',\n }}\n >\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n color: isCloned ? '#10b981' : theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={repository.full_name}\n >\n {repository.name}\n </span>\n\n {/* Badges */}\n {repository.private && (\n <span title=\"Private repository\">\n <Lock\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n {repository.fork && (\n <span title=\"Forked repository\">\n <GitFork\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n </div>\n\n {/* Owner */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginBottom: '4px',\n }}\n >\n {repository.owner.login}\n </div>\n\n {/* Description */}\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n marginBottom: '8px',\n }}\n >\n {repository.description}\n </div>\n )}\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n }}\n >\n {/* Language */}\n {repository.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: getLanguageColor(repository.language),\n }}\n />\n {repository.language}\n </span>\n )}\n\n {/* Stars */}\n {repository.stargazers_count !== undefined &&\n repository.stargazers_count > 0 && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={12} />\n {formatNumber(repository.stargazers_count)}\n </span>\n )}\n\n {/* License */}\n {repository.license && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Scale size={12} />\n {repository.license}\n </span>\n )}\n\n {/* Updated time */}\n <span>Updated {getRelativeTime(repository.pushed_at || repository.updated_at)}</span>\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n }}\n >\n {/* Open on GitHub button */}\n <button\n type=\"button\"\n onClick={handleOpenOnGitHub}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n }}\n title=\"Open on GitHub\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <ExternalLink size={16} />\n </button>\n\n {/* Clone or Open button */}\n {isCloned ? (\n <button\n type=\"button\"\n onClick={handleOpen}\n disabled={isLoading || !onOpen}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#10b981',\n color: '#ffffff',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: isLoading || !onOpen ? 'not-allowed' : 'pointer',\n opacity: isLoading || !onOpen ? 0.6 : 1,\n transition: 'opacity 0.15s',\n }}\n title=\"Open in workspace\"\n >\n <FolderOpen size={14} />\n Open\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={handleClone}\n disabled={isLoading || !onClone}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: isLoading || !onClone ? 'not-allowed' : 'pointer',\n opacity: isLoading || !onClone ? 0.6 : 1,\n transition: 'opacity 0.15s',\n }}\n title=\"Clone repository\"\n >\n <Download size={14} />\n Clone\n </button>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Get color for programming language (simplified)\n */\nfunction getLanguageColor(language: string): string {\n const colors: Record<string, string> = {\n TypeScript: '#3178c6',\n JavaScript: '#f7df1e',\n Python: '#3572A5',\n Rust: '#dea584',\n Go: '#00ADD8',\n Java: '#b07219',\n Ruby: '#701516',\n PHP: '#4F5D95',\n 'C++': '#f34b7d',\n C: '#555555',\n 'C#': '#178600',\n Swift: '#F05138',\n Kotlin: '#A97BFF',\n Shell: '#89e051',\n HTML: '#e34c26',\n CSS: '#563d7c',\n Vue: '#41b883',\n Svelte: '#ff3e00',\n };\n return colors[language] || '#8b949e';\n}\n\n/**\n * Format large numbers with K/M suffixes\n */\nfunction formatNumber(num: number): string {\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}M`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}K`;\n }\n return num.toString();\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { AlertCircle, Loader2, RotateCcw, Search, Star } from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type { AlexandriaRepositoriesSlice } from '../LocalProjectsPanel/types';\nimport type { GitHubStarredSlice, GitHubStarredPanelActions } from './types';\nimport type { GitHubRepository, LocalRepositoryReference } from '../shared/github-types';\nimport { GitHubRepositoryCard } from '../shared/GitHubRepositoryCard';\n\nconst PANEL_ID = 'industry-theme.github-starred';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * GitHubStarredPanel - Browse and manage starred GitHub repositories\n */\nexport const GitHubStarredPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubStarredPanelContent {...props} />;\n};\n\nconst GitHubStarredPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState('');\n const [selectedRepo, setSelectedRepo] = useState<GitHubRepository | null>(null);\n\n // Get data from slices\n const starredSlice = context.getSlice<GitHubStarredSlice>('githubStarred');\n const localReposSlice = context.getSlice<AlexandriaRepositoriesSlice>('alexandriaRepositories');\n\n const repositories = useMemo(\n () => starredSlice?.data?.repositories || [],\n [starredSlice?.data?.repositories]\n );\n const loading = starredSlice?.loading ?? false;\n const error = starredSlice?.data?.error;\n\n const localRepos = useMemo(\n () => localReposSlice?.data?.repositories || [],\n [localReposSlice?.data?.repositories]\n );\n\n // Cast actions to panel-specific type\n const panelActions = actions as GitHubStarredPanelActions;\n\n // Create local repo lookup map\n const localRepoMap = useMemo(() => {\n const map = new Map<string, LocalRepositoryReference>();\n\n localRepos.forEach((entry) => {\n // Index by GitHub full_name (owner/repo format)\n if (entry.github?.id) {\n map.set(entry.github.id, {\n path: entry.path,\n name: entry.name,\n githubFullName: entry.github.id,\n githubId: entry.github.id,\n });\n }\n\n // Index by owner/name combination\n if (entry.github?.owner && entry.github?.name) {\n const fullName = `${entry.github.owner}/${entry.github.name}`;\n map.set(fullName, {\n path: entry.path,\n name: entry.name,\n githubFullName: fullName,\n });\n }\n\n // Index by repository name (fallback)\n map.set(entry.name, {\n path: entry.path,\n name: entry.name,\n });\n });\n\n return map;\n }, [localRepos]);\n\n // Filter repositories\n const normalizedFilter = filter.trim().toLowerCase();\n\n const filteredRepositories = useMemo(() => {\n if (!normalizedFilter) {\n return repositories;\n }\n\n return repositories.filter((repo) => {\n const haystack = [\n repo.name,\n repo.full_name,\n repo.owner?.login ?? '',\n repo.description ?? '',\n repo.language ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(normalizedFilter);\n });\n }, [repositories, normalizedFilter]);\n\n // Sort alphabetically by name\n const sortedRepositories = useMemo(() => {\n return [...filteredRepositories].sort((a, b) =>\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n );\n }, [filteredRepositories]);\n\n // Event handlers\n const handleClone = useCallback(\n async (repo: GitHubRepository) => {\n if (panelActions.cloneRepository) {\n await panelActions.cloneRepository(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-cloned`, {\n repository: repo,\n })\n );\n }\n },\n [panelActions, events]\n );\n\n const handleOpen = useCallback(\n async (localPath: string) => {\n if (panelActions.openRepository) {\n await panelActions.openRepository(localPath);\n }\n },\n [panelActions]\n );\n\n const handleSelect = useCallback(\n (repo: GitHubRepository) => {\n setSelectedRepo(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-selected`, { repository: repo })\n );\n },\n [events]\n );\n\n const handleRefresh = useCallback(async () => {\n if (panelActions.refreshStarred) {\n await panelActions.refreshStarred();\n }\n }, [panelActions]);\n\n // Subscribe to tool events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ filter: string }>(`${PANEL_ID}:filter`, (event) => {\n setFilter(event.payload?.filter || '');\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = repositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n handleSelect(repo);\n }\n }\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:clone-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = repositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n void handleClone(repo);\n }\n }\n }),\n ];\n\n return () => {\n unsubscribers.forEach((unsub) => unsub());\n };\n }, [events, repositories, handleSelect, handleClone]);\n\n // Base styles\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n // Loading state\n if (loading && repositories.length === 0) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n }}\n >\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading starred repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error && repositories.length === 0) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <AlertCircle\n size={32}\n style={{ color: theme.colors.error || '#ef4444' }}\n />\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 fontFamily: theme.fonts.body,\n }}\n >\n Unable to load repositories\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </p>\n </div>\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: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontWeight: theme.fontWeights.semibold,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n <RotateCcw size={16} />\n Try again\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={baseContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Star size={18} style={{ color: '#f59e0b' }} />\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Starred\n </span>\n {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.background,\n }}\n >\n {repositories.length}\n </span>\n )}\n </div>\n\n {/* Search bar */}\n <div style={{ position: 'relative', padding: '8px 16px' }}>\n <Search\n size={16}\n style={{\n position: 'absolute',\n top: '50%',\n left: '28px',\n transform: 'translateY(-50%)',\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n value={filter}\n placeholder=\"Filter starred repositories...\"\n onChange={(event) => setFilter(event.target.value)}\n style={{\n width: '100%',\n padding: '8px 12px 8px 36px',\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 fontFamily: theme.fonts.body,\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {/* Error banner (when we have data but also an error) */}\n {error && repositories.length > 0 && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 14px',\n margin: '0 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error || '#ef4444'}20`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n {/* Repository list */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {sortedRepositories.map((repo) => (\n <GitHubRepositoryCard\n key={repo.id}\n repository={repo}\n localRepo={localRepoMap.get(repo.full_name)}\n onClone={handleClone}\n onOpen={handleOpen}\n onSelect={handleSelect}\n isSelected={selectedRepo?.id === repo.id}\n />\n ))}\n\n {/* Empty state */}\n {sortedRepositories.length === 0 && repositories.length > 0 && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>No repositories match your filter.</p>\n </div>\n )}\n\n {/* No starred repos */}\n {repositories.length === 0 && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Star\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>\n You haven't starred any repositories yet.\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Preview component for panel tabs/thumbnails\n */\nexport const GitHubStarredPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <Star size={16} style={{ color: '#f59e0b' }} />\n <span>Starred Repositories</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Browse your starred GitHub repositories\n </div>\n </div>\n );\n};\n\nexport { GitHubRepositoryCard } from '../shared/GitHubRepositoryCard';\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n AlertCircle,\n Building2,\n ChevronDown,\n ChevronRight,\n FolderGit2,\n Loader2,\n RotateCcw,\n Search,\n User,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type { AlexandriaRepositoriesSlice } from '../LocalProjectsPanel/types';\nimport type { GitHubProjectsSlice, GitHubProjectsPanelActions } from './types';\nimport type { GitHubRepository, LocalRepositoryReference } from '../shared/github-types';\nimport { GitHubRepositoryCard } from '../shared/GitHubRepositoryCard';\n\nconst PANEL_ID = 'industry-theme.github-projects';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * GitHubProjectsPanel - Browse user's repositories and organization repositories\n */\nexport const GitHubProjectsPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubProjectsPanelContent {...props} />;\n};\n\nconst GitHubProjectsPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState('');\n const [collapsedSections, setCollapsedSections] = useState<Set<string>>(new Set());\n const [selectedRepo, setSelectedRepo] = useState<GitHubRepository | null>(null);\n\n // Get data from slices\n const projectsSlice = context.getSlice<GitHubProjectsSlice>('githubProjects');\n const localReposSlice = context.getSlice<AlexandriaRepositoriesSlice>('alexandriaRepositories');\n\n const userRepositories = useMemo(\n () => projectsSlice?.data?.userRepositories || [],\n [projectsSlice?.data?.userRepositories]\n );\n const organizations = useMemo(\n () => projectsSlice?.data?.organizations || [],\n [projectsSlice?.data?.organizations]\n );\n const orgRepositories = useMemo(\n () => projectsSlice?.data?.orgRepositories || {},\n [projectsSlice?.data?.orgRepositories]\n );\n const currentUser = projectsSlice?.data?.currentUser;\n const loading = projectsSlice?.loading ?? false;\n const error = projectsSlice?.data?.error;\n\n const localRepos = useMemo(\n () => localReposSlice?.data?.repositories || [],\n [localReposSlice?.data?.repositories]\n );\n\n // Cast actions to panel-specific type\n const panelActions = actions as GitHubProjectsPanelActions;\n\n // Create local repo lookup map\n const localRepoMap = useMemo(() => {\n const map = new Map<string, LocalRepositoryReference>();\n\n localRepos.forEach((entry) => {\n if (entry.github?.id) {\n map.set(entry.github.id, {\n path: entry.path,\n name: entry.name,\n githubFullName: entry.github.id,\n githubId: entry.github.id,\n });\n }\n\n if (entry.github?.owner && entry.github?.name) {\n const fullName = `${entry.github.owner}/${entry.github.name}`;\n map.set(fullName, {\n path: entry.path,\n name: entry.name,\n githubFullName: fullName,\n });\n }\n\n map.set(entry.name, {\n path: entry.path,\n name: entry.name,\n });\n });\n\n return map;\n }, [localRepos]);\n\n // Filter repositories\n const normalizedFilter = filter.trim().toLowerCase();\n\n const filterRepos = useCallback(\n (repos: GitHubRepository[]) => {\n if (!normalizedFilter) return repos;\n\n return repos.filter((repo) => {\n const haystack = [\n repo.name,\n repo.full_name,\n repo.owner?.login ?? '',\n repo.description ?? '',\n repo.language ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(normalizedFilter);\n });\n },\n [normalizedFilter]\n );\n\n const filteredUserRepos = useMemo(\n () => filterRepos(userRepositories),\n [filterRepos, userRepositories]\n );\n\n const filteredOrgRepos = useMemo(() => {\n const result: Record<string, GitHubRepository[]> = {};\n for (const [orgLogin, repos] of Object.entries(orgRepositories)) {\n if (!Array.isArray(repos)) continue;\n const filtered = filterRepos(repos);\n if (filtered.length > 0) {\n result[orgLogin] = filtered;\n }\n }\n return result;\n }, [filterRepos, orgRepositories]);\n\n // Get all repositories for tool lookups\n const allRepositories = useMemo(() => {\n const all = [...userRepositories];\n for (const repos of Object.values(orgRepositories)) {\n if (Array.isArray(repos)) {\n all.push(...repos);\n }\n }\n return all;\n }, [userRepositories, orgRepositories]);\n\n // Has any data\n const hasData =\n userRepositories.length > 0 ||\n organizations.length > 0 ||\n Object.keys(orgRepositories).length > 0;\n\n // Event handlers\n const handleClone = useCallback(\n async (repo: GitHubRepository) => {\n if (panelActions.cloneRepository) {\n await panelActions.cloneRepository(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-cloned`, {\n repository: repo,\n })\n );\n }\n },\n [panelActions, events]\n );\n\n const handleOpen = useCallback(\n async (localPath: string) => {\n if (panelActions.openRepository) {\n await panelActions.openRepository(localPath);\n }\n },\n [panelActions]\n );\n\n const handleSelect = useCallback(\n (repo: GitHubRepository) => {\n setSelectedRepo(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-selected`, { repository: repo })\n );\n },\n [events]\n );\n\n const handleRefresh = useCallback(async () => {\n if (panelActions.refreshProjects) {\n await panelActions.refreshProjects();\n }\n }, [panelActions]);\n\n const toggleSection = useCallback((owner: string) => {\n setCollapsedSections((prev) => {\n const next = new Set(prev);\n if (next.has(owner)) {\n next.delete(owner);\n } else {\n next.add(owner);\n }\n return next;\n });\n }, []);\n\n // Subscribe to tool events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ filter: string }>(`${PANEL_ID}:filter`, (event) => {\n setFilter(event.payload?.filter || '');\n }),\n events.on<{ owner: string }>(`${PANEL_ID}:toggle-section`, (event) => {\n const owner = event.payload?.owner;\n if (owner) {\n toggleSection(owner);\n }\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = allRepositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n handleSelect(repo);\n }\n }\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:clone-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = allRepositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n void handleClone(repo);\n }\n }\n }),\n ];\n\n return () => {\n unsubscribers.forEach((unsub) => unsub());\n };\n }, [events, allRepositories, toggleSection, handleSelect, handleClone]);\n\n // Base styles\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n // Loading state\n if (loading && !hasData) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n }}\n >\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading your repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error && !hasData) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <AlertCircle\n size={32}\n style={{ color: theme.colors.error || '#ef4444' }}\n />\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 fontFamily: theme.fonts.body,\n }}\n >\n Unable to load repositories\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </p>\n </div>\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: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontWeight: theme.fontWeights.semibold,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n <RotateCcw size={16} />\n Try again\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Render section header\n const renderSectionHeader = (\n owner: string,\n repoCount: number,\n icon: React.ReactNode,\n isOrg: boolean = false\n ) => {\n const isCollapsed = collapsedSections.has(owner);\n\n return (\n <button\n type=\"button\"\n onClick={() => toggleSection(owner)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 12px',\n backgroundColor: theme.colors.background,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n textAlign: 'left',\n marginBottom: isCollapsed ? '0' : '8px',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.background;\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {isCollapsed ? (\n <ChevronRight size={16} color={theme.colors.textSecondary} />\n ) : (\n <ChevronDown size={16} color={theme.colors.textSecondary} />\n )}\n {icon}\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n }}\n >\n {owner}\n </span>\n {isOrg && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary,\n padding: '2px 6px',\n borderRadius: '3px',\n }}\n >\n org\n </span>\n )}\n </div>\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n }}\n >\n {repoCount} {repoCount === 1 ? 'repo' : 'repos'}\n </span>\n </button>\n );\n };\n\n return (\n <div style={baseContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <FolderGit2 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 fontFamily: theme.fonts.body,\n }}\n >\n GitHub Projects\n </span>\n </div>\n\n {/* Search bar */}\n <div style={{ position: 'relative', padding: '8px 16px' }}>\n <Search\n size={16}\n style={{\n position: 'absolute',\n top: '50%',\n left: '28px',\n transform: 'translateY(-50%)',\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n value={filter}\n placeholder=\"Filter repositories...\"\n onChange={(event) => setFilter(event.target.value)}\n style={{\n width: '100%',\n padding: '8px 12px 8px 36px',\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 fontFamily: theme.fonts.body,\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {/* Error banner */}\n {error && hasData && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 14px',\n margin: '0 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error || '#ef4444'}20`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n {/* Repository sections */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n padding: '8px',\n }}\n >\n {/* User's repositories */}\n {filteredUserRepos.length > 0 && (\n <div>\n {renderSectionHeader(\n currentUser || 'Your Repositories',\n filteredUserRepos.length,\n <User size={16} color={theme.colors.textSecondary} />\n )}\n {!collapsedSections.has(currentUser || 'Your Repositories') && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {filteredUserRepos\n .sort((a, b) =>\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n )\n .map((repo) => (\n <GitHubRepositoryCard\n key={repo.id}\n repository={repo}\n localRepo={localRepoMap.get(repo.full_name)}\n onClone={handleClone}\n onOpen={handleOpen}\n onSelect={handleSelect}\n isSelected={selectedRepo?.id === repo.id}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Organization repositories */}\n {organizations.map((org) => {\n const repos = filteredOrgRepos[org.login];\n if (!repos || repos.length === 0) return null;\n\n return (\n <div key={org.id}>\n {renderSectionHeader(\n org.login,\n repos.length,\n <Building2 size={16} color={theme.colors.textSecondary} />,\n true\n )}\n {!collapsedSections.has(org.login) && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {repos\n .sort((a, b) =>\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n )\n .map((repo) => (\n <GitHubRepositoryCard\n key={repo.id}\n repository={repo}\n localRepo={localRepoMap.get(repo.full_name)}\n onClone={handleClone}\n onOpen={handleOpen}\n onSelect={handleSelect}\n isSelected={selectedRepo?.id === repo.id}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n\n {/* Empty state after filtering */}\n {filteredUserRepos.length === 0 &&\n Object.keys(filteredOrgRepos).length === 0 &&\n hasData && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>No repositories match your filter.</p>\n </div>\n )}\n\n {/* No repos at all */}\n {!hasData && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <FolderGit2\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>No repositories found.</p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Preview component for panel tabs/thumbnails\n */\nexport const GitHubProjectsPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <FolderGit2 size={16} style={{ color: theme.colors.primary }} />\n <span>GitHub Projects</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Your repositories and organization projects\n </div>\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n User,\n Building2,\n Star,\n MapPin,\n Link as LinkIcon,\n Mail,\n Calendar,\n GitFork,\n ExternalLink,\n Download,\n Search,\n X,\n Circle,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type {\n GitHubUserProfile,\n GitHubOrganization,\n GitHubRepository,\n UserProfileSlice,\n UserProfilePanelActions,\n UserProfileView,\n UserPresenceStatus,\n} from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.user-profile';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * Format a date string to a readable format\n */\nconst formatDate = (dateString: string): string => {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n year: 'numeric',\n });\n};\n\n/**\n * Get presence status color\n */\nconst getPresenceColor = (status: UserPresenceStatus['status']): string => {\n switch (status) {\n case 'online':\n return '#22c55e';\n case 'away':\n return '#eab308';\n case 'offline':\n default:\n return '#6b7280';\n }\n};\n\n/**\n * OrganizationCard - Displays a single organization\n */\nconst OrganizationCard: React.FC<{\n organization: GitHubOrganization;\n onClick?: (org: GitHubOrganization) => void;\n}> = ({ organization, onClick }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n return (\n <div\n onClick={() => onClick?.(organization)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isHovered\n ? theme.colors.backgroundTertiary\n : theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n cursor: onClick ? 'pointer' : 'default',\n transition: 'all 0.15s ease',\n }}\n >\n <img\n src={organization.avatar_url}\n alt={organization.login}\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '8px',\n objectFit: 'cover',\n }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {organization.login}\n </div>\n {organization.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {organization.description}\n </div>\n )}\n </div>\n <Building2 size={16} style={{ color: theme.colors.textSecondary }} />\n </div>\n );\n};\n\n/**\n * RepositoryCard - Displays a single starred repository\n */\nconst RepositoryCard: React.FC<{\n repository: GitHubRepository;\n onClick?: (repo: GitHubRepository) => void;\n onClone?: (repo: GitHubRepository) => void;\n onOpenInBrowser?: (repo: GitHubRepository) => void;\n}> = ({ repository, onClick, onClone, onOpenInBrowser }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n return (\n <div\n onClick={() => onClick?.(repository)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isHovered\n ? theme.colors.backgroundTertiary\n : theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n cursor: onClick ? 'pointer' : 'default',\n transition: 'all 0.15s ease',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n fontFamily: theme.fonts.body,\n }}\n >\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {repository.full_name}\n </span>\n {repository.fork && (\n <GitFork size={12} style={{ color: theme.colors.textSecondary, flexShrink: 0 }} />\n )}\n </div>\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n marginTop: '4px',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {repository.description}\n </div>\n )}\n </div>\n {isHovered && (onClone || onOpenInBrowser) && (\n <div style={{ display: 'flex', gap: '4px', flexShrink: 0 }}>\n {onClone && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClone(repository);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Clone repository\"\n >\n <Download size={14} />\n </button>\n )}\n {onOpenInBrowser && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onOpenInBrowser(repository);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Open in browser\"\n >\n <ExternalLink size={14} />\n </button>\n )}\n </div>\n )}\n </div>\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 fontFamily: theme.fonts.body,\n }}\n >\n {repository.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: theme.colors.primary,\n }}\n />\n {repository.language}\n </span>\n )}\n {repository.stargazers_count !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={12} />\n {repository.stargazers_count.toLocaleString()}\n </span>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * UserProfilePanelContent - Internal component that uses theme\n */\nconst UserProfilePanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [activeView, setActiveView] = useState<UserProfileView>('organizations');\n const [searchQuery, setSearchQuery] = useState('');\n const [showSearchBox, setShowSearchBox] = useState(false);\n\n // Get extended actions\n const panelActions = actions as UserProfilePanelActions;\n\n // Get user profile data from context slice\n const profileSlice = context.getSlice<UserProfileSlice>('userProfile');\n const user = profileSlice?.data?.user ?? null;\n const organizations = useMemo(\n () => profileSlice?.data?.organizations || [],\n [profileSlice?.data?.organizations]\n );\n const starredRepositories = useMemo(\n () => profileSlice?.data?.starredRepositories || [],\n [profileSlice?.data?.starredRepositories]\n );\n const presence = profileSlice?.data?.presence;\n const loading = profileSlice?.loading ?? false;\n\n // Filter starred repositories by search\n const filteredStarred = useMemo(() => {\n if (!searchQuery.trim()) return starredRepositories;\n const query = searchQuery.toLowerCase().trim();\n return starredRepositories.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 }, [starredRepositories, searchQuery]);\n\n // Handle organization selection\n const handleOrganizationSelect = useCallback(\n (organization: GitHubOrganization) => {\n events.emit(\n createPanelEvent(`${PANEL_ID}:organization:selected`, {\n orgLogin: organization.login,\n organization,\n })\n );\n panelActions.viewOrganization?.(organization.login);\n },\n [events, panelActions]\n );\n\n // Handle repository selection\n const handleRepositorySelect = useCallback(\n (repository: GitHubRepository) => {\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository:selected`, {\n owner: repository.owner.login,\n repo: repository.name,\n repository,\n })\n );\n panelActions.viewRepository?.(repository.owner.login, repository.name);\n },\n [events, panelActions]\n );\n\n // Handle repository clone\n const handleCloneRepository = useCallback(\n (repository: GitHubRepository) => {\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository:clone-requested`, {\n repository,\n })\n );\n panelActions.cloneRepository?.(repository);\n },\n [events, panelActions]\n );\n\n // Handle open in browser\n const handleOpenInBrowser = useCallback(\n (repository: GitHubRepository) => {\n panelActions.openInBrowser?.(repository.html_url);\n },\n [panelActions]\n );\n\n // Handle view change\n const handleViewChange = useCallback(\n (view: UserProfileView) => {\n setActiveView(view);\n setSearchQuery('');\n setShowSearchBox(false);\n events.emit(createPanelEvent(`${PANEL_ID}:view:changed`, { view }));\n },\n [events]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ view: UserProfileView }>(`${PANEL_ID}:set-view`, (event) => {\n if (event.payload?.view) {\n handleViewChange(event.payload.view);\n }\n }),\n events.on<{ orgLogin: string }>(`${PANEL_ID}:select-organization`, (event) => {\n const orgLogin = event.payload?.orgLogin;\n if (orgLogin) {\n const org = organizations.find((o) => o.login === orgLogin);\n if (org) {\n handleOrganizationSelect(org);\n }\n }\n }),\n events.on<{ owner: string; repo: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const { owner, repo } = event.payload || {};\n if (owner && repo) {\n const repository = starredRepositories.find(\n (r) => r.owner.login === owner && r.name === repo\n );\n if (repository) {\n handleRepositorySelect(repository);\n }\n }\n }),\n events.on<{ owner: string; repo: string }>(`${PANEL_ID}:clone-repository`, (event) => {\n const { owner, repo } = event.payload || {};\n if (owner && repo) {\n const repository = starredRepositories.find(\n (r) => r.owner.login === owner && r.name === repo\n );\n if (repository) {\n handleCloneRepository(repository);\n }\n }\n }),\n events.on<{ filter: string }>(`${PANEL_ID}:filter-starred`, (event) => {\n if (event.payload?.filter !== undefined) {\n setSearchQuery(event.payload.filter);\n setShowSearchBox(true);\n setActiveView('starred');\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [\n events,\n organizations,\n starredRepositories,\n handleViewChange,\n handleOrganizationSelect,\n handleRepositorySelect,\n handleCloneRepository,\n ]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n // Loading state\n if (loading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading profile...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n // No user selected state\n if (!user) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <User size={48} style={{ color: theme.colors.textSecondary }} />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a user\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n Click on someone in the network to view their profile\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={baseContainerStyle}>\n {/* Panel Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <User 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 fontFamily: theme.fonts.body,\n }}\n >\n User Profile\n </span>\n </div>\n\n {/* User Info */}\n <div\n style={{\n padding: '16px',\n backgroundColor: theme.colors.background,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\n <div style={{ position: 'relative' }}>\n <img\n src={user.avatar_url}\n alt={user.login}\n style={{\n width: '64px',\n height: '64px',\n borderRadius: '50%',\n objectFit: 'cover',\n }}\n />\n {presence && (\n <Circle\n size={14}\n fill={getPresenceColor(presence.status)}\n style={{\n position: 'absolute',\n bottom: '2px',\n right: '2px',\n color: getPresenceColor(presence.status),\n }}\n />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.bold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {user.name || user.login}\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n @{user.login}\n </div>\n {user.bio && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n marginTop: '8px',\n }}\n >\n {user.bio}\n </div>\n )}\n </div>\n </div>\n\n {/* User meta info */}\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '12px',\n marginTop: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n {user.location && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <MapPin size={12} />\n {user.location}\n </span>\n )}\n {user.email && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Mail size={12} />\n {user.email}\n </span>\n )}\n {user.company && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Building2 size={12} />\n {user.company}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={12} />\n Joined {formatDate(user.created_at)}\n </span>\n </div>\n\n {/* Stats */}\n <div\n style={{\n display: 'flex',\n gap: '16px',\n marginTop: '12px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <span>\n <strong style={{ color: theme.colors.text }}>{user.followers}</strong>{' '}\n <span style={{ color: theme.colors.textSecondary }}>followers</span>\n </span>\n <span>\n <strong style={{ color: theme.colors.text }}>{user.following}</strong>{' '}\n <span style={{ color: theme.colors.textSecondary }}>following</span>\n </span>\n <span>\n <strong style={{ color: theme.colors.text }}>{user.public_repos}</strong>{' '}\n <span style={{ color: theme.colors.textSecondary }}>repos</span>\n </span>\n </div>\n </div>\n\n {/* Tab navigation */}\n <div\n style={{\n display: 'flex',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n <button\n onClick={() => handleViewChange('organizations')}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '12px',\n border: 'none',\n backgroundColor: 'transparent',\n color:\n activeView === 'organizations'\n ? theme.colors.primary\n : theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight:\n activeView === 'organizations'\n ? theme.fontWeights.semibold\n : theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n borderBottom:\n activeView === 'organizations'\n ? `2px solid ${theme.colors.primary}`\n : '2px solid transparent',\n transition: 'all 0.15s ease',\n }}\n >\n <Building2 size={16} />\n Organizations ({organizations.length})\n </button>\n <button\n onClick={() => handleViewChange('starred')}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '12px',\n border: 'none',\n backgroundColor: 'transparent',\n color:\n activeView === 'starred'\n ? theme.colors.primary\n : theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight:\n activeView === 'starred'\n ? theme.fontWeights.semibold\n : theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n borderBottom:\n activeView === 'starred'\n ? `2px solid ${theme.colors.primary}`\n : '2px solid transparent',\n transition: 'all 0.15s ease',\n }}\n >\n <Star size={16} />\n Starred ({starredRepositories.length})\n </button>\n </div>\n\n {/* Search box for starred view */}\n {activeView === 'starred' && (\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n }}\n >\n <Search size={16} style={{ color: theme.colors.textSecondary }} />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Filter starred repositories...\"\n style={{\n flex: 1,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => setSearchQuery('')}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2px',\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n }}\n >\n <X size={14} />\n </button>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Content area */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {activeView === 'organizations' && (\n <>\n {organizations.length === 0 ? (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Building2\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>No organizations</p>\n </div>\n ) : (\n organizations.map((org) => (\n <OrganizationCard\n key={org.id}\n organization={org}\n onClick={handleOrganizationSelect}\n />\n ))\n )}\n </>\n )}\n\n {activeView === 'starred' && (\n <>\n {filteredStarred.length === 0 ? (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Star size={32} style={{ marginBottom: '12px', opacity: 0.5 }} />\n <p style={{ margin: 0 }}>\n {searchQuery\n ? `No repositories matching \"${searchQuery}\"`\n : 'No starred repositories'}\n </p>\n </div>\n ) : (\n filteredStarred.map((repo) => (\n <RepositoryCard\n key={repo.id}\n repository={repo}\n onClick={handleRepositorySelect}\n onClone={panelActions.cloneRepository ? handleCloneRepository : undefined}\n onOpenInBrowser={\n panelActions.openInBrowser ? handleOpenInBrowser : undefined\n }\n />\n ))\n )}\n </>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * UserProfilePanel - View user profiles with their organizations and starred repos\n *\n * Features:\n * - Display user profile header with avatar, bio, stats\n * - Show user's GitHub organizations\n * - Show user's starred repositories with search/filter\n * - Presence status indicator\n * - Clone starred repositories\n *\n * Data Slices:\n * - userProfile: UserProfileSlice object\n *\n * Events Emitted:\n * - industry-theme.user-profile:organization:selected\n * - industry-theme.user-profile:repository:selected\n * - industry-theme.user-profile:repository:clone-requested\n * - industry-theme.user-profile:view:changed\n *\n * Events Listened:\n * - industry-theme.user-profile:set-view\n * - industry-theme.user-profile:select-organization\n * - industry-theme.user-profile:select-repository\n * - industry-theme.user-profile:clone-repository\n * - industry-theme.user-profile:filter-starred\n */\nexport const UserProfilePanel: React.FC<PanelComponentProps> = (props) => {\n return <UserProfilePanelContent {...props} />;\n};\n\n/**\n * UserProfilePanelPreview - Compact preview for panel tabs/thumbnails\n */\nexport const UserProfilePanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <User size={16} style={{ color: theme.colors.primary }} />\n <span>User Profile</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n View user organizations and starred repos\n </div>\n </div>\n );\n};\n\n// Re-export types\nexport type {\n GitHubUserProfile,\n GitHubOrganization,\n GitHubRepository,\n UserProfileSlice,\n UserProfilePanelActions,\n UserProfileView,\n UserPresenceStatus,\n UserProfileCardProps,\n OrganizationCardProps,\n StarredRepositoryCardProps,\n OrganizationSelectedPayload,\n RepositorySelectedPayload,\n RepositoryCloneRequestedPayload,\n UserProfilePanelEventPayloads,\n} from './types';\n","/**\n * UTCP Tools for LocalProjectsPanel\n *\n * These tools allow AI agents to interact with the Local Projects panel\n * through the Universal Tool Communication Protocol.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.local-projects';\n\n/**\n * Filter projects tool\n * Allows filtering the project list by search term\n */\nexport const filterProjectsTool: PanelTool = {\n name: 'filter_projects',\n description: 'Filter the local projects list by name, owner, or path',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter projects (matches name, owner, or path)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'projects'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Select project tool\n * Allows selecting a specific project in the list\n */\nexport const selectProjectTool: PanelTool = {\n name: 'select_project',\n description: 'Select a project by name or path to view its details',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description: 'Project name or full path to select',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedProject: { type: 'string' },\n },\n },\n tags: ['select', 'project', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Open project tool\n * Allows opening a project in the dev workspace\n */\nexport const openProjectTool: PanelTool = {\n name: 'open_project',\n description: 'Open a local project in the development workspace',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description: 'Project name or full path to open',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['open', 'project', 'workspace'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:open-repository`,\n },\n};\n\n/**\n * All tools for the LocalProjectsPanel\n */\nexport const localProjectsPanelTools: PanelTool[] = [\n filterProjectsTool,\n selectProjectTool,\n openProjectTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const localProjectsPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Local Projects Panel',\n description: 'Tools for browsing and managing local Alexandria repositories',\n tools: localProjectsPanelTools,\n};\n","/**\n * Workspace Repositories Panel Tools\n *\n * UTCP-compatible tools for the Workspace Repositories panel.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/panel-framework-core';\n\nconst PANEL_ID = 'industry-theme.workspace-repositories';\n\n/**\n * Tool: Select Repository\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_workspace_repository',\n description: 'Selects a repository in the workspace panel',\n inputs: {\n type: 'object',\n properties: {\n repositoryPath: {\n type: 'string',\n description: 'Path to the repository to select',\n },\n },\n required: ['repositoryPath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'select'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Tool: Refresh Workspace\n */\nexport const refreshWorkspaceTool: PanelTool = {\n name: 'refresh_workspace',\n description: 'Refreshes the workspace repositories list',\n inputs: {\n type: 'object',\n properties: {\n force: {\n type: 'boolean',\n description: 'Force refresh even if data is fresh',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n repositoryCount: { type: 'number' },\n },\n },\n tags: ['workspace', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:refresh-workspace`,\n },\n};\n\n/**\n * Tool: Open Repository\n */\nexport const openRepositoryTool: PanelTool = {\n name: 'open_workspace_repository',\n description: 'Opens a repository from the workspace',\n inputs: {\n type: 'object',\n properties: {\n repositoryPath: {\n type: 'string',\n description: 'Path to the repository to open',\n },\n },\n required: ['repositoryPath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:open-repository`,\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const workspaceRepositoriesPanelTools: PanelTool[] = [\n selectRepositoryTool,\n refreshWorkspaceTool,\n openRepositoryTool,\n];\n\n/**\n * Panel tools metadata for registration.\n */\nexport const workspaceRepositoriesPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Workspace Repositories Panel',\n description: 'Tools provided by the workspace repositories panel',\n tools: workspaceRepositoriesPanelTools,\n};\n","/**\n * UTCP Tools for WorkspacesListPanel\n *\n * These tools allow AI agents to interact with the Workspaces List panel\n * through the Universal Tool Communication Protocol.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.workspaces-list';\n\n/**\n * Filter workspaces tool\n * Allows filtering the workspace list by search term\n */\nexport const filterWorkspacesTool: PanelTool = {\n name: 'filter_workspaces',\n description:\n 'Filter the workspaces list by workspace name, description, or repository names within workspaces',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description:\n 'Search term to filter workspaces (matches workspace name, description, or repository names)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'workspaces'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Select workspace tool\n * Allows selecting a specific workspace in the list\n */\nexport const selectWorkspaceTool: PanelTool = {\n name: 'select_workspace',\n description: 'Select a workspace by its ID to view its details and repositories',\n inputs: {\n type: 'object',\n properties: {\n workspaceId: {\n type: 'string',\n description: 'The workspace ID to select',\n },\n },\n required: ['workspaceId'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedWorkspace: { type: 'string' },\n },\n },\n tags: ['select', 'workspace', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-workspace`,\n },\n};\n\n/**\n * Open workspace tool\n * Allows opening a workspace in a new window\n */\nexport const openWorkspaceTool: PanelTool = {\n name: 'open_workspace',\n description: 'Open a workspace in a dedicated window for full workspace management',\n inputs: {\n type: 'object',\n properties: {\n workspaceId: {\n type: 'string',\n description: 'The workspace ID to open',\n },\n },\n required: ['workspaceId'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['open', 'workspace', 'window'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:open-workspace`,\n },\n};\n\n/**\n * Create workspace tool\n * Allows creating a new workspace\n */\nexport const createWorkspaceTool: PanelTool = {\n name: 'create_workspace',\n description: 'Create a new workspace with the specified name and optional description',\n inputs: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name for the new workspace',\n },\n description: {\n type: 'string',\n description: 'Optional description for the workspace',\n },\n },\n required: ['name'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n workspaceId: { type: 'string' },\n message: { type: 'string' },\n },\n },\n tags: ['create', 'workspace', 'new'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:create-workspace`,\n },\n};\n\n/**\n * All tools for the WorkspacesListPanel\n */\nexport const workspacesListPanelTools: PanelTool[] = [\n filterWorkspacesTool,\n selectWorkspaceTool,\n openWorkspaceTool,\n createWorkspaceTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const workspacesListPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Workspaces List Panel',\n description: 'Tools for browsing and managing workspaces',\n tools: workspacesListPanelTools,\n};\n","/**\n * Workspace Collection Panel Tools\n *\n * UTCP-compatible tools for the browser-based Workspace Collection panel.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/panel-framework-core';\n\nconst PANEL_ID = 'industry-theme.workspace-collection';\n\n/**\n * Tool: Filter Repositories\n */\nexport const filterRepositoriesTool: PanelTool = {\n name: 'filter_workspace_collection',\n description: 'Filters repositories in the workspace collection by search term',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter repositories by name, owner, or description',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n matchCount: { type: 'number' },\n },\n },\n tags: ['workspace', 'repository', 'filter', 'search'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Tool: Select Repository\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_collection_repository',\n description: 'Selects a repository in the workspace collection panel',\n inputs: {\n type: 'object',\n properties: {\n repositoryKey: {\n type: 'string',\n description: 'Repository identifier in \"owner/repo\" format or just the repository name',\n },\n },\n required: ['repositoryKey'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'select'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Tool: Navigate to Repository\n */\nexport const navigateRepositoryTool: PanelTool = {\n name: 'navigate_collection_repository',\n description: 'Navigates to the full repository page for a repository in the workspace',\n inputs: {\n type: 'object',\n properties: {\n repositoryKey: {\n type: 'string',\n description: 'Repository identifier in \"owner/repo\" format or just the repository name',\n },\n },\n required: ['repositoryKey'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'navigate', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:navigate-repository`,\n },\n};\n\n/**\n * Tool: Remove Repository from Workspace\n */\nexport const removeRepositoryTool: PanelTool = {\n name: 'remove_collection_repository',\n description: 'Removes a repository from the current workspace',\n inputs: {\n type: 'object',\n properties: {\n repositoryKey: {\n type: 'string',\n description: 'Repository identifier in \"owner/repo\" format or just the repository name',\n },\n },\n required: ['repositoryKey'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'remove', 'delete'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:remove-repository`,\n },\n};\n\n/**\n * Tool: Refresh Workspace Collection\n */\nexport const refreshWorkspaceCollectionTool: PanelTool = {\n name: 'refresh_workspace_collection',\n description: 'Refreshes the workspace collection repository list',\n inputs: {\n type: 'object',\n properties: {\n force: {\n type: 'boolean',\n description: 'Force refresh even if data is fresh',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n repositoryCount: { type: 'number' },\n },\n },\n tags: ['workspace', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:refresh-workspace`,\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const workspaceCollectionPanelTools: PanelTool[] = [\n filterRepositoriesTool,\n selectRepositoryTool,\n navigateRepositoryTool,\n removeRepositoryTool,\n refreshWorkspaceCollectionTool,\n];\n\n/**\n * Panel tools metadata for registration.\n */\nexport const workspaceCollectionPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Workspace Collection Panel',\n description: 'Tools provided by the browser-based workspace collection panel',\n tools: workspaceCollectionPanelTools,\n};\n","/**\n * GitHubStarredPanel UTCP Tools\n *\n * Server-safe tools for AI agent interaction with the GitHub Starred panel.\n * These tools emit panel events that the panel component listens to.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.github-starred';\n\n/**\n * Filter starred repositories by name, owner, or language\n */\nexport const filterStarredTool: PanelTool = {\n name: 'filter_starred_repositories',\n description:\n 'Filter the starred repositories list by repository name, owner, language, or description',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description:\n 'Search term to filter repositories (matches name, owner, language, or description)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'starred', 'github'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Select a starred repository\n */\nexport const selectStarredRepositoryTool: PanelTool = {\n name: 'select_starred_repository',\n description:\n 'Select a starred repository by its name or full name (owner/repo)',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n repository: {\n type: 'object',\n description: 'The selected repository data',\n },\n },\n },\n tags: ['select', 'starred', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Clone a starred repository\n */\nexport const cloneStarredRepositoryTool: PanelTool = {\n name: 'clone_starred_repository',\n description: 'Clone a starred repository to the local machine',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n localPath: {\n type: 'string',\n description: 'Path where the repository was cloned',\n },\n },\n },\n tags: ['clone', 'starred', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:clone-repository`,\n },\n};\n\n/**\n * All tools for the GitHubStarredPanel\n */\nexport const githubStarredPanelTools: PanelTool[] = [\n filterStarredTool,\n selectStarredRepositoryTool,\n cloneStarredRepositoryTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const githubStarredPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'GitHub Starred Panel',\n description: 'Tools for browsing and managing starred GitHub repositories',\n tools: githubStarredPanelTools,\n};\n","/**\n * GitHubProjectsPanel UTCP Tools\n *\n * Server-safe tools for AI agent interaction with the GitHub Projects panel.\n * These tools emit panel events that the panel component listens to.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.github-projects';\n\n/**\n * Filter projects by name, owner, or language\n */\nexport const filterProjectsTool: PanelTool = {\n name: 'filter_github_projects',\n description:\n 'Filter the GitHub projects list by repository name, owner, language, or description',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description:\n 'Search term to filter repositories (matches name, owner, language, or description)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'projects', 'github'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Toggle owner section visibility\n */\nexport const toggleOwnerSectionTool: PanelTool = {\n name: 'toggle_owner_section',\n description:\n 'Expand or collapse an owner section (user or organization) in the projects panel',\n inputs: {\n type: 'object',\n properties: {\n owner: {\n type: 'string',\n description: 'The owner name (username or organization login) to toggle',\n },\n },\n required: ['owner'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n collapsed: { type: 'boolean' },\n },\n },\n tags: ['toggle', 'section', 'projects', 'github'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:toggle-section`,\n },\n};\n\n/**\n * Select a project repository\n */\nexport const selectProjectRepositoryTool: PanelTool = {\n name: 'select_project_repository',\n description: 'Select a project repository by its name or full name (owner/repo)',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n repository: {\n type: 'object',\n description: 'The selected repository data',\n },\n },\n },\n tags: ['select', 'projects', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Clone a project repository\n */\nexport const cloneProjectRepositoryTool: PanelTool = {\n name: 'clone_project_repository',\n description: 'Clone a project repository to the local machine',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n localPath: {\n type: 'string',\n description: 'Path where the repository was cloned',\n },\n },\n },\n tags: ['clone', 'projects', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:clone-repository`,\n },\n};\n\n/**\n * All tools for the GitHubProjectsPanel\n */\nexport const githubProjectsPanelTools: PanelTool[] = [\n filterProjectsTool,\n toggleOwnerSectionTool,\n selectProjectRepositoryTool,\n cloneProjectRepositoryTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const githubProjectsPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'GitHub Projects Panel',\n description:\n 'Tools for browsing and managing your GitHub repositories and organization repositories',\n tools: githubProjectsPanelTools,\n};\n","/**\n * UTCP Tools for UserProfilePanel\n *\n * These tools allow AI agents to interact with the User Profile panel\n * through the Universal Tool Communication Protocol.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.user-profile';\n\n/**\n * View organizations tool\n * Switches the panel view to show organizations\n */\nexport const viewOrganizationsTool: PanelTool = {\n name: 'view_user_organizations',\n description: \"Switch to the organizations tab to view the user's GitHub organizations\",\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['view', 'organizations', 'user'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:set-view`,\n },\n};\n\n/**\n * View starred repositories tool\n * Switches the panel view to show starred repositories\n */\nexport const viewStarredTool: PanelTool = {\n name: 'view_user_starred',\n description: \"Switch to the starred tab to view the user's starred GitHub repositories\",\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['view', 'starred', 'repositories', 'user'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:set-view`,\n },\n};\n\n/**\n * Select organization tool\n * Selects an organization to view its details\n */\nexport const selectOrganizationTool: PanelTool = {\n name: 'select_organization',\n description: 'Select a GitHub organization to view its details and repositories',\n inputs: {\n type: 'object',\n properties: {\n orgLogin: {\n type: 'string',\n description: 'The organization login/username to select',\n },\n },\n required: ['orgLogin'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedOrganization: { type: 'string' },\n },\n },\n tags: ['select', 'organization', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-organization`,\n },\n};\n\n/**\n * Select repository tool\n * Selects a starred repository to view its details\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_starred_repository',\n description: 'Select a starred repository to view its details',\n inputs: {\n type: 'object',\n properties: {\n owner: {\n type: 'string',\n description: 'The repository owner (user or organization)',\n },\n repo: {\n type: 'string',\n description: 'The repository name',\n },\n },\n required: ['owner', 'repo'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedRepository: { type: 'string' },\n },\n },\n tags: ['select', 'repository', 'starred', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Clone repository tool\n * Initiates cloning a starred repository\n */\nexport const cloneRepositoryTool: PanelTool = {\n name: 'clone_starred_repository',\n description: \"Clone one of the user's starred repositories to your local machine\",\n inputs: {\n type: 'object',\n properties: {\n owner: {\n type: 'string',\n description: 'The repository owner',\n },\n repo: {\n type: 'string',\n description: 'The repository name',\n },\n },\n required: ['owner', 'repo'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['clone', 'repository', 'starred'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:clone-repository`,\n },\n};\n\n/**\n * Filter starred repositories tool\n * Filters the starred repositories by search term\n */\nexport const filterStarredTool: PanelTool = {\n name: 'filter_starred_repositories',\n description: 'Filter the starred repositories list by name, description, or language',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter repositories',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'starred', 'repositories'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter-starred`,\n },\n};\n\n/**\n * All tools for the UserProfilePanel\n */\nexport const userProfilePanelTools: PanelTool[] = [\n viewOrganizationsTool,\n viewStarredTool,\n selectOrganizationTool,\n selectRepositoryTool,\n cloneRepositoryTool,\n filterStarredTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const userProfilePanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'User Profile Panel',\n description: \"Tools for viewing user profiles, their organizations, and starred repositories\",\n tools: userProfilePanelTools,\n};\n","import { LocalProjectsPanel } from './panels/LocalProjectsPanel';\nimport { WorkspaceRepositoriesPanel } from './panels/WorkspaceRepositoriesPanel';\nimport { WorkspacesListPanel } from './panels/WorkspacesListPanel';\nimport { WorkspaceCollectionPanel } from './panels/WorkspaceCollectionPanel';\nimport { GitHubStarredPanel } from './panels/GitHubStarredPanel';\nimport { GitHubProjectsPanel } from './panels/GitHubProjectsPanel';\nimport { UserProfilePanel } from './panels/UserProfilePanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { localProjectsPanelTools } from './panels/LocalProjectsPanel/tools';\nimport { workspaceRepositoriesPanelTools } from './panels/WorkspaceRepositoriesPanel/tools';\nimport { workspacesListPanelTools } from './panels/WorkspacesListPanel/tools';\nimport { workspaceCollectionPanelTools } from './panels/WorkspaceCollectionPanel/tools';\nimport { githubStarredPanelTools } from './panels/GitHubStarredPanel/tools';\nimport { githubProjectsPanelTools } from './panels/GitHubProjectsPanel/tools';\nimport { userProfilePanelTools } from './panels/UserProfilePanel/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 id: 'industry-theme.local-projects',\n name: 'Local Projects',\n icon: 'Folder',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse and manage local Alexandria repositories',\n slices: ['alexandriaRepositories'],\n tools: localProjectsPanelTools,\n },\n component: LocalProjectsPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Local Projects Panel mounted');\n\n // Refresh Alexandria repositories if available\n if (\n context.hasSlice('alexandriaRepositories') &&\n !context.isSliceLoading('alexandriaRepositories')\n ) {\n await context.refresh('repository', 'alexandriaRepositories');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Local Projects Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.workspace-repositories',\n name: 'Workspace Repositories',\n icon: 'FolderGit2',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Workspace and repository management panel',\n slices: ['workspace', 'workspaceRepositories'],\n tools: workspaceRepositoriesPanelTools,\n },\n component: WorkspaceRepositoriesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Repositories Panel mounted');\n // eslint-disable-next-line no-console\n console.log('Current scope:', context.currentScope.type);\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Repositories Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.workspaces-list',\n name: 'Workspaces',\n icon: 'Layers',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse and manage workspaces',\n slices: ['workspaces'],\n tools: workspacesListPanelTools,\n },\n component: WorkspacesListPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspaces List Panel mounted');\n\n // Refresh workspaces if available\n if (\n context.hasSlice('workspaces') &&\n !context.isSliceLoading('workspaces')\n ) {\n await context.refresh('workspace', 'workspaces');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspaces List Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.workspace-collection',\n name: 'Workspace Collection',\n icon: 'FolderOpen',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse repositories in a workspace (browser)',\n slices: ['workspace', 'workspaceRepositories'],\n tools: workspaceCollectionPanelTools,\n },\n component: WorkspaceCollectionPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Collection Panel mounted');\n // eslint-disable-next-line no-console\n console.log('Current scope:', context.currentScope.type);\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Collection Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.github-starred',\n name: 'Starred',\n icon: 'Star',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse your starred GitHub repositories',\n slices: ['githubStarred', 'alexandriaRepositories'],\n tools: githubStarredPanelTools,\n },\n component: GitHubStarredPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Starred Panel mounted');\n\n if (\n context.hasSlice('githubStarred') &&\n !context.isSliceLoading('githubStarred')\n ) {\n await context.refresh(undefined, 'githubStarred');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Starred Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.github-projects',\n name: 'GitHub Projects',\n icon: 'FolderGit2',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Your repositories and organization projects',\n slices: ['githubProjects', 'alexandriaRepositories'],\n tools: githubProjectsPanelTools,\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 if (\n context.hasSlice('githubProjects') &&\n !context.isSliceLoading('githubProjects')\n ) {\n await context.refresh(undefined, 'githubProjects');\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: {\n id: 'industry-theme.user-profile',\n name: 'User Profile',\n icon: 'User',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View user profiles, organizations, and starred repositories',\n slices: ['userProfile'],\n tools: userProfilePanelTools,\n },\n component: UserProfilePanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('User Profile Panel mounted');\n\n if (\n context.hasSlice('userProfile') &&\n !context.isSliceLoading('userProfile')\n ) {\n await context.refresh(undefined, 'userProfile');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('User Profile Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Alexandria Panels package loaded');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Alexandria Panels package unloading');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/alexandria-panels/tools' to import without React dependencies.\n */\nexport {\n localProjectsPanelTools,\n localProjectsPanelToolsMetadata,\n filterProjectsTool,\n selectProjectTool,\n openProjectTool,\n} from './panels/LocalProjectsPanel/tools';\n\nexport {\n workspaceRepositoriesPanelTools,\n workspaceRepositoriesPanelToolsMetadata,\n selectRepositoryTool,\n refreshWorkspaceTool,\n openRepositoryTool,\n} from './panels/WorkspaceRepositoriesPanel/tools';\n\nexport {\n workspacesListPanelTools,\n workspacesListPanelToolsMetadata,\n filterWorkspacesTool,\n selectWorkspaceTool,\n openWorkspaceTool,\n createWorkspaceTool,\n} from './panels/WorkspacesListPanel/tools';\n\nexport {\n workspaceCollectionPanelTools,\n workspaceCollectionPanelToolsMetadata,\n filterRepositoriesTool,\n selectRepositoryTool as selectCollectionRepositoryTool,\n navigateRepositoryTool,\n removeRepositoryTool,\n refreshWorkspaceCollectionTool,\n} from './panels/WorkspaceCollectionPanel/tools';\n\nexport {\n githubStarredPanelTools,\n githubStarredPanelToolsMetadata,\n filterStarredTool,\n selectStarredRepositoryTool,\n cloneStarredRepositoryTool,\n} from './panels/GitHubStarredPanel/tools';\n\nexport {\n githubProjectsPanelTools,\n githubProjectsPanelToolsMetadata,\n filterProjectsTool as filterGitHubProjectsTool,\n toggleOwnerSectionTool,\n selectProjectRepositoryTool,\n cloneProjectRepositoryTool,\n} from './panels/GitHubProjectsPanel/tools';\n\nexport {\n userProfilePanelTools,\n userProfilePanelToolsMetadata,\n viewOrganizationsTool,\n viewStarredTool,\n selectOrganizationTool,\n selectRepositoryTool as selectUserRepositoryTool,\n cloneRepositoryTool as cloneUserRepositoryTool,\n filterStarredTool as filterUserStarredTool,\n} from './panels/UserProfilePanel/tools';\n\n/**\n * Export panel components for direct use\n */\nexport {\n LocalProjectsPanel,\n LocalProjectsPanelPreview,\n LocalProjectCard,\n RepositoryAvatar,\n} from './panels/LocalProjectsPanel';\n\nexport { WorkspaceRepositoriesPanel } from './panels/WorkspaceRepositoriesPanel';\n\nexport {\n WorkspacesListPanel,\n WorkspacesListPanelPreview,\n WorkspaceCard,\n} from './panels/WorkspacesListPanel';\n\nexport {\n WorkspaceCollectionPanel,\n WorkspaceCollectionPanelPreview,\n} from './panels/WorkspaceCollectionPanel';\n\nexport {\n GitHubStarredPanel,\n GitHubStarredPanelPreview,\n} from './panels/GitHubStarredPanel';\n\nexport {\n GitHubProjectsPanel,\n GitHubProjectsPanelPreview,\n} from './panels/GitHubProjectsPanel';\n\nexport {\n UserProfilePanel,\n UserProfilePanelPreview,\n} from './panels/UserProfilePanel';\n\nexport { GitHubRepositoryCard } from './panels/shared/GitHubRepositoryCard';\n\n/**\n * Export types\n */\nexport type {\n LocalProjectCardProps,\n RepositoryAvatarProps,\n AlexandriaRepositoriesSlice,\n LocalProjectsPanelActions,\n CardActionMode,\n RepositoryWindowState,\n} from './panels/LocalProjectsPanel/types';\n\nexport type {\n Workspace,\n WorkspaceRepositoriesPanelActions,\n RepositorySelectedPayload,\n RepositoryOpenedPayload,\n} from './panels/WorkspaceRepositoriesPanel/types';\n\nexport type {\n WorkspacesSlice,\n WorkspacesListPanelActions,\n WorkspaceCardProps,\n WorkspaceSelectedPayload,\n WorkspaceOpenedPayload,\n WorkspaceCreatedPayload,\n WorkspaceDeletedPayload,\n} from './panels/WorkspacesListPanel/types';\n\nexport type {\n Workspace as WorkspaceCollectionWorkspace,\n WorkspaceCollectionSlice,\n WorkspaceRepositoriesSlice,\n WorkspaceCollectionPanelActions,\n RepositorySelectedPayload as CollectionRepositorySelectedPayload,\n RepositoryRemovedPayload,\n RepositoryNavigatePayload,\n WorkspaceCollectionPanelEventPayloads,\n} from './panels/WorkspaceCollectionPanel/types';\n\nexport type {\n GitHubRepository,\n GitHubOrganization,\n LocalRepositoryReference,\n} from './panels/shared/github-types';\n\nexport type {\n GitHubStarredSlice,\n GitHubStarredPanelActions,\n GitHubStarredPanelEventPayloads,\n} from './panels/GitHubStarredPanel/types';\n\nexport type {\n GitHubProjectsSlice,\n GitHubProjectsPanelActions,\n GitHubProjectsPanelEventPayloads,\n} from './panels/GitHubProjectsPanel/types';\n\nexport type {\n GitHubUserProfile,\n GitHubOrganization as UserProfileOrganization,\n GitHubRepository as UserProfileRepository,\n UserProfileSlice,\n UserProfilePanelActions,\n UserProfileView,\n UserPresenceStatus,\n UserProfileCardProps,\n OrganizationCardProps,\n StarredRepositoryCardProps,\n OrganizationSelectedPayload,\n RepositorySelectedPayload as UserRepositorySelectedPayload,\n RepositoryCloneRequestedPayload,\n UserProfilePanelEventPayloads,\n} from './panels/UserProfilePanel/types';\n\nexport type { GitHubRepositoryCardProps } from './panels/shared/GitHubRepositoryCard';\n\n"],"names":["__iconNode","getLanguageColor","Loader2","PANEL_ID","createPanelEvent","_a","React","Home","Edit2","_b","_c","AlertCircle","filterProjectsTool","selectRepositoryTool","filterStarredTool"],"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,36]}
|
|
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/building-2.js","../node_modules/lucide-react/dist/esm/icons/calendar.js","../node_modules/lucide-react/dist/esm/icons/check.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.js","../node_modules/lucide-react/dist/esm/icons/copy.js","../node_modules/lucide-react/dist/esm/icons/door-closed.js","../node_modules/lucide-react/dist/esm/icons/download.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/focus.js","../node_modules/lucide-react/dist/esm/icons/folder-git-2.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/git-fork.js","../node_modules/lucide-react/dist/esm/icons/house.js","../node_modules/lucide-react/dist/esm/icons/layers.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/mail.js","../node_modules/lucide-react/dist/esm/icons/map-pin.js","../node_modules/lucide-react/dist/esm/icons/move-up.js","../node_modules/lucide-react/dist/esm/icons/pen.js","../node_modules/lucide-react/dist/esm/icons/plus.js","../node_modules/lucide-react/dist/esm/icons/rotate-ccw.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/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/panels/LocalProjectsPanel/RepositoryAvatar.tsx","../src/panels/LocalProjectsPanel/LocalProjectCard.tsx","../src/panels/LocalProjectsPanel/index.tsx","../src/panels/WorkspaceRepositoriesPanel/index.tsx","../src/panels/WorkspacesListPanel/WorkspaceCard.tsx","../src/panels/WorkspacesListPanel/index.tsx","../src/panels/WorkspaceCollectionPanel/index.tsx","../src/panels/shared/GitHubRepositoryCard.tsx","../src/panels/GitHubStarredPanel/index.tsx","../src/panels/GitHubProjectsPanel/index.tsx","../src/panels/UserProfilePanel/index.tsx","../src/panels/LocalProjectsPanel/tools.ts","../src/panels/WorkspaceRepositoriesPanel/tools.ts","../src/panels/WorkspacesListPanel/tools.ts","../src/panels/WorkspaceCollectionPanel/tools.ts","../src/panels/GitHubStarredPanel/tools.ts","../src/panels/GitHubProjectsPanel/tools.ts","../src/panels/UserProfilePanel/tools.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: \"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: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=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 = [[\"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 = [[\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]];\nconst Circle = createLucideIcon(\"circle\", __iconNode);\n\nexport { __iconNode, Circle as default };\n//# sourceMappingURL=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: \"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: \"M10 12h.01\", key: \"1kxr2c\" }],\n [\"path\", { d: \"M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14\", key: \"36qu9e\" }],\n [\"path\", { d: \"M2 20h20\", key: \"owomy5\" }]\n];\nconst DoorClosed = createLucideIcon(\"door-closed\", __iconNode);\n\nexport { __iconNode, DoorClosed as default };\n//# sourceMappingURL=door-closed.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 15V3\", key: \"m9g1x1\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"path\", { d: \"m7 10 5 5 5-5\", key: \"brsn70\" }]\n];\nconst Download = createLucideIcon(\"download\", __iconNode);\n\nexport { __iconNode, Download as default };\n//# sourceMappingURL=download.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 [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"path\", { d: \"M3 7V5a2 2 0 0 1 2-2h2\", key: \"aa7l1z\" }],\n [\"path\", { d: \"M17 3h2a2 2 0 0 1 2 2v2\", key: \"4qcy5o\" }],\n [\"path\", { d: \"M21 17v2a2 2 0 0 1-2 2h-2\", key: \"6vwrx8\" }],\n [\"path\", { d: \"M7 21H5a2 2 0 0 1-2-2v-2\", key: \"ioqczr\" }]\n];\nconst Focus = createLucideIcon(\"focus\", __iconNode);\n\nexport { __iconNode, Focus as default };\n//# sourceMappingURL=focus.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: \"M9 20H4a2 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.9H20a2 2 0 0 1 2 2v5\",\n key: \"1w6njk\"\n }\n ],\n [\"circle\", { cx: \"13\", cy: \"12\", r: \"2\", key: \"1j92g6\" }],\n [\"path\", { d: \"M18 19c-2.8 0-5-2.2-5-5v8\", key: \"pkpw2h\" }],\n [\"circle\", { cx: \"20\", cy: \"19\", r: \"2\", key: \"1obnsp\" }]\n];\nconst FolderGit2 = createLucideIcon(\"folder-git-2\", __iconNode);\n\nexport { __iconNode, FolderGit2 as default };\n//# sourceMappingURL=folder-git-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 [\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 [\"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 [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n [\n \"path\",\n {\n d: \"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\n key: \"r6nss1\"\n }\n ]\n];\nconst House = createLucideIcon(\"house\", __iconNode);\n\nexport { __iconNode, House as default };\n//# sourceMappingURL=house.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.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\",\n key: \"zw3jo\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\",\n key: \"1wduqc\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\",\n key: \"kqbvx6\"\n }\n ]\n];\nconst Layers = createLucideIcon(\"layers\", __iconNode);\n\nexport { __iconNode, Layers as default };\n//# sourceMappingURL=layers.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: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\", key: \"132q7q\" }],\n [\"rect\", { x: \"2\", y: \"4\", width: \"20\", height: \"16\", rx: \"2\", key: \"izxlao\" }]\n];\nconst Mail = createLucideIcon(\"mail\", __iconNode);\n\nexport { __iconNode, Mail as default };\n//# sourceMappingURL=mail.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 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n key: \"1r0f0z\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n];\nconst MapPin = createLucideIcon(\"map-pin\", __iconNode);\n\nexport { __iconNode, MapPin as default };\n//# sourceMappingURL=map-pin.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 6L12 2L16 6\", key: \"1yvkyx\" }],\n [\"path\", { d: \"M12 2V22\", key: \"r89rzk\" }]\n];\nconst MoveUp = createLucideIcon(\"move-up\", __iconNode);\n\nexport { __iconNode, MoveUp as default };\n//# sourceMappingURL=move-up.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: \"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\",\n key: \"1a8usu\"\n }\n ]\n];\nconst Pen = createLucideIcon(\"pen\", __iconNode);\n\nexport { __iconNode, Pen as default };\n//# sourceMappingURL=pen.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 5v14\", key: \"s699le\" }]\n];\nconst Plus = createLucideIcon(\"plus\", __iconNode);\n\nexport { __iconNode, Plus as default };\n//# sourceMappingURL=plus.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];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.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.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 from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { RepositoryAvatarProps } from './types';\n\n/**\n * RepositoryAvatar - Displays repository owner avatar\n *\n * Priority:\n * 1. customAvatarUrl prop\n * 2. GitHub avatar from owner username\n * 3. Fallback icon or initial\n */\nexport const RepositoryAvatar: React.FC<RepositoryAvatarProps> = ({\n owner,\n customAvatarUrl,\n size = 32,\n fallbackIcon,\n}) => {\n const { theme } = useTheme();\n\n // Use rounded squares for avatar\n const borderRadius = `${Math.min(8, size / 4)}px`;\n\n // Determine avatar URL\n const avatarUrl = customAvatarUrl || (owner ? `https://github.com/${owner}.png` : null);\n\n const getContent = () => {\n if (avatarUrl) {\n return (\n <img\n src={avatarUrl}\n alt={owner || 'Repository'}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n onError={(e) => {\n // Hide broken image and show fallback\n e.currentTarget.style.display = 'none';\n }}\n />\n );\n }\n\n if (fallbackIcon) {\n return fallbackIcon;\n }\n\n return null;\n };\n\n return (\n <div\n style={{\n width: `${size}px`,\n height: `${size}px`,\n borderRadius,\n backgroundColor: theme.colors.backgroundTertiary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {getContent()}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FolderOpen, Focus, Loader2, X, Copy, Check, Plus, MoveUp, Lock } from 'lucide-react';\nimport { RepositoryAvatar } from './RepositoryAvatar';\nimport type { LocalProjectCardProps } from './types';\nimport './LocalProjectsPanel.css';\n\n/**\n * Language color mapping for visual indicators\n */\nconst LANGUAGE_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\nconst getLanguageColor = (language: string): string => {\n return LANGUAGE_COLORS[language] || '#6e7681';\n};\n\n/**\n * LocalProjectCard - Individual project card with actions\n *\n * Displays repository info and provides action buttons based on mode:\n * - default: Open and Remove buttons\n * - add-to-workspace: Add button only\n * - minimal: Open button only\n */\nexport const LocalProjectCard: React.FC<LocalProjectCardProps> = ({\n entry,\n actionMode = 'default',\n isSelected = false,\n onSelect,\n onOpen,\n onRemove,\n onAddToWorkspace,\n onRemoveFromWorkspace,\n onMoveToWorkspace,\n isLoading = false,\n windowState = 'closed',\n compact: _compact = false,\n isInWorkspaceDirectory,\n workspacePath,\n userHomePath,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [copiedPath, setCopiedPath] = useState(false);\n const [isMoving, setIsMoving] = useState(false);\n const [isRemoving, setIsRemoving] = useState(false);\n\n // Get avatar URL from GitHub owner\n const avatarUrl = entry.github?.owner\n ? `https://github.com/${entry.github.owner}.png`\n : null;\n\n // Format path for display - strip workspace path or replace home with ~\n const getDisplayPath = (path: string): string => {\n // First try to strip workspace path\n if (workspacePath && path.startsWith(workspacePath)) {\n const relativePath = path.slice(workspacePath.length);\n // Remove leading slash if present\n return relativePath.startsWith('/') ? relativePath.slice(1) : relativePath;\n }\n // Then try to replace home path with ~\n if (userHomePath && path.startsWith(userHomePath)) {\n return '~' + path.slice(userHomePath.length);\n }\n return path;\n };\n\n const displayPath = getDisplayPath(entry.path);\n\n const handleCardClick = () => {\n onSelect?.(entry);\n };\n\n const handleDoubleClick = () => {\n onOpen?.(entry);\n };\n\n const handleOpenClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onOpen?.(entry);\n };\n\n const handleRemoveClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.(entry);\n };\n\n const handleAddToWorkspaceClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAddToWorkspace?.(entry);\n };\n\n const handleRemoveFromWorkspaceClick = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n setIsRemoving(true);\n onRemoveFromWorkspace?.(entry);\n } finally {\n setIsRemoving(false);\n }\n };\n\n const handleMoveToWorkspaceClick = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n setIsMoving(true);\n onMoveToWorkspace?.(entry);\n } finally {\n setIsMoving(false);\n }\n };\n\n\n const handleCopyPath = async (e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n await navigator.clipboard.writeText(entry.path);\n setCopiedPath(true);\n setTimeout(() => setCopiedPath(false), 2000);\n } catch (err) {\n console.error('Failed to copy path:', err);\n }\n };\n\n // Action button style - flex to share width\n const actionButtonStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n flex: 1,\n height: '24px',\n padding: '0 8px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n transition: 'all 0.15s ease',\n };\n\n // Button hover handlers for consistent styling with WorkspaceCard\n const handleButtonHover = (e: React.MouseEvent<HTMLButtonElement>, isDestructive = false) => {\n if (isDestructive) {\n e.currentTarget.style.backgroundColor = `${theme.colors.error || '#ef4444'}15`;\n e.currentTarget.style.color = theme.colors.error || '#ef4444';\n } else {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }\n };\n\n const handleButtonLeave = (e: React.MouseEvent<HTMLButtonElement>, defaultColor?: string) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = defaultColor || theme.colors.textSecondary;\n };\n\n const renderActionButtons = () => {\n if (actionMode === 'add-to-workspace') {\n return (\n <button\n type=\"button\"\n onClick={handleAddToWorkspaceClick}\n disabled={isLoading}\n title=\"Add to workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isLoading ? <Loader2 size={14} className=\"animate-spin\" /> : <Plus size={14} />}\n <span>Add</span>\n </button>\n );\n }\n\n if (actionMode === 'workspace') {\n return (\n <>\n {isInWorkspaceDirectory === false && onMoveToWorkspace && (\n <button\n type=\"button\"\n onClick={handleMoveToWorkspaceClick}\n disabled={isMoving}\n title=\"Move to workspace directory\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isMoving ? <Loader2 size={14} className=\"animate-spin\" /> : <MoveUp size={14} />}\n <span>Move</span>\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleCopyPath}\n title={copiedPath ? 'Copied!' : `Copy path: ${entry.path}`}\n style={{\n ...actionButtonStyle,\n color: copiedPath ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e, copiedPath ? theme.colors.success || '#10b981' : undefined)}\n >\n {copiedPath ? <Check size={14} /> : <Copy size={14} />}\n <span>{copiedPath ? 'Copied' : 'Copy'}</span>\n </button>\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title=\"Open repository\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n <FolderOpen size={14} />\n <span>Open</span>\n </button>\n {onRemoveFromWorkspace && (\n <button\n type=\"button\"\n onClick={handleRemoveFromWorkspaceClick}\n disabled={isRemoving}\n title=\"Remove from workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e, true)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isRemoving ? <Loader2 size={14} className=\"animate-spin\" /> : <X size={14} />}\n <span>Remove</span>\n </button>\n )}\n </>\n );\n }\n\n // Default and minimal modes\n return (\n <>\n <button\n type=\"button\"\n onClick={handleCopyPath}\n title={copiedPath ? 'Copied!' : `Copy path: ${entry.path}`}\n style={{\n ...actionButtonStyle,\n color: copiedPath ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e, copiedPath ? theme.colors.success || '#10b981' : undefined)}\n >\n {copiedPath ? <Check size={14} /> : <Copy size={14} />}\n <span>{copiedPath ? 'Copied' : 'Copy'}</span>\n </button>\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title={\n windowState === 'ready'\n ? 'Focus window'\n : windowState === 'opening'\n ? 'Window is opening...'\n : 'Open locally'\n }\n disabled={windowState === 'opening'}\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {windowState === 'ready' ? (\n <Focus size={14} />\n ) : windowState === 'opening' ? (\n <Loader2 size={14} className=\"animate-spin\" />\n ) : (\n <FolderOpen size={14} />\n )}\n <span>{windowState === 'ready' ? 'Focus' : 'Open'}</span>\n </button>\n {actionMode === 'default' && onRemove && (\n <button\n type=\"button\"\n onClick={handleRemoveClick}\n disabled={isLoading}\n title=\"Remove from local projects\"\n style={actionButtonStyle}\n onMouseEnter={(e) => handleButtonHover(e, true)}\n onMouseLeave={(e) => handleButtonLeave(e)}\n >\n {isLoading ? <Loader2 size={14} className=\"animate-spin\" /> : <X size={14} />}\n <span>Remove</span>\n </button>\n )}\n </>\n );\n };\n\n const cardStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '12px',\n padding: '12px',\n borderRadius: '6px',\n backgroundColor: isSelected\n ? theme.colors.backgroundTertiary\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${\n isSelected\n ? theme.colors.primary || theme.colors.border\n : isHovered\n ? theme.colors.border\n : 'transparent'\n }`,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n fontFamily: theme.fonts.body,\n };\n\n return (\n <div\n className=\"local-project-card\"\n style={cardStyle}\n onClick={handleCardClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Avatar */}\n <RepositoryAvatar\n customAvatarUrl={avatarUrl}\n size={48}\n fallbackIcon={\n <div\n style={{\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n {entry.name[0]?.toUpperCase() || '?'}\n </div>\n }\n />\n\n {/* Content column */}\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n minWidth: 0,\n }}\n >\n {/* Name row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span\n className={entry.github?.primaryLanguage ? 'project-name-underline' : undefined}\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n '--underline-color': entry.github?.primaryLanguage\n ? getLanguageColor(entry.github.primaryLanguage)\n : theme.colors.textSecondary,\n } as React.CSSProperties}\n >\n {entry.name}\n </span>\n {/* Private badge */}\n {entry.github && entry.github.isPublic === false && (\n <span title=\"Private repository\">\n <Lock\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n </div>\n\n {/* Description row with action buttons */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n minHeight: '24px',\n position: 'relative',\n }}\n >\n {/* Description - hidden when hovered */}\n <div\n style={{\n flex: 1,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n lineHeight: 1.4,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n opacity: isHovered ? 0 : 1,\n transition: 'opacity 0.15s ease',\n }}\n title={entry.github?.description || displayPath}\n >\n {entry.github?.description || displayPath}\n </div>\n\n {/* Action buttons - cover full width when hovered */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n transition: 'opacity 0.15s ease',\n }}\n >\n {renderActionButtons()}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Search, Plus, Building2, FolderGit2 } from 'lucide-react';\nimport './LocalProjectsPanel.css';\nimport type { AlexandriaEntry } from '@principal-ai/alexandria-core-library/types';\nimport type { PanelComponentProps } from '../../types';\nimport { LocalProjectCard } from './LocalProjectCard';\nimport type {\n AlexandriaRepositoriesSlice,\n LocalProjectsPanelActions,\n RepositoryWindowState,\n} from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.local-projects';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * LocalProjectsPanelContent - Internal component that uses theme\n */\nconst LocalProjectsPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState('');\n const [isAdding, setIsAdding] = useState(false);\n const [selectedEntry, setSelectedEntry] = useState<AlexandriaEntry | null>(null);\n const [windowStates, setWindowStates] = useState<Map<string, RepositoryWindowState>>(new Map());\n const [sortByOrg, setSortByOrg] = useState(false);\n\n // Get extended actions (type assertion for panel-specific actions)\n const panelActions = actions as LocalProjectsPanelActions;\n\n // Get repositories from context slice\n const repoSlice = context.getSlice<AlexandriaRepositoriesSlice>('alexandriaRepositories');\n const repositories = useMemo(\n () => repoSlice?.data?.repositories || [],\n [repoSlice?.data?.repositories]\n );\n const loading = repoSlice?.loading ?? false;\n\n // Handle open repository\n const handleOpenRepository = useCallback(\n async (entry: AlexandriaEntry) => {\n if (!panelActions.openRepository) {\n console.warn('Open repository action not available');\n return;\n }\n\n // Update window state to opening\n setWindowStates((prev) => new Map(prev).set(entry.path, 'opening'));\n\n try {\n await panelActions.openRepository(entry);\n\n // Update window state to ready\n setWindowStates((prev) => new Map(prev).set(entry.path, 'ready'));\n\n // Emit event\n events.emit(createPanelEvent(`${PANEL_ID}:repository-opened`, { entry }));\n } catch (error) {\n console.error('Error opening repository:', error);\n setWindowStates((prev) => new Map(prev).set(entry.path, 'closed'));\n }\n },\n [panelActions, events]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n // Filter event from tools\n events.on<{ filter: string }>(`${PANEL_ID}:filter`, (event) => {\n if (event.payload?.filter !== undefined) {\n setFilter(event.payload.filter);\n }\n }),\n\n // Select repository event from tools\n events.on<{ identifier: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const entry = repositories.find(\n (r) => r.name === identifier || r.path === identifier\n );\n if (entry) {\n setSelectedEntry(entry);\n events.emit(createPanelEvent(`${PANEL_ID}:repository-selected`, { entry }));\n }\n }\n }),\n\n // Open repository event from tools\n events.on<{ identifier: string }>(`${PANEL_ID}:open-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const entry = repositories.find(\n (r) => r.name === identifier || r.path === identifier\n );\n if (entry) {\n handleOpenRepository(entry);\n }\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, repositories, handleOpenRepository]);\n\n // Handle add project\n const handleAddProject = async () => {\n if (!panelActions.selectDirectory || !panelActions.registerRepository) {\n console.warn('Add project actions not available');\n return;\n }\n\n try {\n setIsAdding(true);\n const result = await panelActions.selectDirectory();\n\n if (!result) {\n return;\n }\n\n await panelActions.registerRepository(result.name, result.path);\n\n // Refresh the repositories\n await context.refresh('repository', 'alexandriaRepositories');\n } catch (error) {\n console.error('Failed to add project:', error);\n } finally {\n setIsAdding(false);\n }\n };\n\n // Handle remove repository\n const handleRemoveRepository = async (entry: AlexandriaEntry) => {\n if (!panelActions.removeRepository) {\n console.warn('Remove repository action not available');\n return;\n }\n\n try {\n await panelActions.removeRepository(entry.name, false);\n await context.refresh('repository', 'alexandriaRepositories');\n } catch (error) {\n console.error('Failed to remove repository:', error);\n }\n };\n\n // Handle select repository\n const handleSelectRepository = (entry: AlexandriaEntry) => {\n setSelectedEntry(entry);\n events.emit(createPanelEvent(`${PANEL_ID}:repository-selected`, { entry }));\n };\n\n // Filter and sort repositories\n const normalizedFilter = filter.trim().toLowerCase();\n\n const filteredAndSortedRepositories = useMemo(() => {\n // Filter repositories by search term\n const filtered = repositories.filter((entry) => {\n if (!normalizedFilter) return true;\n\n const haystack = [\n entry.name,\n entry.github?.name ?? '',\n entry.github?.owner ?? '',\n entry.remoteUrl ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(normalizedFilter);\n });\n\n // Sort alphabetically\n return filtered.sort((a, b) => {\n if (sortByOrg) {\n // Sort by org/owner first, then by repo name\n const aOrg = (a.github?.owner ?? '').toLowerCase();\n const bOrg = (b.github?.owner ?? '').toLowerCase();\n const orgCompare = aOrg.localeCompare(bOrg);\n if (orgCompare !== 0) return orgCompare;\n }\n // Sort by repo name\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n }, [repositories, normalizedFilter, sortByOrg]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // Loading state\n if (loading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading local projects...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"local-projects-panel\" style={contentContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <FolderGit2 size={18} style={{ color: theme.colors.success || '#10b981' }} />\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Local Projects\n </span>\n {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.background,\n }}\n >\n {repositories.length}\n </span>\n )}\n <div style={{ marginLeft: 'auto', display: 'flex', gap: '8px' }}>\n <button\n onClick={() => setSortByOrg(!sortByOrg)}\n title={sortByOrg ? 'Sorting by organization' : 'Sorting by repo name'}\n style={{\n padding: '6px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: sortByOrg ? `${theme.colors.primary}20` : theme.colors.background,\n color: sortByOrg ? theme.colors.primary : theme.colors.textSecondary,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.15s',\n flexShrink: 0,\n }}\n >\n {sortByOrg ? <Building2 size={16} /> : <FolderGit2 size={16} />}\n </button>\n {panelActions.selectDirectory && (\n <button\n onClick={handleAddProject}\n disabled={isAdding}\n title=\"Add existing project\"\n style={{\n padding: '6px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n cursor: isAdding ? 'default' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: isAdding ? 0.6 : 1,\n transition: 'opacity 0.2s',\n flexShrink: 0,\n }}\n >\n <Plus size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Search bar */}\n <div style={{ padding: '8px 16px' }}>\n <div style={{ position: 'relative' }}>\n <Search\n size={16}\n style={{\n position: 'absolute',\n top: '50%',\n left: '12px',\n transform: 'translateY(-50%)',\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n zIndex: 1,\n }}\n />\n <input\n type=\"text\"\n value={filter}\n placeholder=\"Filter local projects...\"\n onChange={(event) => setFilter(event.target.value)}\n style={{\n width: '100%',\n boxSizing: 'border-box',\n padding: '8px 12px 8px 36px',\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 fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n </div>\n </div>\n\n {/* Scrollable content */}\n <div\n className=\"local-projects-list\"\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {/* Repository list */}\n {filteredAndSortedRepositories.map((entry) => (\n <LocalProjectCard\n key={entry.path}\n entry={entry}\n isSelected={selectedEntry?.path === entry.path}\n onSelect={handleSelectRepository}\n onOpen={handleOpenRepository}\n onRemove={handleRemoveRepository}\n windowState={windowStates.get(entry.path) || 'closed'}\n />\n ))}\n\n {/* No results message */}\n {filteredAndSortedRepositories.length === 0 && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>\n {normalizedFilter\n ? 'No local projects match your filter.'\n : 'No local projects found.'}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * LocalProjectsPanel - Browse and manage local Alexandria repositories\n *\n * Features:\n * - List all registered local repositories\n * - Search/filter by name, owner, or path\n * - Add new projects via directory picker\n * - Open projects in dev workspace\n * - Remove projects from registry\n *\n * Data Slices:\n * - alexandriaRepositories: List of AlexandriaEntry objects\n *\n * Events Emitted:\n * - industry-theme.local-projects:repository-selected\n * - industry-theme.local-projects:repository-opened\n *\n * Events Listened:\n * - industry-theme.local-projects:filter\n * - industry-theme.local-projects:select-repository\n * - industry-theme.local-projects:open-repository\n */\nexport const LocalProjectsPanel: React.FC<PanelComponentProps> = (props) => {\n return <LocalProjectsPanelContent {...props} />;\n};\n\n/**\n * LocalProjectsPanelPreview - Compact preview for panel tabs/thumbnails\n */\nexport const LocalProjectsPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <div\n style={{\n width: '16px',\n height: '16px',\n borderRadius: '2px',\n backgroundColor: `${theme.colors.success || '#10b981'}40`,\n }}\n />\n <span>Local Projects</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Browse your cloned repositories sorted by recent activity\n </div>\n </div>\n );\n};\n\n// Re-export types and components\nexport type { LocalProjectCardProps, RepositoryAvatarProps } from './types';\nexport { LocalProjectCard } from './LocalProjectCard';\nexport { RepositoryAvatar } from './RepositoryAvatar';\n","import React, { useMemo, useEffect, useCallback, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Folder, Home, Check } from 'lucide-react';\nimport type { AlexandriaEntry } from '@principal-ai/alexandria-core-library/types';\nimport type { PanelComponentProps } from '../../types';\nimport { LocalProjectCard } from '../LocalProjectsPanel/LocalProjectCard';\nimport '../LocalProjectsPanel/LocalProjectsPanel.css';\nimport type { Workspace, WorkspaceRepositoriesPanelActions } from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.workspace-repositories';\n\n// Helper to create panel events\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * WorkspaceRepositoriesPanelContent - Internal component that uses theme\n */\nconst WorkspaceRepositoriesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [repositoryLocations, setRepositoryLocations] = React.useState<Map<string, boolean>>(\n new Map()\n );\n const [copiedPath, setCopiedPath] = useState(false);\n const [isPathHovered, setIsPathHovered] = useState(false);\n\n // Get extended actions\n const panelActions = actions as WorkspaceRepositoriesPanelActions;\n\n // Get data from context using framework's getSlice pattern\n const workspaceSlice = context.getSlice<Workspace>('workspace');\n const repositoriesSlice = context.getSlice<AlexandriaEntry[]>('workspaceRepositories');\n const userHomePathSlice = context.getSlice<string>('userHomePath');\n\n const workspace = workspaceSlice?.data ?? null;\n const userHomePath = userHomePathSlice?.data ?? undefined;\n const isLoading = workspaceSlice?.loading || repositoriesSlice?.loading || false;\n\n // Sort repositories alphabetically by name\n const sortedRepositories = useMemo(() => {\n const repos = repositoriesSlice?.data ?? [];\n return [...repos].sort((a, b) => a.name.localeCompare(b.name));\n }, [repositoriesSlice?.data]);\n\n // Check locations for all repositories\n useEffect(() => {\n const checkLocations = async () => {\n if (!workspace?.id || !panelActions.isRepositoryInWorkspaceDirectory || !sortedRepositories.length) {\n return;\n }\n\n const locationMap = new Map<string, boolean>();\n await Promise.all(\n sortedRepositories.map(async (repo) => {\n try {\n const isInWorkspace = await panelActions.isRepositoryInWorkspaceDirectory!(repo, workspace.id);\n if (isInWorkspace !== null) {\n locationMap.set(repo.path, isInWorkspace);\n }\n } catch (error) {\n console.error(`Failed to check location for ${repo.name}:`, error);\n }\n })\n );\n setRepositoryLocations(locationMap);\n };\n\n checkLocations();\n }, [workspace, sortedRepositories, panelActions]);\n\n // Group repositories by location\n const { repositoriesInWorkspace, repositoriesOutsideWorkspace } = useMemo(() => {\n const inWorkspace: AlexandriaEntry[] = [];\n const outsideWorkspace: AlexandriaEntry[] = [];\n\n sortedRepositories.forEach((repo) => {\n const isInWorkspace = repositoryLocations.get(repo.path);\n if (isInWorkspace === true) {\n inWorkspace.push(repo);\n } else if (isInWorkspace === false) {\n outsideWorkspace.push(repo);\n }\n });\n\n return { repositoriesInWorkspace: inWorkspace, repositoriesOutsideWorkspace: outsideWorkspace };\n }, [sortedRepositories, repositoryLocations]);\n\n // Event handlers\n const handleSelectRepository = useCallback(\n (repository: AlexandriaEntry) => {\n events.emit(\n createPanelEvent('repository:selected', {\n repositoryId: repository.github?.id || repository.name,\n repository,\n repositoryPath: repository.path,\n })\n );\n },\n [events]\n );\n\n const handleOpenRepository = useCallback(\n (repository: AlexandriaEntry) => {\n events.emit(\n createPanelEvent('repository:opened', {\n repositoryId: repository.github?.id || repository.name,\n repository,\n })\n );\n },\n [events]\n );\n\n const handleRemoveFromWorkspace = useCallback(\n async (repository: AlexandriaEntry) => {\n if (!workspace?.id || !panelActions.removeRepositoryFromWorkspace) return;\n try {\n const repositoryId = repository.github?.id || repository.name;\n await panelActions.removeRepositoryFromWorkspace(repositoryId, workspace.id);\n } catch (error) {\n console.error('Failed to remove repository from workspace:', error);\n alert(\n `Failed to remove repository: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n [workspace, panelActions]\n );\n\n const handleMoveToWorkspace = useCallback(\n async (repository: AlexandriaEntry) => {\n if (!workspace?.id || !panelActions.moveRepositoryToWorkspaceDirectory) return;\n try {\n await panelActions.moveRepositoryToWorkspaceDirectory(repository, workspace.id);\n setRepositoryLocations((prev) => new Map(prev).set(repository.path, true));\n } catch (error) {\n console.error('Failed to move repository:', error);\n alert(\n `Failed to move repository: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n },\n [workspace, panelActions]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ repositoryPath: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const path = event.payload?.repositoryPath;\n if (path) {\n const repository = sortedRepositories.find((r) => r.path === path);\n if (repository) {\n handleSelectRepository(repository);\n }\n }\n }),\n\n events.on<{ repositoryPath: string }>(`${PANEL_ID}:open-repository`, (event) => {\n const path = event.payload?.repositoryPath;\n if (path) {\n const repository = sortedRepositories.find((r) => r.path === path);\n if (repository) {\n handleOpenRepository(repository);\n }\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, sortedRepositories, handleSelectRepository, handleOpenRepository]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // No workspace selected\n if (!workspace) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <Folder\n size={48}\n style={{\n color: theme.colors.textSecondary,\n opacity: 0.5,\n }}\n />\n <div>\n <h3\n style={{\n margin: '0 0 8px 0',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n No Workspace Selected\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a workspace to see its repositories.\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={contentContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Folder 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 fontFamily: theme.fonts.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {workspace.name}\n </span>\n {sortedRepositories.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.background,\n flexShrink: 0,\n }}\n >\n {sortedRepositories.length}\n </span>\n )}\n {/* Home directory button */}\n {workspace.suggestedClonePath && (\n <button\n type=\"button\"\n onClick={async () => {\n try {\n await navigator.clipboard.writeText(workspace.suggestedClonePath!);\n setCopiedPath(true);\n setTimeout(() => setCopiedPath(false), 2000);\n } catch (err) {\n console.error('Failed to copy path:', err);\n }\n }}\n onMouseEnter={() => setIsPathHovered(true)}\n onMouseLeave={() => setIsPathHovered(false)}\n title={copiedPath ? 'Copied!' : `Click to copy: ${workspace.suggestedClonePath}`}\n style={{\n marginLeft: 'auto',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 8px',\n borderRadius: '4px',\n border: `1px solid ${copiedPath ? theme.colors.success || '#10b981' : theme.colors.border}`,\n backgroundColor: copiedPath\n ? `${theme.colors.success || '#10b981'}15`\n : theme.colors.backgroundTertiary,\n color: copiedPath\n ? theme.colors.success || '#10b981'\n : theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n minWidth: 0,\n maxWidth: isPathHovered || copiedPath ? '200px' : '32px',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {copiedPath ? <Check size={14} style={{ flexShrink: 0 }} /> : <Home size={14} style={{ flexShrink: 0 }} />}\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.monospace,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n opacity: isPathHovered || copiedPath ? 1 : 0,\n width: isPathHovered || copiedPath ? 'auto' : 0,\n transition: 'opacity 0.15s ease',\n }}\n >\n {copiedPath ? 'Copied!' : workspace.suggestedClonePath}\n </span>\n </button>\n )}\n </div>\n\n {/* Workspace description */}\n {workspace.description && (\n <div style={{ padding: '8px 16px' }}>\n <p\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n {workspace.description}\n </p>\n </div>\n )}\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '8px 16px',\n }}\n >\n {/* Empty state */}\n {sortedRepositories.length === 0 && !isLoading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>No repositories in this workspace.</p>\n </div>\n )}\n\n {/* Repositories in workspace directory */}\n {repositoriesInWorkspace.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <h4\n style={{\n margin: 0,\n paddingBottom: '4px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n In Workspace Directory\n </h4>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {repositoriesInWorkspace.map((repository) => (\n <LocalProjectCard\n key={repository.path}\n entry={repository}\n actionMode=\"workspace\"\n isInWorkspaceDirectory={true}\n workspacePath={workspace.suggestedClonePath}\n userHomePath={userHomePath}\n onSelect={handleSelectRepository}\n onOpen={handleOpenRepository}\n onRemoveFromWorkspace={handleRemoveFromWorkspace}\n onMoveToWorkspace={handleMoveToWorkspace}\n />\n ))}\n </div>\n </div>\n )}\n\n {/* Repositories outside workspace directory */}\n {repositoriesOutsideWorkspace.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n <h4\n style={{\n margin: 0,\n paddingBottom: '4px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}\n >\n Outside Workspace Directory\n </h4>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {repositoriesOutsideWorkspace.map((repository) => (\n <LocalProjectCard\n key={repository.path}\n entry={repository}\n actionMode=\"workspace\"\n isInWorkspaceDirectory={false}\n workspacePath={workspace.suggestedClonePath}\n userHomePath={userHomePath}\n onSelect={handleSelectRepository}\n onOpen={handleOpenRepository}\n onRemoveFromWorkspace={handleRemoveFromWorkspace}\n onMoveToWorkspace={handleMoveToWorkspace}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * WorkspaceRepositoriesPanel - Workspace repository management panel\n *\n * Features:\n * - List all repositories in a workspace\n * - Group by in/outside workspace directory\n * - Move repositories to workspace directory\n * - Remove repositories from workspace\n *\n * Data Slices:\n * - workspace: Workspace object\n * - workspaceRepositories: AlexandriaEntry[]\n *\n * Events Emitted:\n * - repository:selected\n * - repository:opened\n */\nexport const WorkspaceRepositoriesPanel: React.FC<PanelComponentProps> = (props) => {\n return <WorkspaceRepositoriesPanelContent {...props} />;\n};\n\n// Re-export types\nexport type {\n Workspace,\n WorkspaceRepositoriesPanelActions,\n RepositorySelectedPayload,\n RepositoryOpenedPayload,\n} from './types';\n","import React, { useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { DoorClosed, Edit2, Check, X, ExternalLink, Trash2, Lock } from 'lucide-react';\nimport type { WorkspaceCardProps } from './types';\n\n/**\n * WorkspaceCard - Displays a single workspace with actions\n */\nexport const WorkspaceCard: React.FC<WorkspaceCardProps> = ({\n workspace,\n isSelected = false,\n isDefault = false,\n onClick,\n onOpen,\n onDelete,\n onUpdateName,\n themeColor,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [isEditing, setIsEditing] = useState(false);\n const [editedName, setEditedName] = useState(workspace.name);\n const [isSaving, setIsSaving] = useState(false);\n\n // Use theme color or fallback to primary\n const iconColor = themeColor || theme.colors.primary;\n\n const handleStartEdit = (e: React.MouseEvent) => {\n e.stopPropagation();\n setIsEditing(true);\n setEditedName(workspace.name);\n };\n\n const handleSave = async (e?: React.MouseEvent) => {\n if (e) e.stopPropagation();\n\n const trimmedName = editedName.trim();\n if (!trimmedName || trimmedName === workspace.name) {\n setIsEditing(false);\n setEditedName(workspace.name);\n return;\n }\n\n if (!onUpdateName) {\n setIsEditing(false);\n return;\n }\n\n try {\n setIsSaving(true);\n await onUpdateName(workspace.id, trimmedName);\n setIsEditing(false);\n } catch (error) {\n console.error('Failed to update workspace name:', error);\n setEditedName(workspace.name);\n } finally {\n setIsSaving(false);\n }\n };\n\n const handleCancel = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation();\n setIsEditing(false);\n setEditedName(workspace.name);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n handleCancel();\n }\n };\n\n const handleClick = () => {\n if (!isEditing) {\n onClick?.(workspace);\n }\n };\n\n const handleDoubleClick = () => {\n if (!isEditing) {\n onOpen?.(workspace);\n }\n };\n\n const handleOpenClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onOpen?.(workspace);\n };\n\n const handleDeleteClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onDelete?.(workspace);\n };\n\n const cardStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'row',\n gap: '8px',\n padding: '12px',\n borderRadius: '6px',\n backgroundColor: isSelected\n ? theme.colors.backgroundTertiary\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${\n isSelected\n ? theme.colors.primary || theme.colors.border\n : isHovered\n ? theme.colors.border\n : 'transparent'\n }`,\n cursor: isEditing ? 'default' : 'pointer',\n transition: 'all 0.15s ease',\n };\n\n const headerStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n };\n\n const actionButtonStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n flex: 1,\n height: '24px',\n padding: '0 8px',\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n transition: 'all 0.15s ease',\n };\n\n return (\n <div\n style={cardStyle}\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Icon */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '48px',\n height: '48px',\n borderRadius: '6px',\n backgroundColor: `color-mix(in srgb, ${iconColor} 12%, transparent)`,\n color: iconColor,\n flexShrink: 0,\n }}\n >\n {workspace.icon ? (\n <span style={{ fontSize: `${theme.fontSizes[4]}px` }}>{workspace.icon}</span>\n ) : (\n <DoorClosed size={28} />\n )}\n </div>\n\n {/* Content column */}\n <div\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n minWidth: 0,\n }}\n >\n {/* Header row */}\n <div style={headerStyle}>\n {isEditing ? (\n <>\n <input\n type=\"text\"\n value={editedName}\n onChange={(e) => setEditedName(e.target.value)}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n autoFocus\n disabled={isSaving}\n style={{\n flex: 1,\n padding: '4px 8px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n <button\n onClick={handleSave}\n disabled={isSaving}\n title=\"Save (Enter)\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: theme.colors.success,\n color: theme.colors.background,\n cursor: isSaving ? 'not-allowed' : 'pointer',\n opacity: isSaving ? 0.6 : 1,\n transition: 'opacity 0.15s ease',\n }}\n >\n <Check size={16} />\n </button>\n <button\n onClick={handleCancel}\n disabled={isSaving}\n title=\"Cancel (Esc)\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: isSaving ? 'not-allowed' : 'pointer',\n opacity: isSaving ? 0.6 : 1,\n transition: 'opacity 0.15s ease',\n }}\n >\n <X size={16} />\n </button>\n </>\n ) : (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {workspace.name}\n </span>\n {/* Private badge */}\n {workspace.isPrivate && (\n <span title=\"Private workspace\">\n <Lock\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n {/* Spacer to push default badge right */}\n <span style={{ flex: 1 }} />\n {isDefault && (\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontWeight: 400,\n flexShrink: 0,\n }}\n >\n Default\n </span>\n )}\n </>\n )}\n </div>\n\n {/* Description row with action buttons */}\n {!isEditing && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n minHeight: '24px',\n position: 'relative',\n }}\n >\n {/* Description - hidden when hovered */}\n <div\n style={{\n flex: 1,\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n lineHeight: 1.4,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n minWidth: 0,\n opacity: isHovered ? 0 : 1,\n transition: 'opacity 0.15s ease',\n }}\n title={workspace.description}\n >\n {workspace.description || '\\u00A0'}\n </div>\n\n {/* Action buttons - cover full width when hovered */}\n <div\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n transition: 'opacity 0.15s ease',\n }}\n >\n {onOpen && (\n <button\n onClick={handleOpenClick}\n title=\"Open workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <ExternalLink size={14} />\n <span>Open</span>\n </button>\n )}\n {onUpdateName && (\n <button\n onClick={handleStartEdit}\n title=\"Edit workspace name\"\n style={actionButtonStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <Edit2 size={14} />\n <span>Edit</span>\n </button>\n )}\n {onDelete && (\n <button\n onClick={handleDeleteClick}\n title=\"Delete workspace\"\n style={actionButtonStyle}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${theme.colors.error}15`;\n e.currentTarget.style.color = theme.colors.error;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <Trash2 size={14} />\n <span>Delete</span>\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { Search, Plus, X, Layers } from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport { WorkspaceCard } from './WorkspaceCard';\nimport type {\n Workspace,\n WorkspacesSlice,\n WorkspacesListPanelActions,\n} from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.workspaces-list';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * WorkspacesListPanelContent - Internal component that uses theme\n */\nconst WorkspacesListPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [searchQuery, setSearchQuery] = useState('');\n const [showSearchBox, setShowSearchBox] = useState(false);\n const [selectedWorkspaceId, setSelectedWorkspaceId] = useState<string | null>(null);\n const [workspaceRepositories, setWorkspaceRepositories] = useState<Map<string, string[]>>(\n new Map()\n );\n\n // Get extended actions\n const panelActions = actions as WorkspacesListPanelActions;\n\n // Get workspaces from context slice\n const workspacesSlice = context.getSlice<WorkspacesSlice>('workspaces');\n const workspaces = useMemo(\n () => workspacesSlice?.data?.workspaces || [],\n [workspacesSlice?.data?.workspaces]\n );\n const defaultWorkspaceId = workspacesSlice?.data?.defaultWorkspaceId ?? null;\n const loading = workspacesSlice?.loading ?? false;\n\n // Load repository names for search functionality\n useEffect(() => {\n const loadRepositories = async () => {\n if (!panelActions.getWorkspaceRepositories || workspaces.length === 0) {\n return;\n }\n\n const repoMap = new Map<string, string[]>();\n await Promise.all(\n workspaces.map(async (workspace) => {\n try {\n const repos = await panelActions.getWorkspaceRepositories!(workspace.id);\n repoMap.set(workspace.id, repos.map((r) => r.name));\n } catch (error) {\n console.error(`Failed to load repos for workspace ${workspace.id}:`, error);\n repoMap.set(workspace.id, []);\n }\n })\n );\n setWorkspaceRepositories(repoMap);\n };\n\n loadRepositories();\n }, [workspaces, panelActions]);\n\n // Filter and sort workspaces\n const sortedWorkspaces = useMemo(() => {\n let filtered = workspaces;\n\n // Apply search filter\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase().trim();\n filtered = workspaces.filter((workspace) => {\n // Search by workspace name\n if (workspace.name.toLowerCase().includes(query)) {\n return true;\n }\n\n // Search by description\n if (workspace.description?.toLowerCase().includes(query)) {\n return true;\n }\n\n // Search by repository names in this workspace\n const repos = workspaceRepositories.get(workspace.id) || [];\n return repos.some((repoName) => repoName.toLowerCase().includes(query));\n });\n }\n\n // Sort: default workspace first, then by name alphabetically\n return [...filtered].sort((a, b) => {\n // Default workspace always first\n if (a.id === defaultWorkspaceId) return -1;\n if (b.id === defaultWorkspaceId) return 1;\n\n // Then sort alphabetically by name (case-insensitive)\n return a.name.toLowerCase().localeCompare(b.name.toLowerCase());\n });\n }, [workspaces, defaultWorkspaceId, searchQuery, workspaceRepositories]);\n\n // Handle workspace selection\n const handleWorkspaceSelect = useCallback(\n (workspace: Workspace) => {\n setSelectedWorkspaceId(workspace.id);\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:selected`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n },\n [events]\n );\n\n // Handle workspace open\n const handleOpenWorkspace = useCallback(\n async (workspace: Workspace) => {\n if (!panelActions.openWorkspace) {\n console.warn('Open workspace action not available');\n return;\n }\n\n try {\n await panelActions.openWorkspace(workspace.id);\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:opened`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n } catch (error) {\n console.error('Failed to open workspace:', error);\n }\n },\n [panelActions, events]\n );\n\n // Handle workspace delete\n const handleDeleteWorkspace = useCallback(\n async (workspace: Workspace) => {\n if (!panelActions.deleteWorkspace) {\n console.warn('Delete workspace action not available');\n return;\n }\n\n // Confirm deletion\n const confirmed = window.confirm(\n `Are you sure you want to delete \"${workspace.name}\"? This action cannot be undone.`\n );\n\n if (!confirmed) return;\n\n try {\n await panelActions.deleteWorkspace(workspace.id);\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:deleted`, {\n workspaceId: workspace.id,\n })\n );\n\n // Refresh workspaces\n await context.refresh('workspace', 'workspaces');\n } catch (error) {\n console.error('Failed to delete workspace:', error);\n }\n },\n [panelActions, events, context]\n );\n\n // Handle workspace name update\n const handleUpdateWorkspaceName = useCallback(\n async (workspaceId: string, newName: string) => {\n if (!panelActions.updateWorkspace) {\n console.warn('Update workspace action not available');\n return;\n }\n\n await panelActions.updateWorkspace(workspaceId, { name: newName });\n\n // Refresh workspaces\n await context.refresh('workspace', 'workspaces');\n },\n [panelActions, context]\n );\n\n // Handle create workspace - emits event for host app to show modal\n const handleCreateWorkspace = useCallback(() => {\n // Emit event for host app to handle (e.g., show a modal)\n events.emit(\n createPanelEvent(`${PANEL_ID}:create-workspace-requested`, {})\n );\n }, [events]);\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n // Select workspace event from tools\n events.on<{ workspaceId: string }>(`${PANEL_ID}:select-workspace`, (event) => {\n const workspaceId = event.payload?.workspaceId;\n if (workspaceId) {\n const workspace = workspaces.find((w) => w.id === workspaceId);\n if (workspace) {\n handleWorkspaceSelect(workspace);\n }\n }\n }),\n\n // Open workspace event from tools\n events.on<{ workspaceId: string }>(`${PANEL_ID}:open-workspace`, (event) => {\n const workspaceId = event.payload?.workspaceId;\n if (workspaceId) {\n const workspace = workspaces.find((w) => w.id === workspaceId);\n if (workspace) {\n handleOpenWorkspace(workspace);\n }\n }\n }),\n\n // Create workspace event from tools\n events.on<{ name: string; description?: string }>(\n `${PANEL_ID}:create-workspace`,\n async (event) => {\n const { name, description } = event.payload || {};\n if (name && panelActions.createWorkspace) {\n try {\n const workspace = await panelActions.createWorkspace(name, { description });\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:created`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n await context.refresh('workspace', 'workspaces');\n } catch (error) {\n console.error('Failed to create workspace:', error);\n }\n }\n }\n ),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, workspaces, handleWorkspaceSelect, handleOpenWorkspace, panelActions, context]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // Loading state\n if (loading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading workspaces...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={contentContainerStyle}>\n {/* Header with search and create buttons */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <Layers 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 fontFamily: theme.fonts.body,\n }}\n >\n Workspaces\n </span>\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n onClick={() => {\n setShowSearchBox(!showSearchBox);\n if (showSearchBox) {\n setSearchQuery('');\n }\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: showSearchBox\n ? theme.colors.primary\n : theme.colors.backgroundTertiary,\n color: showSearchBox ? theme.colors.background : theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Search workspaces\"\n >\n <Search size={16} />\n </button>\n <button\n onClick={handleCreateWorkspace}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Create new workspace\"\n >\n <Plus size={16} />\n </button>\n </div>\n </div>\n\n {/* Search box */}\n {showSearchBox && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 16px',\n }}\n >\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Search by workspace or repository name...\"\n autoFocus\n style={{\n flex: 1,\n padding: '8px 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 fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => setSearchQuery('')}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Clear search\"\n >\n <X size={16} />\n </button>\n )}\n </div>\n )}\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {/* Workspace list */}\n {sortedWorkspaces.map((workspace) => (\n <WorkspaceCard\n key={workspace.id}\n workspace={workspace}\n isSelected={workspace.id === selectedWorkspaceId}\n isDefault={workspace.id === defaultWorkspaceId}\n onClick={handleWorkspaceSelect}\n onOpen={panelActions.openWorkspace ? handleOpenWorkspace : undefined}\n onDelete={panelActions.deleteWorkspace ? handleDeleteWorkspace : undefined}\n onUpdateName={panelActions.updateWorkspace ? handleUpdateWorkspaceName : undefined}\n />\n ))}\n\n {/* No results message */}\n {sortedWorkspaces.length === 0 && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>\n {searchQuery.trim()\n ? `No workspaces found matching \"${searchQuery}\"`\n : 'No workspaces found.'}\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * WorkspacesListPanel - Browse and manage workspaces\n *\n * Features:\n * - List all workspaces with default highlighted\n * - Search/filter by workspace name or repository names\n * - Create new workspaces\n * - Edit workspace names inline\n * - Delete workspaces\n * - Open workspaces in new windows\n *\n * Data Slices:\n * - workspaces: WorkspacesSlice object\n *\n * Events Emitted:\n * - industry-theme.workspaces-list:workspace:selected\n * - industry-theme.workspaces-list:workspace:opened\n * - industry-theme.workspaces-list:workspace:created\n * - industry-theme.workspaces-list:workspace:deleted\n *\n * Events Listened:\n * - industry-theme.workspaces-list:select-workspace\n * - industry-theme.workspaces-list:open-workspace\n * - industry-theme.workspaces-list:create-workspace\n */\nexport const WorkspacesListPanel: React.FC<PanelComponentProps> = (props) => {\n return <WorkspacesListPanelContent {...props} />;\n};\n\n/**\n * WorkspacesListPanelPreview - Compact preview for panel tabs/thumbnails\n */\nexport const WorkspacesListPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <Layers size={16} style={{ color: theme.colors.primary }} />\n <span>Workspaces</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Browse and manage your workspaces\n </div>\n </div>\n );\n};\n\n// Re-export components and types\nexport { WorkspaceCard } from './WorkspaceCard';\nexport type {\n Workspace,\n WorkspacesSlice,\n WorkspacesListPanelActions,\n WorkspaceCardProps,\n WorkspaceSelectedPayload,\n WorkspaceOpenedPayload,\n WorkspaceCreatedPayload,\n WorkspaceDeletedPayload,\n} from './types';\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n Folder,\n Loader2,\n Trash2,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type { GitHubRepository } from '../shared/github-types';\nimport type {\n Workspace,\n WorkspaceCollectionSlice,\n WorkspaceRepositoriesSlice,\n WorkspaceCollectionPanelActions,\n} from './types';\nimport { RepositoryAvatar } from '../LocalProjectsPanel/RepositoryAvatar';\n\ntype SortField = 'name' | 'updated';\n\nexport interface WorkspaceCollectionPanelProps extends PanelComponentProps {\n selectedRepository?: string; // full_name like \"owner/repo\"\n}\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.workspace-collection';\n\n// Helper to create panel events\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * WorkspaceCollectionRepositoryCard - Displays a repository in a workspace collection\n */\ninterface WorkspaceCollectionRepositoryCardProps {\n repository: GitHubRepository;\n isSelected?: boolean;\n onSelect?: (repo: GitHubRepository) => void;\n onNavigate?: (repo: GitHubRepository) => void;\n onRemove?: (repo: GitHubRepository) => void;\n}\n\nconst WorkspaceCollectionRepositoryCard: React.FC<WorkspaceCollectionRepositoryCardProps> = ({\n repository,\n isSelected = false,\n onSelect,\n onNavigate,\n onRemove,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n const handleClick = useCallback(() => {\n if (onSelect) {\n onSelect(repository);\n }\n }, [onSelect, repository]);\n\n const handleDoubleClick = useCallback(() => {\n if (onNavigate) {\n onNavigate(repository);\n }\n }, [onNavigate, repository]);\n\n const handleRemove = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onRemove) {\n onRemove(repository);\n }\n },\n [onRemove, repository]\n );\n\n // Format relative time\n const getRelativeTime = (dateString: 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 return (\n <div\n onClick={handleClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: isSelected\n ? `${theme.colors.primary}15`\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n borderLeft: `2px solid ${isSelected ? theme.colors.primary : 'transparent'}`,\n cursor: onSelect ? 'pointer' : 'default',\n transition: 'background-color 0.15s, border-color 0.15s',\n }}\n >\n {/* Avatar - show original owner for forks */}\n <RepositoryAvatar\n owner={repository.fork && repository.parent ? repository.parent.owner.login : repository.owner.login}\n customAvatarUrl={repository.fork && repository.parent ? repository.parent.owner.avatar_url : repository.owner.avatar_url}\n size={40}\n />\n\n {/* Content */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header row: name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '4px',\n }}\n >\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={repository.full_name}\n >\n {repository.name}\n </span>\n </div>\n\n {/* Owner - show \"forked by\" for forks */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginBottom: '4px',\n }}\n >\n {repository.fork && repository.parent ? (\n <>\n {repository.parent.owner.login}\n <span style={{ opacity: 0.7 }}> · forked by </span>\n {repository.owner.login}\n </>\n ) : (\n repository.owner.login\n )}\n </div>\n\n {/* Description */}\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n marginBottom: '8px',\n }}\n >\n {repository.description}\n </div>\n )}\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n }}\n >\n {/* Language */}\n {repository.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: getLanguageColor(repository.language),\n }}\n />\n {repository.language}\n </span>\n )}\n\n {/* Updated time */}\n <span>Updated {getRelativeTime(repository.pushed_at || repository.updated_at)}</span>\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n opacity: isHovered || isSelected ? 1 : 0,\n transition: 'opacity 0.15s',\n }}\n >\n {/* Remove from workspace button */}\n {onRemove && (\n <button\n type=\"button\"\n onClick={handleRemove}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n }}\n title=\"Remove from workspace\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = `${theme.colors.error || '#ef4444'}20`;\n e.currentTarget.style.color = theme.colors.error || '#ef4444';\n e.currentTarget.style.borderColor = theme.colors.error || '#ef4444';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n e.currentTarget.style.borderColor = theme.colors.border;\n }}\n >\n <Trash2 size={16} />\n </button>\n )}\n </div>\n </div>\n );\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: '#3572A5',\n Rust: '#dea584',\n Go: '#00ADD8',\n Java: '#b07219',\n Ruby: '#701516',\n PHP: '#4F5D95',\n 'C++': '#f34b7d',\n C: '#555555',\n 'C#': '#178600',\n Swift: '#F05138',\n Kotlin: '#A97BFF',\n Shell: '#89e051',\n HTML: '#e34c26',\n CSS: '#563d7c',\n Vue: '#41b883',\n Svelte: '#ff3e00',\n };\n return colors[language] || '#8b949e';\n}\n\n/**\n * WorkspaceCollectionPanelContent - Internal component that uses theme\n */\nconst WorkspaceCollectionPanelContent: React.FC<WorkspaceCollectionPanelProps> = ({\n context,\n actions,\n events,\n selectedRepository,\n}) => {\n const { theme } = useTheme();\n const [selectedRepo, setSelectedRepo] = useState<GitHubRepository | null>(null);\n const [sortField, setSortField] = useState<SortField>('name');\n\n // Get extended actions\n const panelActions = actions as WorkspaceCollectionPanelActions;\n\n // Get data from context using framework's getSlice pattern\n const workspaceSlice = context.getSlice<WorkspaceCollectionSlice>('workspace');\n const repositoriesSlice = context.getSlice<WorkspaceRepositoriesSlice>('workspaceRepositories');\n\n const workspace = workspaceSlice?.data?.workspace ?? null;\n const repositories = repositoriesSlice?.data?.repositories ?? [];\n const isLoading = workspaceSlice?.loading || repositoriesSlice?.loading || false;\n const error = workspaceSlice?.data?.error || repositoriesSlice?.data?.error;\n\n // Sync selectedRepository prop with internal state\n useEffect(() => {\n if (selectedRepository && repositories.length > 0) {\n const repo = repositories.find(r => r.full_name === selectedRepository);\n if (repo) {\n setSelectedRepo(repo);\n }\n }\n }, [selectedRepository, repositories]);\n\n // Listen for repository:selected events to sync selection\n useEffect(() => {\n const unsubscribe = events.on('repository:selected', (event) => {\n const payload = event.payload as { repository?: { id?: number; full_name?: string } };\n if (payload?.repository?.full_name && repositories.length > 0) {\n const repo = repositories.find(r => r.full_name === payload.repository?.full_name);\n if (repo) {\n setSelectedRepo(repo);\n }\n }\n });\n\n return () => unsubscribe();\n }, [events, repositories]);\n\n // Toggle sort between name and updated\n const toggleSort = () => {\n setSortField(sortField === 'name' ? 'updated' : 'name');\n };\n\n // Sort repositories\n const sortedRepositories = useMemo(() => {\n return [...repositories].sort((a, b) => {\n if (sortField === 'name') {\n return a.name.localeCompare(b.name);\n } else {\n // Sort by updated (most recent first)\n const aTime = new Date(a.pushed_at || a.updated_at || 0).getTime();\n const bTime = new Date(b.pushed_at || b.updated_at || 0).getTime();\n return bTime - aTime;\n }\n });\n }, [repositories, sortField]);\n\n // Event handlers\n const handleSelectRepository = useCallback(\n (repository: GitHubRepository) => {\n setSelectedRepo(repository);\n events.emit(\n createPanelEvent('repository:selected', {\n repositoryKey: repository.full_name,\n repository,\n })\n );\n // Also call preview action if available\n if (panelActions.previewRepository) {\n panelActions.previewRepository(repository);\n }\n },\n [events, panelActions]\n );\n\n const handleNavigateRepository = useCallback(\n (repository: GitHubRepository) => {\n events.emit(\n createPanelEvent('repository:navigate', {\n owner: repository.owner.login,\n repo: repository.name,\n repository,\n })\n );\n if (panelActions.navigateToRepository) {\n panelActions.navigateToRepository(repository.owner.login, repository.name);\n }\n },\n [events, panelActions]\n );\n\n const handleRemoveRepository = useCallback(\n async (repository: GitHubRepository) => {\n if (!workspace?.id || !panelActions.removeRepositoryFromWorkspace) return;\n\n try {\n await panelActions.removeRepositoryFromWorkspace(repository.full_name, workspace.id);\n events.emit(\n createPanelEvent('repository:removed', {\n repositoryKey: repository.full_name,\n workspaceId: workspace.id,\n })\n );\n // Clear selection if removed repo was selected\n if (selectedRepo?.id === repository.id) {\n setSelectedRepo(null);\n }\n } catch (err) {\n console.error('Failed to remove repository from workspace:', err);\n }\n },\n [workspace, panelActions, events, selectedRepo]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ repositoryKey: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const key = event.payload?.repositoryKey;\n if (key) {\n const repository = repositories.find(\n (r) => r.full_name === key || r.name === key\n );\n if (repository) {\n handleSelectRepository(repository);\n }\n }\n }),\n\n events.on<{ repositoryKey: string }>(`${PANEL_ID}:navigate-repository`, (event) => {\n const key = event.payload?.repositoryKey;\n if (key) {\n const repository = repositories.find(\n (r) => r.full_name === key || r.name === key\n );\n if (repository) {\n handleNavigateRepository(repository);\n }\n }\n }),\n\n events.on<{ repositoryKey: string }>(`${PANEL_ID}:remove-repository`, (event) => {\n const key = event.payload?.repositoryKey;\n if (key) {\n const repository = repositories.find(\n (r) => r.full_name === key || r.name === key\n );\n if (repository) {\n void handleRemoveRepository(repository);\n }\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, repositories, handleSelectRepository, handleNavigateRepository, handleRemoveRepository]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n const contentContainerStyle: React.CSSProperties = {\n ...baseContainerStyle,\n };\n\n // No workspace selected\n if (!workspace) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <Folder\n size={48}\n style={{\n color: theme.colors.textSecondary,\n opacity: 0.5,\n }}\n />\n <div>\n <h3\n style={{\n margin: '0 0 8px 0',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n No Workspace Selected\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a workspace to see its repositories.\n </p>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n // Loading state\n if (isLoading && repositories.length === 0) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n }}\n >\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={contentContainerStyle}>\n {/* Header with repository count and sort toggle */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Folder 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 fontFamily: theme.fonts.body,\n }}\n >\n Repositories\n </span>\n {repositories.length > 0 && (\n <>\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.background,\n }}\n >\n {repositories.length}\n </span>\n <button\n onClick={toggleSort}\n style={{\n marginLeft: 'auto',\n padding: '4px 10px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n background: theme.colors.background,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {sortField === 'name' ? 'A-Z' : 'Recent'}\n </button>\n </>\n )}\n </div>\n\n {/* Error banner */}\n {error && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 14px',\n margin: '8px 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error || '#ef4444'}20`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <span>{error}</span>\n </div>\n )}\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {/* Empty state */}\n {repositories.length === 0 && !isLoading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Folder\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>No repositories in this workspace.</p>\n <p\n style={{\n margin: '8px 0 0 0',\n fontSize: `${theme.fontSizes[0]}px`,\n }}\n >\n Add repositories to organize your projects.\n </p>\n </div>\n )}\n\n {/* Repository list */}\n {sortedRepositories.map((repository) => (\n <WorkspaceCollectionRepositoryCard\n key={repository.id}\n repository={repository}\n isSelected={selectedRepo?.id === repository.id}\n onSelect={handleSelectRepository}\n onNavigate={panelActions.navigateToRepository ? handleNavigateRepository : undefined}\n onRemove={panelActions.removeRepositoryFromWorkspace ? handleRemoveRepository : undefined}\n />\n ))}\n </div>\n </div>\n );\n};\n\n/**\n * WorkspaceCollectionPanel - Browser-based workspace repository management panel\n *\n * Props:\n * - selectedRepository: Full name of the selected repo (e.g., \"owner/repo\")\n *\n * Features:\n * - List all repositories in a workspace\n * - Toggle between name (A-Z) and recently updated sorting\n * - Syncs selection with selectedRepository prop and repository:selected events\n * - Navigate to repository pages\n * - Remove repositories from workspace\n *\n * Data Slices:\n * - workspace: WorkspaceCollectionSlice\n * - workspaceRepositories: WorkspaceRepositoriesSlice\n *\n * Events Emitted:\n * - repository:selected\n * - repository:navigate\n * - repository:removed\n */\nexport const WorkspaceCollectionPanel: React.FC<WorkspaceCollectionPanelProps> = (props) => {\n return <WorkspaceCollectionPanelContent {...props} />;\n};\n\n/**\n * Preview component for panel tabs/thumbnails\n */\nexport const WorkspaceCollectionPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <Folder size={16} style={{ color: theme.colors.primary }} />\n <span>Workspace Collection</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Repositories in your workspace\n </div>\n </div>\n );\n};\n\n// Re-export types\nexport type {\n Workspace,\n WorkspaceCollectionSlice,\n WorkspaceRepositoriesSlice,\n WorkspaceCollectionPanelActions,\n RepositorySelectedPayload,\n RepositoryRemovedPayload,\n RepositoryNavigatePayload,\n} from './types';\n","import React, { useCallback, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n ExternalLink,\n GitFork,\n Lock,\n Star,\n FolderOpen,\n Download,\n Scale,\n} from 'lucide-react';\nimport type { GitHubRepository, LocalRepositoryReference } from './github-types';\nimport { RepositoryAvatar } from '../LocalProjectsPanel/RepositoryAvatar';\n\nexport interface GitHubRepositoryCardProps {\n /** GitHub repository data */\n repository: GitHubRepository;\n /** Local repository reference if cloned */\n localRepo?: LocalRepositoryReference;\n /** Callback when clone button is clicked */\n onClone?: (repo: GitHubRepository) => void;\n /** Callback when open button is clicked (for local repos) */\n onOpen?: (localPath: string) => void;\n /** Whether an operation is in progress */\n isLoading?: boolean;\n /** Whether the card is selected */\n isSelected?: boolean;\n /** Callback when card is clicked */\n onSelect?: (repo: GitHubRepository) => void;\n}\n\n/**\n * GitHubRepositoryCard - Displays a GitHub repository with clone/open actions\n *\n * Used by GitHubStarredPanel and GitHubProjectsPanel to display repositories\n * with consistent styling and behavior.\n */\nexport const GitHubRepositoryCard: React.FC<GitHubRepositoryCardProps> = ({\n repository,\n localRepo,\n onClone,\n onOpen,\n isLoading = false,\n isSelected = false,\n onSelect,\n}) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n const isCloned = Boolean(localRepo);\n\n const handleClone = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onClone && !isLoading) {\n onClone(repository);\n }\n },\n [onClone, repository, isLoading]\n );\n\n const handleOpen = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onOpen && localRepo && !isLoading) {\n onOpen(localRepo.path);\n }\n },\n [onOpen, localRepo, isLoading]\n );\n\n const handleClick = useCallback(() => {\n if (onSelect) {\n onSelect(repository);\n }\n }, [onSelect, repository]);\n\n const handleOpenOnGitHub = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n window.open(repository.html_url, '_blank', 'noopener,noreferrer');\n },\n [repository.html_url]\n );\n\n // Format relative time\n const getRelativeTime = (dateString: 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 return (\n <div\n onClick={handleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isSelected\n ? `${theme.colors.primary}15`\n : isHovered\n ? theme.colors.backgroundTertiary\n : 'transparent',\n border: `1px solid ${isSelected ? theme.colors.primary : 'transparent'}`,\n cursor: onSelect ? 'pointer' : 'default',\n transition: 'background-color 0.15s, border-color 0.15s',\n }}\n >\n {/* Avatar */}\n <RepositoryAvatar\n owner={repository.owner.login}\n customAvatarUrl={repository.owner.avatar_url}\n size={40}\n />\n\n {/* Content */}\n <div style={{ flex: 1, minWidth: 0 }}>\n {/* Header row: name + badges */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '4px',\n }}\n >\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n color: isCloned ? '#10b981' : theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n title={repository.full_name}\n >\n {repository.name}\n </span>\n\n {/* Badges */}\n {repository.private && (\n <span title=\"Private repository\">\n <Lock\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n {repository.fork && (\n <span title=\"Forked repository\">\n <GitFork\n size={12}\n style={{ color: theme.colors.textSecondary, flexShrink: 0 }}\n />\n </span>\n )}\n </div>\n\n {/* Owner */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginBottom: '4px',\n }}\n >\n {repository.owner.login}\n </div>\n\n {/* Description */}\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n marginBottom: '8px',\n }}\n >\n {repository.description}\n </div>\n )}\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n }}\n >\n {/* Language */}\n {repository.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: getLanguageColor(repository.language),\n }}\n />\n {repository.language}\n </span>\n )}\n\n {/* Stars */}\n {repository.stargazers_count !== undefined &&\n repository.stargazers_count > 0 && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={12} />\n {formatNumber(repository.stargazers_count)}\n </span>\n )}\n\n {/* License */}\n {repository.license && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Scale size={12} />\n {repository.license}\n </span>\n )}\n\n {/* Updated time */}\n <span>Updated {getRelativeTime(repository.pushed_at || repository.updated_at)}</span>\n </div>\n </div>\n\n {/* Actions */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexShrink: 0,\n }}\n >\n {/* Open on GitHub button */}\n <button\n type=\"button\"\n onClick={handleOpenOnGitHub}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n transition: 'background-color 0.15s, color 0.15s',\n }}\n title=\"Open on GitHub\"\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n e.currentTarget.style.color = theme.colors.text;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n <ExternalLink size={16} />\n </button>\n\n {/* Clone or Open button */}\n {isCloned ? (\n <button\n type=\"button\"\n onClick={handleOpen}\n disabled={isLoading || !onOpen}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#10b981',\n color: '#ffffff',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: isLoading || !onOpen ? 'not-allowed' : 'pointer',\n opacity: isLoading || !onOpen ? 0.6 : 1,\n transition: 'opacity 0.15s',\n }}\n title=\"Open in workspace\"\n >\n <FolderOpen size={14} />\n Open\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={handleClone}\n disabled={isLoading || !onClone}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 12px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: isLoading || !onClone ? 'not-allowed' : 'pointer',\n opacity: isLoading || !onClone ? 0.6 : 1,\n transition: 'opacity 0.15s',\n }}\n title=\"Clone repository\"\n >\n <Download size={14} />\n Clone\n </button>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Get color for programming language (simplified)\n */\nfunction getLanguageColor(language: string): string {\n const colors: Record<string, string> = {\n TypeScript: '#3178c6',\n JavaScript: '#f7df1e',\n Python: '#3572A5',\n Rust: '#dea584',\n Go: '#00ADD8',\n Java: '#b07219',\n Ruby: '#701516',\n PHP: '#4F5D95',\n 'C++': '#f34b7d',\n C: '#555555',\n 'C#': '#178600',\n Swift: '#F05138',\n Kotlin: '#A97BFF',\n Shell: '#89e051',\n HTML: '#e34c26',\n CSS: '#563d7c',\n Vue: '#41b883',\n Svelte: '#ff3e00',\n };\n return colors[language] || '#8b949e';\n}\n\n/**\n * Format large numbers with K/M suffixes\n */\nfunction formatNumber(num: number): string {\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}M`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}K`;\n }\n return num.toString();\n}\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { AlertCircle, Loader2, RotateCcw, Search, Star } from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type { AlexandriaRepositoriesSlice } from '../LocalProjectsPanel/types';\nimport type { GitHubStarredSlice, GitHubStarredPanelActions } from './types';\nimport type { GitHubRepository, LocalRepositoryReference } from '../shared/github-types';\nimport { GitHubRepositoryCard } from '../shared/GitHubRepositoryCard';\n\nconst PANEL_ID = 'industry-theme.github-starred';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * GitHubStarredPanel - Browse and manage starred GitHub repositories\n */\nexport const GitHubStarredPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubStarredPanelContent {...props} />;\n};\n\nconst GitHubStarredPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState('');\n const [selectedRepo, setSelectedRepo] = useState<GitHubRepository | null>(null);\n\n // Get data from slices\n const starredSlice = context.getSlice<GitHubStarredSlice>('githubStarred');\n const localReposSlice = context.getSlice<AlexandriaRepositoriesSlice>('alexandriaRepositories');\n\n const repositories = useMemo(\n () => starredSlice?.data?.repositories || [],\n [starredSlice?.data?.repositories]\n );\n const loading = starredSlice?.loading ?? false;\n const error = starredSlice?.data?.error;\n\n const localRepos = useMemo(\n () => localReposSlice?.data?.repositories || [],\n [localReposSlice?.data?.repositories]\n );\n\n // Cast actions to panel-specific type\n const panelActions = actions as GitHubStarredPanelActions;\n\n // Create local repo lookup map\n const localRepoMap = useMemo(() => {\n const map = new Map<string, LocalRepositoryReference>();\n\n localRepos.forEach((entry) => {\n // Index by GitHub full_name (owner/repo format)\n if (entry.github?.id) {\n map.set(entry.github.id, {\n path: entry.path,\n name: entry.name,\n githubFullName: entry.github.id,\n githubId: entry.github.id,\n });\n }\n\n // Index by owner/name combination\n if (entry.github?.owner && entry.github?.name) {\n const fullName = `${entry.github.owner}/${entry.github.name}`;\n map.set(fullName, {\n path: entry.path,\n name: entry.name,\n githubFullName: fullName,\n });\n }\n\n // Index by repository name (fallback)\n map.set(entry.name, {\n path: entry.path,\n name: entry.name,\n });\n });\n\n return map;\n }, [localRepos]);\n\n // Filter repositories\n const normalizedFilter = filter.trim().toLowerCase();\n\n const filteredRepositories = useMemo(() => {\n if (!normalizedFilter) {\n return repositories;\n }\n\n return repositories.filter((repo) => {\n const haystack = [\n repo.name,\n repo.full_name,\n repo.owner?.login ?? '',\n repo.description ?? '',\n repo.language ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(normalizedFilter);\n });\n }, [repositories, normalizedFilter]);\n\n // Sort alphabetically by name\n const sortedRepositories = useMemo(() => {\n return [...filteredRepositories].sort((a, b) =>\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n );\n }, [filteredRepositories]);\n\n // Event handlers\n const handleClone = useCallback(\n async (repo: GitHubRepository) => {\n if (panelActions.cloneRepository) {\n await panelActions.cloneRepository(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-cloned`, {\n repository: repo,\n })\n );\n }\n },\n [panelActions, events]\n );\n\n const handleOpen = useCallback(\n async (localPath: string) => {\n if (panelActions.openRepository) {\n await panelActions.openRepository(localPath);\n }\n },\n [panelActions]\n );\n\n const handleSelect = useCallback(\n (repo: GitHubRepository) => {\n setSelectedRepo(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-selected`, { repository: repo })\n );\n },\n [events]\n );\n\n const handleRefresh = useCallback(async () => {\n if (panelActions.refreshStarred) {\n await panelActions.refreshStarred();\n }\n }, [panelActions]);\n\n // Subscribe to tool events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ filter: string }>(`${PANEL_ID}:filter`, (event) => {\n setFilter(event.payload?.filter || '');\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = repositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n handleSelect(repo);\n }\n }\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:clone-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = repositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n void handleClone(repo);\n }\n }\n }),\n ];\n\n return () => {\n unsubscribers.forEach((unsub) => unsub());\n };\n }, [events, repositories, handleSelect, handleClone]);\n\n // Base styles\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n // Loading state\n if (loading && repositories.length === 0) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n }}\n >\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading starred repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error && repositories.length === 0) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <AlertCircle\n size={32}\n style={{ color: theme.colors.error || '#ef4444' }}\n />\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 fontFamily: theme.fonts.body,\n }}\n >\n Unable to load repositories\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </p>\n </div>\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: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontWeight: theme.fontWeights.semibold,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n <RotateCcw size={16} />\n Try again\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={baseContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <Star size={18} style={{ color: '#f59e0b' }} />\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Starred\n </span>\n {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.background,\n }}\n >\n {repositories.length}\n </span>\n )}\n </div>\n\n {/* Search bar */}\n <div style={{ position: 'relative', padding: '8px 16px' }}>\n <Search\n size={16}\n style={{\n position: 'absolute',\n top: '50%',\n left: '28px',\n transform: 'translateY(-50%)',\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n value={filter}\n placeholder=\"Filter starred repositories...\"\n onChange={(event) => setFilter(event.target.value)}\n style={{\n width: '100%',\n padding: '8px 12px 8px 36px',\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 fontFamily: theme.fonts.body,\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {/* Error banner (when we have data but also an error) */}\n {error && repositories.length > 0 && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 14px',\n margin: '0 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error || '#ef4444'}20`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n {/* Repository list */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n padding: '8px',\n }}\n >\n {sortedRepositories.map((repo) => (\n <GitHubRepositoryCard\n key={repo.id}\n repository={repo}\n localRepo={localRepoMap.get(repo.full_name)}\n onClone={handleClone}\n onOpen={handleOpen}\n onSelect={handleSelect}\n isSelected={selectedRepo?.id === repo.id}\n />\n ))}\n\n {/* Empty state */}\n {sortedRepositories.length === 0 && repositories.length > 0 && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>No repositories match your filter.</p>\n </div>\n )}\n\n {/* No starred repos */}\n {repositories.length === 0 && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Star\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>\n You haven't starred any repositories yet.\n </p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Preview component for panel tabs/thumbnails\n */\nexport const GitHubStarredPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <Star size={16} style={{ color: '#f59e0b' }} />\n <span>Starred Repositories</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Browse your starred GitHub repositories\n </div>\n </div>\n );\n};\n\nexport { GitHubRepositoryCard } from '../shared/GitHubRepositoryCard';\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n AlertCircle,\n Building2,\n ChevronDown,\n ChevronRight,\n FolderGit2,\n Loader2,\n RotateCcw,\n Search,\n User,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type { AlexandriaRepositoriesSlice } from '../LocalProjectsPanel/types';\nimport type { GitHubProjectsSlice, GitHubProjectsPanelActions } from './types';\nimport type { GitHubRepository, LocalRepositoryReference } from '../shared/github-types';\nimport { GitHubRepositoryCard } from '../shared/GitHubRepositoryCard';\n\nconst PANEL_ID = 'industry-theme.github-projects';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * GitHubProjectsPanel - Browse user's repositories and organization repositories\n */\nexport const GitHubProjectsPanel: React.FC<PanelComponentProps> = (props) => {\n return <GitHubProjectsPanelContent {...props} />;\n};\n\nconst GitHubProjectsPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState('');\n const [collapsedSections, setCollapsedSections] = useState<Set<string>>(new Set());\n const [selectedRepo, setSelectedRepo] = useState<GitHubRepository | null>(null);\n\n // Get data from slices\n const projectsSlice = context.getSlice<GitHubProjectsSlice>('githubProjects');\n const localReposSlice = context.getSlice<AlexandriaRepositoriesSlice>('alexandriaRepositories');\n\n const userRepositories = useMemo(\n () => projectsSlice?.data?.userRepositories || [],\n [projectsSlice?.data?.userRepositories]\n );\n const organizations = useMemo(\n () => projectsSlice?.data?.organizations || [],\n [projectsSlice?.data?.organizations]\n );\n const orgRepositories = useMemo(\n () => projectsSlice?.data?.orgRepositories || {},\n [projectsSlice?.data?.orgRepositories]\n );\n const currentUser = projectsSlice?.data?.currentUser;\n const loading = projectsSlice?.loading ?? false;\n const error = projectsSlice?.data?.error;\n\n const localRepos = useMemo(\n () => localReposSlice?.data?.repositories || [],\n [localReposSlice?.data?.repositories]\n );\n\n // Cast actions to panel-specific type\n const panelActions = actions as GitHubProjectsPanelActions;\n\n // Create local repo lookup map\n const localRepoMap = useMemo(() => {\n const map = new Map<string, LocalRepositoryReference>();\n\n localRepos.forEach((entry) => {\n if (entry.github?.id) {\n map.set(entry.github.id, {\n path: entry.path,\n name: entry.name,\n githubFullName: entry.github.id,\n githubId: entry.github.id,\n });\n }\n\n if (entry.github?.owner && entry.github?.name) {\n const fullName = `${entry.github.owner}/${entry.github.name}`;\n map.set(fullName, {\n path: entry.path,\n name: entry.name,\n githubFullName: fullName,\n });\n }\n\n map.set(entry.name, {\n path: entry.path,\n name: entry.name,\n });\n });\n\n return map;\n }, [localRepos]);\n\n // Filter repositories\n const normalizedFilter = filter.trim().toLowerCase();\n\n const filterRepos = useCallback(\n (repos: GitHubRepository[]) => {\n if (!normalizedFilter) return repos;\n\n return repos.filter((repo) => {\n const haystack = [\n repo.name,\n repo.full_name,\n repo.owner?.login ?? '',\n repo.description ?? '',\n repo.language ?? '',\n ]\n .join(' ')\n .toLowerCase();\n\n return haystack.includes(normalizedFilter);\n });\n },\n [normalizedFilter]\n );\n\n const filteredUserRepos = useMemo(\n () => filterRepos(userRepositories),\n [filterRepos, userRepositories]\n );\n\n const filteredOrgRepos = useMemo(() => {\n const result: Record<string, GitHubRepository[]> = {};\n for (const [orgLogin, repos] of Object.entries(orgRepositories)) {\n if (!Array.isArray(repos)) continue;\n const filtered = filterRepos(repos);\n if (filtered.length > 0) {\n result[orgLogin] = filtered;\n }\n }\n return result;\n }, [filterRepos, orgRepositories]);\n\n // Get all repositories for tool lookups\n const allRepositories = useMemo(() => {\n const all = [...userRepositories];\n for (const repos of Object.values(orgRepositories)) {\n if (Array.isArray(repos)) {\n all.push(...repos);\n }\n }\n return all;\n }, [userRepositories, orgRepositories]);\n\n // Has any data\n const hasData =\n userRepositories.length > 0 ||\n organizations.length > 0 ||\n Object.keys(orgRepositories).length > 0;\n\n // Event handlers\n const handleClone = useCallback(\n async (repo: GitHubRepository) => {\n if (panelActions.cloneRepository) {\n await panelActions.cloneRepository(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-cloned`, {\n repository: repo,\n })\n );\n }\n },\n [panelActions, events]\n );\n\n const handleOpen = useCallback(\n async (localPath: string) => {\n if (panelActions.openRepository) {\n await panelActions.openRepository(localPath);\n }\n },\n [panelActions]\n );\n\n const handleSelect = useCallback(\n (repo: GitHubRepository) => {\n setSelectedRepo(repo);\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository-selected`, { repository: repo })\n );\n },\n [events]\n );\n\n const handleRefresh = useCallback(async () => {\n if (panelActions.refreshProjects) {\n await panelActions.refreshProjects();\n }\n }, [panelActions]);\n\n const toggleSection = useCallback((owner: string) => {\n setCollapsedSections((prev) => {\n const next = new Set(prev);\n if (next.has(owner)) {\n next.delete(owner);\n } else {\n next.add(owner);\n }\n return next;\n });\n }, []);\n\n // Subscribe to tool events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ filter: string }>(`${PANEL_ID}:filter`, (event) => {\n setFilter(event.payload?.filter || '');\n }),\n events.on<{ owner: string }>(`${PANEL_ID}:toggle-section`, (event) => {\n const owner = event.payload?.owner;\n if (owner) {\n toggleSection(owner);\n }\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = allRepositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n handleSelect(repo);\n }\n }\n }),\n events.on<{ identifier: string }>(`${PANEL_ID}:clone-repository`, (event) => {\n const identifier = event.payload?.identifier;\n if (identifier) {\n const repo = allRepositories.find(\n (r) =>\n r.name === identifier ||\n r.full_name === identifier ||\n r.full_name.toLowerCase() === identifier.toLowerCase()\n );\n if (repo) {\n void handleClone(repo);\n }\n }\n }),\n ];\n\n return () => {\n unsubscribers.forEach((unsub) => unsub());\n };\n }, [events, allRepositories, toggleSection, handleSelect, handleClone]);\n\n // Base styles\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n // Loading state\n if (loading && !hasData) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n }}\n >\n <Loader2\n size={32}\n style={{ color: theme.colors.textSecondary }}\n className=\"animate-spin\"\n />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading your repositories...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n // Error state\n if (error && !hasData) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <AlertCircle\n size={32}\n style={{ color: theme.colors.error || '#ef4444' }}\n />\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 fontFamily: theme.fonts.body,\n }}\n >\n Unable to load repositories\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.body,\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </p>\n </div>\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: 'none',\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n fontWeight: theme.fontWeights.semibold,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n <RotateCcw size={16} />\n Try again\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n // Render section header\n const renderSectionHeader = (\n owner: string,\n repoCount: number,\n icon: React.ReactNode,\n isOrg: boolean = false\n ) => {\n const isCollapsed = collapsedSections.has(owner);\n\n return (\n <button\n type=\"button\"\n onClick={() => toggleSection(owner)}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '10px 12px',\n backgroundColor: theme.colors.background,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n textAlign: 'left',\n marginBottom: isCollapsed ? '0' : '8px',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = theme.colors.background;\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {isCollapsed ? (\n <ChevronRight size={16} color={theme.colors.textSecondary} />\n ) : (\n <ChevronDown size={16} color={theme.colors.textSecondary} />\n )}\n {icon}\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n }}\n >\n {owner}\n </span>\n {isOrg && (\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary,\n padding: '2px 6px',\n borderRadius: '3px',\n }}\n >\n org\n </span>\n )}\n </div>\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n }}\n >\n {repoCount} {repoCount === 1 ? 'repo' : 'repos'}\n </span>\n </button>\n );\n };\n\n return (\n <div style={baseContainerStyle}>\n {/* Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <FolderGit2 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 fontFamily: theme.fonts.body,\n }}\n >\n GitHub Projects\n </span>\n </div>\n\n {/* Search bar */}\n <div style={{ position: 'relative', padding: '8px 16px' }}>\n <Search\n size={16}\n style={{\n position: 'absolute',\n top: '50%',\n left: '28px',\n transform: 'translateY(-50%)',\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n value={filter}\n placeholder=\"Filter repositories...\"\n onChange={(event) => setFilter(event.target.value)}\n style={{\n width: '100%',\n padding: '8px 12px 8px 36px',\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 fontFamily: theme.fonts.body,\n outline: 'none',\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {/* Error banner */}\n {error && hasData && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 14px',\n margin: '0 16px',\n borderRadius: '6px',\n backgroundColor: `${theme.colors.error || '#ef4444'}20`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n {/* Repository sections */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n padding: '8px',\n }}\n >\n {/* User's repositories */}\n {filteredUserRepos.length > 0 && (\n <div>\n {renderSectionHeader(\n currentUser || 'Your Repositories',\n filteredUserRepos.length,\n <User size={16} color={theme.colors.textSecondary} />\n )}\n {!collapsedSections.has(currentUser || 'Your Repositories') && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {filteredUserRepos\n .sort((a, b) =>\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n )\n .map((repo) => (\n <GitHubRepositoryCard\n key={repo.id}\n repository={repo}\n localRepo={localRepoMap.get(repo.full_name)}\n onClone={handleClone}\n onOpen={handleOpen}\n onSelect={handleSelect}\n isSelected={selectedRepo?.id === repo.id}\n />\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Organization repositories */}\n {organizations.map((org) => {\n const repos = filteredOrgRepos[org.login];\n if (!repos || repos.length === 0) return null;\n\n return (\n <div key={org.id}>\n {renderSectionHeader(\n org.login,\n repos.length,\n <Building2 size={16} color={theme.colors.textSecondary} />,\n true\n )}\n {!collapsedSections.has(org.login) && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n {repos\n .sort((a, b) =>\n a.name.localeCompare(b.name, undefined, { sensitivity: 'base' })\n )\n .map((repo) => (\n <GitHubRepositoryCard\n key={repo.id}\n repository={repo}\n localRepo={localRepoMap.get(repo.full_name)}\n onClone={handleClone}\n onOpen={handleOpen}\n onSelect={handleSelect}\n isSelected={selectedRepo?.id === repo.id}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n\n {/* Empty state after filtering */}\n {filteredUserRepos.length === 0 &&\n Object.keys(filteredOrgRepos).length === 0 &&\n hasData && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <p style={{ margin: 0 }}>No repositories match your filter.</p>\n </div>\n )}\n\n {/* No repos at all */}\n {!hasData && !loading && (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <FolderGit2\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>No repositories found.</p>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Preview component for panel tabs/thumbnails\n */\nexport const GitHubProjectsPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <FolderGit2 size={16} style={{ color: theme.colors.primary }} />\n <span>GitHub Projects</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n Your repositories and organization projects\n </div>\n </div>\n );\n};\n","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n User,\n Building2,\n Star,\n MapPin,\n Link as LinkIcon,\n Mail,\n Calendar,\n GitFork,\n ExternalLink,\n Download,\n Search,\n X,\n Circle,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../../types';\nimport type {\n GitHubUserProfile,\n GitHubOrganization,\n GitHubRepository,\n UserProfileSlice,\n UserProfilePanelActions,\n UserProfileView,\n UserPresenceStatus,\n} from './types';\n\n// Panel event prefix\nconst PANEL_ID = 'industry-theme.user-profile';\n\n// Helper to create panel events with required fields\nconst createPanelEvent = <T,>(type: string, payload: T) => ({\n type,\n source: PANEL_ID,\n timestamp: Date.now(),\n payload,\n});\n\n/**\n * Format a date string to a readable format\n */\nconst formatDate = (dateString: string): string => {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n year: 'numeric',\n });\n};\n\n/**\n * Get presence status color\n */\nconst getPresenceColor = (status: UserPresenceStatus['status']): string => {\n switch (status) {\n case 'online':\n return '#22c55e';\n case 'away':\n return '#eab308';\n case 'offline':\n default:\n return '#6b7280';\n }\n};\n\n/**\n * OrganizationCard - Displays a single organization\n */\nconst OrganizationCard: React.FC<{\n organization: GitHubOrganization;\n onClick?: (org: GitHubOrganization) => void;\n}> = ({ organization, onClick }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n return (\n <div\n onClick={() => onClick?.(organization)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isHovered\n ? theme.colors.backgroundTertiary\n : theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n cursor: onClick ? 'pointer' : 'default',\n transition: 'all 0.15s ease',\n }}\n >\n <img\n src={organization.avatar_url}\n alt={organization.login}\n style={{\n width: '40px',\n height: '40px',\n borderRadius: '8px',\n objectFit: 'cover',\n }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {organization.login}\n </div>\n {organization.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {organization.description}\n </div>\n )}\n </div>\n <Building2 size={16} style={{ color: theme.colors.textSecondary }} />\n </div>\n );\n};\n\n/**\n * RepositoryCard - Displays a single starred repository\n */\nconst RepositoryCard: React.FC<{\n repository: GitHubRepository;\n onClick?: (repo: GitHubRepository) => void;\n onClone?: (repo: GitHubRepository) => void;\n onOpenInBrowser?: (repo: GitHubRepository) => void;\n}> = ({ repository, onClick, onClone, onOpenInBrowser }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n\n return (\n <div\n onClick={() => onClick?.(repository)}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n padding: '12px',\n borderRadius: '8px',\n backgroundColor: isHovered\n ? theme.colors.backgroundTertiary\n : theme.colors.background,\n border: `1px solid ${theme.colors.border}`,\n cursor: onClick ? 'pointer' : 'default',\n transition: 'all 0.15s ease',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.primary,\n fontFamily: theme.fonts.body,\n }}\n >\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {repository.full_name}\n </span>\n {repository.fork && (\n <GitFork size={12} style={{ color: theme.colors.textSecondary, flexShrink: 0 }} />\n )}\n </div>\n {repository.description && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n marginTop: '4px',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {repository.description}\n </div>\n )}\n </div>\n {isHovered && (onClone || onOpenInBrowser) && (\n <div style={{ display: 'flex', gap: '4px', flexShrink: 0 }}>\n {onClone && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClone(repository);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Clone repository\"\n >\n <Download size={14} />\n </button>\n )}\n {onOpenInBrowser && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onOpenInBrowser(repository);\n }}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundTertiary,\n color: theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n title=\"Open in browser\"\n >\n <ExternalLink size={14} />\n </button>\n )}\n </div>\n )}\n </div>\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 fontFamily: theme.fonts.body,\n }}\n >\n {repository.language && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <span\n style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: theme.colors.primary,\n }}\n />\n {repository.language}\n </span>\n )}\n {repository.stargazers_count !== undefined && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Star size={12} />\n {repository.stargazers_count.toLocaleString()}\n </span>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * UserProfilePanelContent - Internal component that uses theme\n */\nconst UserProfilePanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n events,\n}) => {\n const { theme } = useTheme();\n const [activeView, setActiveView] = useState<UserProfileView>('organizations');\n const [searchQuery, setSearchQuery] = useState('');\n const [showSearchBox, setShowSearchBox] = useState(false);\n\n // Get extended actions\n const panelActions = actions as UserProfilePanelActions;\n\n // Get user profile data from context slice\n const profileSlice = context.getSlice<UserProfileSlice>('userProfile');\n const user = profileSlice?.data?.user ?? null;\n const organizations = useMemo(\n () => profileSlice?.data?.organizations || [],\n [profileSlice?.data?.organizations]\n );\n const starredRepositories = useMemo(\n () => profileSlice?.data?.starredRepositories || [],\n [profileSlice?.data?.starredRepositories]\n );\n const presence = profileSlice?.data?.presence;\n const loading = profileSlice?.loading ?? false;\n\n // Filter starred repositories by search\n const filteredStarred = useMemo(() => {\n if (!searchQuery.trim()) return starredRepositories;\n const query = searchQuery.toLowerCase().trim();\n return starredRepositories.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 }, [starredRepositories, searchQuery]);\n\n // Handle organization selection\n const handleOrganizationSelect = useCallback(\n (organization: GitHubOrganization) => {\n events.emit(\n createPanelEvent(`${PANEL_ID}:organization:selected`, {\n orgLogin: organization.login,\n organization,\n })\n );\n panelActions.viewOrganization?.(organization.login);\n },\n [events, panelActions]\n );\n\n // Handle repository selection\n const handleRepositorySelect = useCallback(\n (repository: GitHubRepository) => {\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository:selected`, {\n owner: repository.owner.login,\n repo: repository.name,\n repository,\n })\n );\n panelActions.viewRepository?.(repository.owner.login, repository.name);\n },\n [events, panelActions]\n );\n\n // Handle repository clone\n const handleCloneRepository = useCallback(\n (repository: GitHubRepository) => {\n events.emit(\n createPanelEvent(`${PANEL_ID}:repository:clone-requested`, {\n repository,\n })\n );\n panelActions.cloneRepository?.(repository);\n },\n [events, panelActions]\n );\n\n // Handle open in browser\n const handleOpenInBrowser = useCallback(\n (repository: GitHubRepository) => {\n panelActions.openInBrowser?.(repository.html_url);\n },\n [panelActions]\n );\n\n // Handle view change\n const handleViewChange = useCallback(\n (view: UserProfileView) => {\n setActiveView(view);\n setSearchQuery('');\n setShowSearchBox(false);\n events.emit(createPanelEvent(`${PANEL_ID}:view:changed`, { view }));\n },\n [events]\n );\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n events.on<{ view: UserProfileView }>(`${PANEL_ID}:set-view`, (event) => {\n if (event.payload?.view) {\n handleViewChange(event.payload.view);\n }\n }),\n events.on<{ orgLogin: string }>(`${PANEL_ID}:select-organization`, (event) => {\n const orgLogin = event.payload?.orgLogin;\n if (orgLogin) {\n const org = organizations.find((o) => o.login === orgLogin);\n if (org) {\n handleOrganizationSelect(org);\n }\n }\n }),\n events.on<{ owner: string; repo: string }>(`${PANEL_ID}:select-repository`, (event) => {\n const { owner, repo } = event.payload || {};\n if (owner && repo) {\n const repository = starredRepositories.find(\n (r) => r.owner.login === owner && r.name === repo\n );\n if (repository) {\n handleRepositorySelect(repository);\n }\n }\n }),\n events.on<{ owner: string; repo: string }>(`${PANEL_ID}:clone-repository`, (event) => {\n const { owner, repo } = event.payload || {};\n if (owner && repo) {\n const repository = starredRepositories.find(\n (r) => r.owner.login === owner && r.name === repo\n );\n if (repository) {\n handleCloneRepository(repository);\n }\n }\n }),\n events.on<{ filter: string }>(`${PANEL_ID}:filter-starred`, (event) => {\n if (event.payload?.filter !== undefined) {\n setSearchQuery(event.payload.filter);\n setShowSearchBox(true);\n setActiveView('starred');\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [\n events,\n organizations,\n starredRepositories,\n handleViewChange,\n handleOrganizationSelect,\n handleRepositorySelect,\n handleCloneRepository,\n ]);\n\n const baseContainerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n };\n\n // Loading state\n if (loading) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading profile...\n </h3>\n </div>\n </div>\n </div>\n );\n }\n\n // No user selected state\n if (!user) {\n return (\n <div style={baseContainerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '32px',\n textAlign: 'center',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n }}\n >\n <User size={48} style={{ color: theme.colors.textSecondary }} />\n <h3\n style={{\n margin: 0,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a user\n </h3>\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n Click on someone in the network to view their profile\n </p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div style={baseContainerStyle}>\n {/* Panel Header */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <User 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 fontFamily: theme.fonts.body,\n }}\n >\n User Profile\n </span>\n </div>\n\n {/* User Info */}\n <div\n style={{\n padding: '16px',\n backgroundColor: theme.colors.background,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'flex-start', gap: '12px' }}>\n <div style={{ position: 'relative' }}>\n <img\n src={user.avatar_url}\n alt={user.login}\n style={{\n width: '64px',\n height: '64px',\n borderRadius: '50%',\n objectFit: 'cover',\n }}\n />\n {presence && (\n <Circle\n size={14}\n fill={getPresenceColor(presence.status)}\n style={{\n position: 'absolute',\n bottom: '2px',\n right: '2px',\n color: getPresenceColor(presence.status),\n }}\n />\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontSize: `${theme.fontSizes[3]}px`,\n fontWeight: theme.fontWeights.bold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {user.name || user.login}\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n @{user.login}\n </div>\n {user.bio && (\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n marginTop: '8px',\n }}\n >\n {user.bio}\n </div>\n )}\n </div>\n </div>\n\n {/* User meta info */}\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '12px',\n marginTop: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n {user.location && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <MapPin size={12} />\n {user.location}\n </span>\n )}\n {user.email && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Mail size={12} />\n {user.email}\n </span>\n )}\n {user.company && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Building2 size={12} />\n {user.company}\n </span>\n )}\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n <Calendar size={12} />\n Joined {formatDate(user.created_at)}\n </span>\n </div>\n\n {/* Stats */}\n <div\n style={{\n display: 'flex',\n gap: '16px',\n marginTop: '12px',\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n }}\n >\n <span>\n <strong style={{ color: theme.colors.text }}>{user.followers}</strong>{' '}\n <span style={{ color: theme.colors.textSecondary }}>followers</span>\n </span>\n <span>\n <strong style={{ color: theme.colors.text }}>{user.following}</strong>{' '}\n <span style={{ color: theme.colors.textSecondary }}>following</span>\n </span>\n <span>\n <strong style={{ color: theme.colors.text }}>{user.public_repos}</strong>{' '}\n <span style={{ color: theme.colors.textSecondary }}>repos</span>\n </span>\n </div>\n </div>\n\n {/* Tab navigation */}\n <div\n style={{\n display: 'flex',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n <button\n onClick={() => handleViewChange('organizations')}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '12px',\n border: 'none',\n backgroundColor: 'transparent',\n color:\n activeView === 'organizations'\n ? theme.colors.primary\n : theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight:\n activeView === 'organizations'\n ? theme.fontWeights.semibold\n : theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n borderBottom:\n activeView === 'organizations'\n ? `2px solid ${theme.colors.primary}`\n : '2px solid transparent',\n transition: 'all 0.15s ease',\n }}\n >\n <Building2 size={16} />\n Organizations ({organizations.length})\n </button>\n <button\n onClick={() => handleViewChange('starred')}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '12px',\n border: 'none',\n backgroundColor: 'transparent',\n color:\n activeView === 'starred'\n ? theme.colors.primary\n : theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight:\n activeView === 'starred'\n ? theme.fontWeights.semibold\n : theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n borderBottom:\n activeView === 'starred'\n ? `2px solid ${theme.colors.primary}`\n : '2px solid transparent',\n transition: 'all 0.15s ease',\n }}\n >\n <Star size={16} />\n Starred ({starredRepositories.length})\n </button>\n </div>\n\n {/* Search box for starred view */}\n {activeView === 'starred' && (\n <div\n style={{\n padding: '12px 16px',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n }}\n >\n <Search size={16} style={{ color: theme.colors.textSecondary }} />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder=\"Filter starred repositories...\"\n style={{\n flex: 1,\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n outline: 'none',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => setSearchQuery('')}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2px',\n border: 'none',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n }}\n >\n <X size={14} />\n </button>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Content area */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {activeView === 'organizations' && (\n <>\n {organizations.length === 0 ? (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Building2\n size={32}\n style={{ marginBottom: '12px', opacity: 0.5 }}\n />\n <p style={{ margin: 0 }}>No organizations</p>\n </div>\n ) : (\n organizations.map((org) => (\n <OrganizationCard\n key={org.id}\n organization={org}\n onClick={handleOrganizationSelect}\n />\n ))\n )}\n </>\n )}\n\n {activeView === 'starred' && (\n <>\n {filteredStarred.length === 0 ? (\n <div\n style={{\n padding: '32px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <Star size={32} style={{ marginBottom: '12px', opacity: 0.5 }} />\n <p style={{ margin: 0 }}>\n {searchQuery\n ? `No repositories matching \"${searchQuery}\"`\n : 'No starred repositories'}\n </p>\n </div>\n ) : (\n filteredStarred.map((repo) => (\n <RepositoryCard\n key={repo.id}\n repository={repo}\n onClick={handleRepositorySelect}\n onClone={panelActions.cloneRepository ? handleCloneRepository : undefined}\n onOpenInBrowser={\n panelActions.openInBrowser ? handleOpenInBrowser : undefined\n }\n />\n ))\n )}\n </>\n )}\n </div>\n </div>\n );\n};\n\n/**\n * UserProfilePanel - View user profiles with their organizations and starred repos\n *\n * Features:\n * - Display user profile header with avatar, bio, stats\n * - Show user's GitHub organizations\n * - Show user's starred repositories with search/filter\n * - Presence status indicator\n * - Clone starred repositories\n *\n * Data Slices:\n * - userProfile: UserProfileSlice object\n *\n * Events Emitted:\n * - industry-theme.user-profile:organization:selected\n * - industry-theme.user-profile:repository:selected\n * - industry-theme.user-profile:repository:clone-requested\n * - industry-theme.user-profile:view:changed\n *\n * Events Listened:\n * - industry-theme.user-profile:set-view\n * - industry-theme.user-profile:select-organization\n * - industry-theme.user-profile:select-repository\n * - industry-theme.user-profile:clone-repository\n * - industry-theme.user-profile:filter-starred\n */\nexport const UserProfilePanel: React.FC<PanelComponentProps> = (props) => {\n return <UserProfilePanelContent {...props} />;\n};\n\n/**\n * UserProfilePanelPreview - Compact preview for panel tabs/thumbnails\n */\nexport const UserProfilePanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n <User size={16} style={{ color: theme.colors.primary }} />\n <span>User Profile</span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontFamily: theme.fonts.body,\n color: theme.colors.textSecondary,\n marginTop: '4px',\n }}\n >\n View user organizations and starred repos\n </div>\n </div>\n );\n};\n\n// Re-export types\nexport type {\n GitHubUserProfile,\n GitHubOrganization,\n GitHubRepository,\n UserProfileSlice,\n UserProfilePanelActions,\n UserProfileView,\n UserPresenceStatus,\n UserProfileCardProps,\n OrganizationCardProps,\n StarredRepositoryCardProps,\n OrganizationSelectedPayload,\n RepositorySelectedPayload,\n RepositoryCloneRequestedPayload,\n UserProfilePanelEventPayloads,\n} from './types';\n","/**\n * UTCP Tools for LocalProjectsPanel\n *\n * These tools allow AI agents to interact with the Local Projects panel\n * through the Universal Tool Communication Protocol.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.local-projects';\n\n/**\n * Filter projects tool\n * Allows filtering the project list by search term\n */\nexport const filterProjectsTool: PanelTool = {\n name: 'filter_projects',\n description: 'Filter the local projects list by name, owner, or path',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter projects (matches name, owner, or path)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'projects'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Select project tool\n * Allows selecting a specific project in the list\n */\nexport const selectProjectTool: PanelTool = {\n name: 'select_project',\n description: 'Select a project by name or path to view its details',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description: 'Project name or full path to select',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedProject: { type: 'string' },\n },\n },\n tags: ['select', 'project', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Open project tool\n * Allows opening a project in the dev workspace\n */\nexport const openProjectTool: PanelTool = {\n name: 'open_project',\n description: 'Open a local project in the development workspace',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description: 'Project name or full path to open',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['open', 'project', 'workspace'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:open-repository`,\n },\n};\n\n/**\n * All tools for the LocalProjectsPanel\n */\nexport const localProjectsPanelTools: PanelTool[] = [\n filterProjectsTool,\n selectProjectTool,\n openProjectTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const localProjectsPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Local Projects Panel',\n description: 'Tools for browsing and managing local Alexandria repositories',\n tools: localProjectsPanelTools,\n};\n","/**\n * Workspace Repositories Panel Tools\n *\n * UTCP-compatible tools for the Workspace Repositories panel.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/panel-framework-core';\n\nconst PANEL_ID = 'industry-theme.workspace-repositories';\n\n/**\n * Tool: Select Repository\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_workspace_repository',\n description: 'Selects a repository in the workspace panel',\n inputs: {\n type: 'object',\n properties: {\n repositoryPath: {\n type: 'string',\n description: 'Path to the repository to select',\n },\n },\n required: ['repositoryPath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'select'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Tool: Refresh Workspace\n */\nexport const refreshWorkspaceTool: PanelTool = {\n name: 'refresh_workspace',\n description: 'Refreshes the workspace repositories list',\n inputs: {\n type: 'object',\n properties: {\n force: {\n type: 'boolean',\n description: 'Force refresh even if data is fresh',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n repositoryCount: { type: 'number' },\n },\n },\n tags: ['workspace', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:refresh-workspace`,\n },\n};\n\n/**\n * Tool: Open Repository\n */\nexport const openRepositoryTool: PanelTool = {\n name: 'open_workspace_repository',\n description: 'Opens a repository from the workspace',\n inputs: {\n type: 'object',\n properties: {\n repositoryPath: {\n type: 'string',\n description: 'Path to the repository to open',\n },\n },\n required: ['repositoryPath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:open-repository`,\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const workspaceRepositoriesPanelTools: PanelTool[] = [\n selectRepositoryTool,\n refreshWorkspaceTool,\n openRepositoryTool,\n];\n\n/**\n * Panel tools metadata for registration.\n */\nexport const workspaceRepositoriesPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Workspace Repositories Panel',\n description: 'Tools provided by the workspace repositories panel',\n tools: workspaceRepositoriesPanelTools,\n};\n","/**\n * UTCP Tools for WorkspacesListPanel\n *\n * These tools allow AI agents to interact with the Workspaces List panel\n * through the Universal Tool Communication Protocol.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.workspaces-list';\n\n/**\n * Filter workspaces tool\n * Allows filtering the workspace list by search term\n */\nexport const filterWorkspacesTool: PanelTool = {\n name: 'filter_workspaces',\n description:\n 'Filter the workspaces list by workspace name, description, or repository names within workspaces',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description:\n 'Search term to filter workspaces (matches workspace name, description, or repository names)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'workspaces'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Select workspace tool\n * Allows selecting a specific workspace in the list\n */\nexport const selectWorkspaceTool: PanelTool = {\n name: 'select_workspace',\n description: 'Select a workspace by its ID to view its details and repositories',\n inputs: {\n type: 'object',\n properties: {\n workspaceId: {\n type: 'string',\n description: 'The workspace ID to select',\n },\n },\n required: ['workspaceId'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedWorkspace: { type: 'string' },\n },\n },\n tags: ['select', 'workspace', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-workspace`,\n },\n};\n\n/**\n * Open workspace tool\n * Allows opening a workspace in a new window\n */\nexport const openWorkspaceTool: PanelTool = {\n name: 'open_workspace',\n description: 'Open a workspace in a dedicated window for full workspace management',\n inputs: {\n type: 'object',\n properties: {\n workspaceId: {\n type: 'string',\n description: 'The workspace ID to open',\n },\n },\n required: ['workspaceId'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['open', 'workspace', 'window'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:open-workspace`,\n },\n};\n\n/**\n * Create workspace tool\n * Allows creating a new workspace\n */\nexport const createWorkspaceTool: PanelTool = {\n name: 'create_workspace',\n description: 'Create a new workspace with the specified name and optional description',\n inputs: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name for the new workspace',\n },\n description: {\n type: 'string',\n description: 'Optional description for the workspace',\n },\n },\n required: ['name'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n workspaceId: { type: 'string' },\n message: { type: 'string' },\n },\n },\n tags: ['create', 'workspace', 'new'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:create-workspace`,\n },\n};\n\n/**\n * All tools for the WorkspacesListPanel\n */\nexport const workspacesListPanelTools: PanelTool[] = [\n filterWorkspacesTool,\n selectWorkspaceTool,\n openWorkspaceTool,\n createWorkspaceTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const workspacesListPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Workspaces List Panel',\n description: 'Tools for browsing and managing workspaces',\n tools: workspacesListPanelTools,\n};\n","/**\n * Workspace Collection Panel Tools\n *\n * UTCP-compatible tools for the browser-based Workspace Collection panel.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/panel-framework-core';\n\nconst PANEL_ID = 'industry-theme.workspace-collection';\n\n/**\n * Tool: Filter Repositories\n */\nexport const filterRepositoriesTool: PanelTool = {\n name: 'filter_workspace_collection',\n description: 'Filters repositories in the workspace collection by search term',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter repositories by name, owner, or description',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n matchCount: { type: 'number' },\n },\n },\n tags: ['workspace', 'repository', 'filter', 'search'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Tool: Select Repository\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_collection_repository',\n description: 'Selects a repository in the workspace collection panel',\n inputs: {\n type: 'object',\n properties: {\n repositoryKey: {\n type: 'string',\n description: 'Repository identifier in \"owner/repo\" format or just the repository name',\n },\n },\n required: ['repositoryKey'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'select'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Tool: Navigate to Repository\n */\nexport const navigateRepositoryTool: PanelTool = {\n name: 'navigate_collection_repository',\n description: 'Navigates to the full repository page for a repository in the workspace',\n inputs: {\n type: 'object',\n properties: {\n repositoryKey: {\n type: 'string',\n description: 'Repository identifier in \"owner/repo\" format or just the repository name',\n },\n },\n required: ['repositoryKey'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'navigate', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:navigate-repository`,\n },\n};\n\n/**\n * Tool: Remove Repository from Workspace\n */\nexport const removeRepositoryTool: PanelTool = {\n name: 'remove_collection_repository',\n description: 'Removes a repository from the current workspace',\n inputs: {\n type: 'object',\n properties: {\n repositoryKey: {\n type: 'string',\n description: 'Repository identifier in \"owner/repo\" format or just the repository name',\n },\n },\n required: ['repositoryKey'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['workspace', 'repository', 'remove', 'delete'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:remove-repository`,\n },\n};\n\n/**\n * Tool: Refresh Workspace Collection\n */\nexport const refreshWorkspaceCollectionTool: PanelTool = {\n name: 'refresh_workspace_collection',\n description: 'Refreshes the workspace collection repository list',\n inputs: {\n type: 'object',\n properties: {\n force: {\n type: 'boolean',\n description: 'Force refresh even if data is fresh',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n repositoryCount: { type: 'number' },\n },\n },\n tags: ['workspace', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:refresh-workspace`,\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const workspaceCollectionPanelTools: PanelTool[] = [\n filterRepositoriesTool,\n selectRepositoryTool,\n navigateRepositoryTool,\n removeRepositoryTool,\n refreshWorkspaceCollectionTool,\n];\n\n/**\n * Panel tools metadata for registration.\n */\nexport const workspaceCollectionPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Workspace Collection Panel',\n description: 'Tools provided by the browser-based workspace collection panel',\n tools: workspaceCollectionPanelTools,\n};\n","/**\n * GitHubStarredPanel UTCP Tools\n *\n * Server-safe tools for AI agent interaction with the GitHub Starred panel.\n * These tools emit panel events that the panel component listens to.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.github-starred';\n\n/**\n * Filter starred repositories by name, owner, or language\n */\nexport const filterStarredTool: PanelTool = {\n name: 'filter_starred_repositories',\n description:\n 'Filter the starred repositories list by repository name, owner, language, or description',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description:\n 'Search term to filter repositories (matches name, owner, language, or description)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'starred', 'github'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Select a starred repository\n */\nexport const selectStarredRepositoryTool: PanelTool = {\n name: 'select_starred_repository',\n description:\n 'Select a starred repository by its name or full name (owner/repo)',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n repository: {\n type: 'object',\n description: 'The selected repository data',\n },\n },\n },\n tags: ['select', 'starred', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Clone a starred repository\n */\nexport const cloneStarredRepositoryTool: PanelTool = {\n name: 'clone_starred_repository',\n description: 'Clone a starred repository to the local machine',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n localPath: {\n type: 'string',\n description: 'Path where the repository was cloned',\n },\n },\n },\n tags: ['clone', 'starred', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:clone-repository`,\n },\n};\n\n/**\n * All tools for the GitHubStarredPanel\n */\nexport const githubStarredPanelTools: PanelTool[] = [\n filterStarredTool,\n selectStarredRepositoryTool,\n cloneStarredRepositoryTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const githubStarredPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'GitHub Starred Panel',\n description: 'Tools for browsing and managing starred GitHub repositories',\n tools: githubStarredPanelTools,\n};\n","/**\n * GitHubProjectsPanel UTCP Tools\n *\n * Server-safe tools for AI agent interaction with the GitHub Projects panel.\n * These tools emit panel events that the panel component listens to.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.github-projects';\n\n/**\n * Filter projects by name, owner, or language\n */\nexport const filterProjectsTool: PanelTool = {\n name: 'filter_github_projects',\n description:\n 'Filter the GitHub projects list by repository name, owner, language, or description',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description:\n 'Search term to filter repositories (matches name, owner, language, or description)',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'projects', 'github'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Toggle owner section visibility\n */\nexport const toggleOwnerSectionTool: PanelTool = {\n name: 'toggle_owner_section',\n description:\n 'Expand or collapse an owner section (user or organization) in the projects panel',\n inputs: {\n type: 'object',\n properties: {\n owner: {\n type: 'string',\n description: 'The owner name (username or organization login) to toggle',\n },\n },\n required: ['owner'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n collapsed: { type: 'boolean' },\n },\n },\n tags: ['toggle', 'section', 'projects', 'github'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:toggle-section`,\n },\n};\n\n/**\n * Select a project repository\n */\nexport const selectProjectRepositoryTool: PanelTool = {\n name: 'select_project_repository',\n description: 'Select a project repository by its name or full name (owner/repo)',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n repository: {\n type: 'object',\n description: 'The selected repository data',\n },\n },\n },\n tags: ['select', 'projects', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Clone a project repository\n */\nexport const cloneProjectRepositoryTool: PanelTool = {\n name: 'clone_project_repository',\n description: 'Clone a project repository to the local machine',\n inputs: {\n type: 'object',\n properties: {\n identifier: {\n type: 'string',\n description:\n 'Repository identifier - can be the repository name or full name (owner/repo)',\n },\n },\n required: ['identifier'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n localPath: {\n type: 'string',\n description: 'Path where the repository was cloned',\n },\n },\n },\n tags: ['clone', 'projects', 'github', 'repository'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:clone-repository`,\n },\n};\n\n/**\n * All tools for the GitHubProjectsPanel\n */\nexport const githubProjectsPanelTools: PanelTool[] = [\n filterProjectsTool,\n toggleOwnerSectionTool,\n selectProjectRepositoryTool,\n cloneProjectRepositoryTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const githubProjectsPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'GitHub Projects Panel',\n description:\n 'Tools for browsing and managing your GitHub repositories and organization repositories',\n tools: githubProjectsPanelTools,\n};\n","/**\n * UTCP Tools for UserProfilePanel\n *\n * These tools allow AI agents to interact with the User Profile panel\n * through the Universal Tool Communication Protocol.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '../../types';\n\nconst PANEL_ID = 'industry-theme.user-profile';\n\n/**\n * View organizations tool\n * Switches the panel view to show organizations\n */\nexport const viewOrganizationsTool: PanelTool = {\n name: 'view_user_organizations',\n description: \"Switch to the organizations tab to view the user's GitHub organizations\",\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['view', 'organizations', 'user'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:set-view`,\n },\n};\n\n/**\n * View starred repositories tool\n * Switches the panel view to show starred repositories\n */\nexport const viewStarredTool: PanelTool = {\n name: 'view_user_starred',\n description: \"Switch to the starred tab to view the user's starred GitHub repositories\",\n inputs: {\n type: 'object',\n properties: {},\n required: [],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['view', 'starred', 'repositories', 'user'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:set-view`,\n },\n};\n\n/**\n * Select organization tool\n * Selects an organization to view its details\n */\nexport const selectOrganizationTool: PanelTool = {\n name: 'select_organization',\n description: 'Select a GitHub organization to view its details and repositories',\n inputs: {\n type: 'object',\n properties: {\n orgLogin: {\n type: 'string',\n description: 'The organization login/username to select',\n },\n },\n required: ['orgLogin'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedOrganization: { type: 'string' },\n },\n },\n tags: ['select', 'organization', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-organization`,\n },\n};\n\n/**\n * Select repository tool\n * Selects a starred repository to view its details\n */\nexport const selectRepositoryTool: PanelTool = {\n name: 'select_starred_repository',\n description: 'Select a starred repository to view its details',\n inputs: {\n type: 'object',\n properties: {\n owner: {\n type: 'string',\n description: 'The repository owner (user or organization)',\n },\n repo: {\n type: 'string',\n description: 'The repository name',\n },\n },\n required: ['owner', 'repo'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedRepository: { type: 'string' },\n },\n },\n tags: ['select', 'repository', 'starred', 'navigation'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-repository`,\n },\n};\n\n/**\n * Clone repository tool\n * Initiates cloning a starred repository\n */\nexport const cloneRepositoryTool: PanelTool = {\n name: 'clone_starred_repository',\n description: \"Clone one of the user's starred repositories to your local machine\",\n inputs: {\n type: 'object',\n properties: {\n owner: {\n type: 'string',\n description: 'The repository owner',\n },\n repo: {\n type: 'string',\n description: 'The repository name',\n },\n },\n required: ['owner', 'repo'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['clone', 'repository', 'starred'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:clone-repository`,\n },\n};\n\n/**\n * Filter starred repositories tool\n * Filters the starred repositories by search term\n */\nexport const filterStarredTool: PanelTool = {\n name: 'filter_starred_repositories',\n description: 'Filter the starred repositories list by name, description, or language',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter repositories',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['filter', 'search', 'starred', 'repositories'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter-starred`,\n },\n};\n\n/**\n * All tools for the UserProfilePanel\n */\nexport const userProfilePanelTools: PanelTool[] = [\n viewOrganizationsTool,\n viewStarredTool,\n selectOrganizationTool,\n selectRepositoryTool,\n cloneRepositoryTool,\n filterStarredTool,\n];\n\n/**\n * Tools metadata for registration\n */\nexport const userProfilePanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'User Profile Panel',\n description: \"Tools for viewing user profiles, their organizations, and starred repositories\",\n tools: userProfilePanelTools,\n};\n","import { LocalProjectsPanel } from './panels/LocalProjectsPanel';\nimport { WorkspaceRepositoriesPanel } from './panels/WorkspaceRepositoriesPanel';\nimport { WorkspacesListPanel } from './panels/WorkspacesListPanel';\nimport { WorkspaceCollectionPanel } from './panels/WorkspaceCollectionPanel';\nimport { GitHubStarredPanel } from './panels/GitHubStarredPanel';\nimport { GitHubProjectsPanel } from './panels/GitHubProjectsPanel';\nimport { UserProfilePanel } from './panels/UserProfilePanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { localProjectsPanelTools } from './panels/LocalProjectsPanel/tools';\nimport { workspaceRepositoriesPanelTools } from './panels/WorkspaceRepositoriesPanel/tools';\nimport { workspacesListPanelTools } from './panels/WorkspacesListPanel/tools';\nimport { workspaceCollectionPanelTools } from './panels/WorkspaceCollectionPanel/tools';\nimport { githubStarredPanelTools } from './panels/GitHubStarredPanel/tools';\nimport { githubProjectsPanelTools } from './panels/GitHubProjectsPanel/tools';\nimport { userProfilePanelTools } from './panels/UserProfilePanel/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 id: 'industry-theme.local-projects',\n name: 'Local Projects',\n icon: 'Folder',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse and manage local Alexandria repositories',\n slices: ['alexandriaRepositories'],\n tools: localProjectsPanelTools,\n },\n component: LocalProjectsPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Local Projects Panel mounted');\n\n // Refresh Alexandria repositories if available\n if (\n context.hasSlice('alexandriaRepositories') &&\n !context.isSliceLoading('alexandriaRepositories')\n ) {\n await context.refresh('repository', 'alexandriaRepositories');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Local Projects Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.workspace-repositories',\n name: 'Workspace Repositories',\n icon: 'FolderGit2',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Workspace and repository management panel',\n slices: ['workspace', 'workspaceRepositories'],\n tools: workspaceRepositoriesPanelTools,\n },\n component: WorkspaceRepositoriesPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Repositories Panel mounted');\n // eslint-disable-next-line no-console\n console.log('Current scope:', context.currentScope.type);\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Repositories Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.workspaces-list',\n name: 'Workspaces',\n icon: 'Layers',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse and manage workspaces',\n slices: ['workspaces'],\n tools: workspacesListPanelTools,\n },\n component: WorkspacesListPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspaces List Panel mounted');\n\n // Refresh workspaces if available\n if (\n context.hasSlice('workspaces') &&\n !context.isSliceLoading('workspaces')\n ) {\n await context.refresh('workspace', 'workspaces');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspaces List Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.workspace-collection',\n name: 'Workspace Collection',\n icon: 'FolderOpen',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse repositories in a workspace (browser)',\n slices: ['workspace', 'workspaceRepositories'],\n tools: workspaceCollectionPanelTools,\n },\n component: WorkspaceCollectionPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Collection Panel mounted');\n // eslint-disable-next-line no-console\n console.log('Current scope:', context.currentScope.type);\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Workspace Collection Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.github-starred',\n name: 'Starred',\n icon: 'Star',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Browse your starred GitHub repositories',\n slices: ['githubStarred', 'alexandriaRepositories'],\n tools: githubStarredPanelTools,\n },\n component: GitHubStarredPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Starred Panel mounted');\n\n if (\n context.hasSlice('githubStarred') &&\n !context.isSliceLoading('githubStarred')\n ) {\n await context.refresh(undefined, 'githubStarred');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('GitHub Starred Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.github-projects',\n name: 'GitHub Projects',\n icon: 'FolderGit2',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Your repositories and organization projects',\n slices: ['githubProjects', 'alexandriaRepositories'],\n tools: githubProjectsPanelTools,\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 if (\n context.hasSlice('githubProjects') &&\n !context.isSliceLoading('githubProjects')\n ) {\n await context.refresh(undefined, 'githubProjects');\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: {\n id: 'industry-theme.user-profile',\n name: 'User Profile',\n icon: 'User',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'View user profiles, organizations, and starred repositories',\n slices: ['userProfile'],\n tools: userProfilePanelTools,\n },\n component: UserProfilePanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('User Profile Panel mounted');\n\n if (\n context.hasSlice('userProfile') &&\n !context.isSliceLoading('userProfile')\n ) {\n await context.refresh(undefined, 'userProfile');\n }\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('User Profile Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Alexandria Panels package loaded');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Alexandria Panels package unloading');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/alexandria-panels/tools' to import without React dependencies.\n */\nexport {\n localProjectsPanelTools,\n localProjectsPanelToolsMetadata,\n filterProjectsTool,\n selectProjectTool,\n openProjectTool,\n} from './panels/LocalProjectsPanel/tools';\n\nexport {\n workspaceRepositoriesPanelTools,\n workspaceRepositoriesPanelToolsMetadata,\n selectRepositoryTool,\n refreshWorkspaceTool,\n openRepositoryTool,\n} from './panels/WorkspaceRepositoriesPanel/tools';\n\nexport {\n workspacesListPanelTools,\n workspacesListPanelToolsMetadata,\n filterWorkspacesTool,\n selectWorkspaceTool,\n openWorkspaceTool,\n createWorkspaceTool,\n} from './panels/WorkspacesListPanel/tools';\n\nexport {\n workspaceCollectionPanelTools,\n workspaceCollectionPanelToolsMetadata,\n filterRepositoriesTool,\n selectRepositoryTool as selectCollectionRepositoryTool,\n navigateRepositoryTool,\n removeRepositoryTool,\n refreshWorkspaceCollectionTool,\n} from './panels/WorkspaceCollectionPanel/tools';\n\nexport {\n githubStarredPanelTools,\n githubStarredPanelToolsMetadata,\n filterStarredTool,\n selectStarredRepositoryTool,\n cloneStarredRepositoryTool,\n} from './panels/GitHubStarredPanel/tools';\n\nexport {\n githubProjectsPanelTools,\n githubProjectsPanelToolsMetadata,\n filterProjectsTool as filterGitHubProjectsTool,\n toggleOwnerSectionTool,\n selectProjectRepositoryTool,\n cloneProjectRepositoryTool,\n} from './panels/GitHubProjectsPanel/tools';\n\nexport {\n userProfilePanelTools,\n userProfilePanelToolsMetadata,\n viewOrganizationsTool,\n viewStarredTool,\n selectOrganizationTool,\n selectRepositoryTool as selectUserRepositoryTool,\n cloneRepositoryTool as cloneUserRepositoryTool,\n filterStarredTool as filterUserStarredTool,\n} from './panels/UserProfilePanel/tools';\n\n/**\n * Export panel components for direct use\n */\nexport {\n LocalProjectsPanel,\n LocalProjectsPanelPreview,\n LocalProjectCard,\n RepositoryAvatar,\n} from './panels/LocalProjectsPanel';\n\nexport { WorkspaceRepositoriesPanel } from './panels/WorkspaceRepositoriesPanel';\n\nexport {\n WorkspacesListPanel,\n WorkspacesListPanelPreview,\n WorkspaceCard,\n} from './panels/WorkspacesListPanel';\n\nexport {\n WorkspaceCollectionPanel,\n WorkspaceCollectionPanelPreview,\n} from './panels/WorkspaceCollectionPanel';\n\nexport {\n GitHubStarredPanel,\n GitHubStarredPanelPreview,\n} from './panels/GitHubStarredPanel';\n\nexport {\n GitHubProjectsPanel,\n GitHubProjectsPanelPreview,\n} from './panels/GitHubProjectsPanel';\n\nexport {\n UserProfilePanel,\n UserProfilePanelPreview,\n} from './panels/UserProfilePanel';\n\nexport { GitHubRepositoryCard } from './panels/shared/GitHubRepositoryCard';\n\n/**\n * Export types\n */\nexport type {\n LocalProjectCardProps,\n RepositoryAvatarProps,\n AlexandriaRepositoriesSlice,\n LocalProjectsPanelActions,\n CardActionMode,\n RepositoryWindowState,\n} from './panels/LocalProjectsPanel/types';\n\nexport type {\n Workspace,\n WorkspaceRepositoriesPanelActions,\n RepositorySelectedPayload,\n RepositoryOpenedPayload,\n} from './panels/WorkspaceRepositoriesPanel/types';\n\nexport type {\n WorkspacesSlice,\n WorkspacesListPanelActions,\n WorkspaceCardProps,\n WorkspaceSelectedPayload,\n WorkspaceOpenedPayload,\n WorkspaceCreatedPayload,\n WorkspaceDeletedPayload,\n} from './panels/WorkspacesListPanel/types';\n\nexport type {\n Workspace as WorkspaceCollectionWorkspace,\n WorkspaceCollectionSlice,\n WorkspaceRepositoriesSlice,\n WorkspaceCollectionPanelActions,\n RepositorySelectedPayload as CollectionRepositorySelectedPayload,\n RepositoryRemovedPayload,\n RepositoryNavigatePayload,\n WorkspaceCollectionPanelEventPayloads,\n} from './panels/WorkspaceCollectionPanel/types';\n\nexport type {\n GitHubRepository,\n GitHubOrganization,\n LocalRepositoryReference,\n} from './panels/shared/github-types';\n\nexport type {\n GitHubStarredSlice,\n GitHubStarredPanelActions,\n GitHubStarredPanelEventPayloads,\n} from './panels/GitHubStarredPanel/types';\n\nexport type {\n GitHubProjectsSlice,\n GitHubProjectsPanelActions,\n GitHubProjectsPanelEventPayloads,\n} from './panels/GitHubProjectsPanel/types';\n\nexport type {\n GitHubUserProfile,\n GitHubOrganization as UserProfileOrganization,\n GitHubRepository as UserProfileRepository,\n UserProfileSlice,\n UserProfilePanelActions,\n UserProfileView,\n UserPresenceStatus,\n UserProfileCardProps,\n OrganizationCardProps,\n StarredRepositoryCardProps,\n OrganizationSelectedPayload,\n RepositorySelectedPayload as UserRepositorySelectedPayload,\n RepositoryCloneRequestedPayload,\n UserProfilePanelEventPayloads,\n} from './panels/UserProfilePanel/types';\n\nexport type { GitHubRepositoryCardProps } from './panels/shared/GitHubRepositoryCard';\n\n"],"names":["__iconNode","getLanguageColor","Loader2","PANEL_ID","createPanelEvent","_a","React","Home","Edit2","_b","_c","AlertCircle","filterProjectsTool","selectRepositoryTool","filterStarredTool"],"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,36]}
|