@industry-theme/alexandria-panels 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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/boxes.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/lucide-react/dist/esm/icons/circle-question-mark.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/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/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/move-up.js","../node_modules/lucide-react/dist/esm/icons/package.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/scale.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/trash-2.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/DependenciesPanel/components/DependencyInfoModal.tsx","../src/panels/DependenciesPanel/components/DependencyRow.tsx","../src/panels/DependenciesPanel/components/FilterBar.tsx","../src/panels/DependenciesPanel/index.tsx","../src/panels/LocalProjectsPanel/tools.ts","../src/panels/WorkspaceRepositoriesPanel/tools.ts","../src/panels/WorkspacesListPanel/tools.ts","../src/panels/DependenciesPanel/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 [\n \"path\",\n {\n d: \"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\",\n key: \"lc1i9w\"\n }\n ],\n [\"path\", { d: \"m7 16.5-4.74-2.85\", key: \"1o9zyk\" }],\n [\"path\", { d: \"m7 16.5 5-3\", key: \"va8pkn\" }],\n [\"path\", { d: \"M7 16.5v5.17\", key: \"jnp8gn\" }],\n [\n \"path\",\n {\n d: \"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\",\n key: \"8zsnat\"\n }\n ],\n [\"path\", { d: \"m17 16.5-5-3\", key: \"8arw3v\" }],\n [\"path\", { d: \"m17 16.5 4.74-2.85\", key: \"8rfmw\" }],\n [\"path\", { d: \"M17 16.5v5.17\", key: \"k6z78m\" }],\n [\n \"path\",\n {\n d: \"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\",\n key: \"1xygjf\"\n }\n ],\n [\"path\", { d: \"M12 8 7.26 5.15\", key: \"1vbdud\" }],\n [\"path\", { d: \"m12 8 4.74-2.85\", key: \"3rx089\" }],\n [\"path\", { d: \"M12 13.5V8\", key: \"1io7kd\" }]\n];\nconst Boxes = createLucideIcon(\"boxes\", __iconNode);\n\nexport { __iconNode, Boxes as default };\n//# sourceMappingURL=boxes.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 = [[\"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 = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.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: \"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 [\"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 [\"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: \"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\",\n key: \"1a0edw\"\n }\n ],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }],\n [\"polyline\", { points: \"3.29 7 12 12 20.71 7\", key: \"ousv84\" }],\n [\"path\", { d: \"m7.5 4.27 9 5.15\", key: \"1c824w\" }]\n];\nconst Package = createLucideIcon(\"package\", __iconNode);\n\nexport { __iconNode, Package as default };\n//# sourceMappingURL=package.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: \"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 [\"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: \"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 } 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}) => {\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 const highlightColor = theme.colors.primary;\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 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 // Icon-only action button style (like WorkspaceCard)\n const actionButtonStyle: React.CSSProperties = {\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: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n transition: 'all 0.15s ease',\n };\n\n const renderActionButtons = (isCompact = false) => {\n const buttonFlex = isCompact ? 1 : undefined;\n\n // Compact mode uses full buttons with text\n if (isCompact) {\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={{\n flex: buttonFlex,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px 10px',\n gap: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.primary || '#3b82f6'}`,\n backgroundColor: `${theme.colors.primary || '#3b82f6'}15`,\n color: theme.colors.primary || '#3b82f6',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: isLoading ? 'wait' : 'pointer',\n opacity: isLoading ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n >\n {isLoading ? <Loader2 size={12} className=\"animate-spin\" /> : <Plus size={12} />}\n {isLoading ? 'Adding...' : 'Add'}\n </button>\n );\n }\n\n // Compact workspace mode\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={{\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px 10px',\n gap: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.primary || '#3b82f6'}`,\n backgroundColor: `${theme.colors.primary || '#3b82f6'}15`,\n color: theme.colors.primary || '#3b82f6',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: isMoving ? 'wait' : 'pointer',\n opacity: isMoving ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n >\n {isMoving ? <Loader2 size={12} className=\"animate-spin\" /> : <MoveUp size={12} />}\n {isMoving ? 'Moving...' : 'Move'}\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title=\"Open repository\"\n style={{\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px 10px',\n gap: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.success || '#10b981'}`,\n backgroundColor: `${theme.colors.success || '#10b981'}15`,\n color: theme.colors.success || '#10b981',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n >\n <FolderOpen size={12} />\n Open\n </button>\n {onRemoveFromWorkspace && (\n <button\n type=\"button\"\n onClick={handleRemoveFromWorkspaceClick}\n disabled={isRemoving}\n title=\"Remove from workspace\"\n style={{\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px 10px',\n gap: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.error || '#ef4444'}`,\n backgroundColor: `${theme.colors.error || '#ef4444'}15`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: isRemoving ? 'wait' : 'pointer',\n opacity: isRemoving ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n >\n {isRemoving ? <Loader2 size={12} className=\"animate-spin\" /> : <X size={12} />}\n {isRemoving ? 'Removing...' : 'Remove'}\n </button>\n )}\n </>\n );\n }\n\n // Compact default mode\n return (\n <>\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title=\"Open locally\"\n disabled={windowState === 'opening'}\n style={{\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px 10px',\n gap: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.success || '#10b981'}`,\n backgroundColor: `${theme.colors.success || '#10b981'}15`,\n color: theme.colors.success || '#10b981',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: windowState === 'opening' ? 'wait' : 'pointer',\n opacity: windowState === 'opening' ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n >\n {windowState === 'opening' ? <Loader2 size={12} className=\"animate-spin\" /> : <FolderOpen size={12} />}\n {windowState === 'opening' ? 'Opening...' : 'Open'}\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={{\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '6px 10px',\n gap: '4px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.error || '#ef4444'}`,\n backgroundColor: `${theme.colors.error || '#ef4444'}15`,\n color: theme.colors.error || '#ef4444',\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n cursor: isLoading ? 'wait' : 'pointer',\n opacity: isLoading ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n >\n {isLoading ? <Loader2 size={12} className=\"animate-spin\" /> : <X size={12} />}\n {isLoading ? 'Removing...' : 'Remove'}\n </button>\n )}\n </>\n );\n }\n\n // Non-compact: icon-only buttons that fade in on hover\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={{\n ...actionButtonStyle,\n color: theme.colors.primary || '#3b82f6',\n }}\n >\n {isLoading ? <Loader2 size={16} className=\"animate-spin\" /> : <Plus size={16} />}\n </button>\n );\n }\n\n // Workspace mode - icon-only buttons\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={{\n ...actionButtonStyle,\n color: theme.colors.primary || '#3b82f6',\n }}\n >\n {isMoving ? <Loader2 size={16} className=\"animate-spin\" /> : <MoveUp size={16} />}\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 >\n {copiedPath ? <Check size={16} /> : <Copy size={16} />}\n </button>\n <button\n type=\"button\"\n onClick={handleOpenClick}\n title=\"Open repository\"\n style={{\n ...actionButtonStyle,\n color: theme.colors.success || '#10b981',\n }}\n >\n <FolderOpen size={16} />\n </button>\n {onRemoveFromWorkspace && (\n <button\n type=\"button\"\n onClick={handleRemoveFromWorkspaceClick}\n disabled={isRemoving}\n title=\"Remove from workspace\"\n style={actionButtonStyle}\n >\n {isRemoving ? <Loader2 size={16} className=\"animate-spin\" /> : <X size={16} />}\n </button>\n )}\n </>\n );\n }\n\n // Default and minimal modes - icon-only buttons\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 >\n {copiedPath ? <Check size={16} /> : <Copy size={16} />}\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={{\n ...actionButtonStyle,\n color: theme.colors.success || '#10b981',\n }}\n >\n {windowState === 'ready' ? (\n <Focus size={16} />\n ) : windowState === 'opening' ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <FolderOpen size={16} />\n )}\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 >\n {isLoading ? <Loader2 size={16} className=\"animate-spin\" /> : <X size={16} />}\n </button>\n )}\n </>\n );\n };\n\n return (\n <div\n className=\"local-project-card\"\n style={{\n padding: '8px 12px',\n borderRadius: '4px',\n backgroundColor: isSelected ? `${highlightColor}15` : 'transparent',\n border: isSelected\n ? `1px solid ${highlightColor}40`\n : '1px solid transparent',\n cursor: 'pointer',\n transition: 'background-color 0.15s',\n fontFamily: theme.fonts.body,\n }}\n onClick={handleCardClick}\n onDoubleClick={handleDoubleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Top row: Avatar + Name (+ buttons in non-compact) */}\n <div className=\"local-project-card__content\">\n {/* Owner avatar */}\n <RepositoryAvatar\n customAvatarUrl={avatarUrl}\n size={32}\n fallbackIcon={\n <div\n style={{\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n {entry.name[0]?.toUpperCase() || '?'}\n </div>\n }\n />\n\n {/* Name and info */}\n <div className=\"local-project-card__info\">\n {/* Name */}\n <span\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n textDecoration: 'underline',\n textDecorationColor: entry.github?.primaryLanguage\n ? getLanguageColor(entry.github.primaryLanguage)\n : theme.colors.textSecondary,\n textUnderlineOffset: '3px',\n }}\n >\n {entry.name}\n </span>\n\n {/* Description - hidden in compact via CSS */}\n {entry.github?.description && (\n <div\n className=\"local-project-card__meta\"\n style={{\n alignItems: 'center',\n gap: '12px',\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n <span\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {entry.github.description}\n </span>\n </div>\n )}\n </div>\n\n {/* Action buttons - inline, hidden in compact via CSS */}\n <div className=\"local-project-card__actions\">\n {renderActionButtons(false)}\n </div>\n </div>\n\n {/* Action buttons - stacked below, shown only in compact via CSS */}\n <div className=\"local-project-card__actions--stacked\">\n {renderActionButtons(true)}\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 padding: '16px',\n gap: '12px',\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 {/* Search bar with sort toggle and add button */}\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n <div style={{ position: 'relative', flex: 1, minWidth: 0 }}>\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 <button\n onClick={() => setSortByOrg(!sortByOrg)}\n title={sortByOrg ? 'Sorting by organization' : 'Sorting by repo name'}\n style={{\n padding: '8px',\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: '8px',\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\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 }}\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\n const workspace = workspaceSlice?.data ?? null;\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 padding: '16px',\n gap: '12px',\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 {/* Workspace header */}\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: '16px',\n marginBottom: '4px',\n }}\n >\n {/* Left: Workspace name */}\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {workspace.name}\n </h3>\n\n {/* Right: 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 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 }}\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 <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 )}\n </div>\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\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 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 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 } 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 width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\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: '40px',\n height: '40px',\n borderRadius: '6px',\n backgroundColor: `color-mix(in srgb, ${iconColor} 12%, transparent)`,\n color: iconColor,\n flexShrink: 0,\n marginTop: '2px',\n }}\n >\n {workspace.icon ? (\n <span style={{ fontSize: `${theme.fontSizes[3]}px` }}>{workspace.icon}</span>\n ) : (\n <DoorClosed size={24} />\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 flex: 1,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {workspace.name}\n </span>\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={16} />\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={16} />\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={16} />\n </button>\n )}\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 */}\n {workspace.description && !isEditing && (\n <div\n style={{\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 }}\n title={workspace.description}\n >\n {workspace.description}\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 const [isCreating, setIsCreating] = useState(false);\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\n const handleCreateWorkspace = useCallback(async () => {\n if (!panelActions.createWorkspace) {\n console.warn('Create workspace action not available');\n return;\n }\n\n const name = window.prompt('Enter workspace name:');\n if (!name?.trim()) return;\n\n try {\n setIsCreating(true);\n const workspace = await panelActions.createWorkspace(name.trim());\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:created`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n\n // Refresh workspaces\n await context.refresh('workspace', 'workspaces');\n } catch (error) {\n console.error('Failed to create workspace:', error);\n } finally {\n setIsCreating(false);\n }\n }, [panelActions, events, context]);\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 padding: '16px',\n gap: '12px',\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 display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n }}\n >\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Workspaces\n </h3>\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 {panelActions.createWorkspace && (\n <button\n onClick={handleCreateWorkspace}\n disabled={isCreating}\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: isCreating ? 'not-allowed' : 'pointer',\n opacity: isCreating ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n title=\"Create new workspace\"\n >\n <Plus size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Search box */}\n {showSearchBox && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\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 }}\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 from 'react';\nimport { X, Package, Scale, HelpCircle } from 'lucide-react';\nimport { useTheme, type Theme } from '@principal-ade/industry-theme';\n\ninterface DependencyInfoModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const DependencyInfoModal: React.FC<DependencyInfoModalProps> = ({\n isOpen,\n onClose,\n}) => {\n const { theme } = useTheme();\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: theme.colors.muted,\n zIndex: theme.zIndices[4],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n onClick={onClose}\n >\n {/* Modal */}\n <div\n style={{\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[3]}px`,\n maxWidth: '600px',\n maxHeight: '80vh',\n width: '90%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: theme.shadows[3],\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2\n style={{\n fontSize: `${theme.fontSizes[4]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n <HelpCircle size={20} />\n Understanding Dependencies\n </h2>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n padding: `${theme.space[1]}px`,\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n overflow: 'auto',\n flex: 1,\n }}\n >\n {/* Dependency Types */}\n <Section\n icon={<Package size={18} />}\n title=\"Dependency Types\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'prod', color: theme.colors.primary }}\n title=\"Production Dependencies\"\n description=\"Required for your application to run in production. These are bundled with your app and affect its size and security.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'dev', color: theme.colors.secondary }}\n title=\"Development Dependencies\"\n description=\"Only needed during development (build tools, testing, linters). Not included in production builds.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'peer', color: theme.colors.accent }}\n title=\"Peer Dependencies\"\n description=\"Expected to be provided by the consumer of your package. Important for library authors to specify compatibility.\"\n theme={theme}\n />\n </Section>\n\n {/* Licenses */}\n <Section\n icon={<Scale size={18} />}\n title=\"Common Licenses\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'MIT', color: theme.colors.success }}\n title=\"Permissive Licenses (MIT, Apache, BSD)\"\n description=\"Few restrictions. Can use in commercial projects. Must include copyright notice.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'GPL', color: theme.colors.warning }}\n title=\"Copyleft Licenses (GPL, LGPL, AGPL)\"\n description=\"Requires sharing source code of derivative works. Can impact your project's licensing.\"\n theme={theme}\n />\n </Section>\n </div>\n </div>\n </div>\n </>\n );\n};\n\n// Helper Components\nconst Section: React.FC<{\n icon: React.ReactNode;\n title: string;\n theme: Theme;\n children: React.ReactNode;\n}> = ({ icon, title, theme, children }) => (\n <div style={{ marginBottom: `${theme.space[5]}px` }}>\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n marginBottom: `${theme.space[3]}px`,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n }}\n >\n {icon}\n {title}\n </h3>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {children}\n </div>\n </div>\n);\n\nconst InfoItem: React.FC<{\n badge: { text: string; color: string };\n title: string;\n description: string;\n theme: Theme;\n}> = ({ badge, title, description, theme }) => (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n marginBottom: `${theme.space[1]}px`,\n }}\n >\n <span\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n backgroundColor: `${badge.color}20`,\n color: badge.color,\n }}\n >\n {badge.text}\n </span>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.relaxed,\n }}\n >\n {description}\n </div>\n </div>\n);\n","import React, { useState } from 'react';\nimport { ExternalLink, Copy, Check } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { DependencyItem } from '../types';\n\ninterface DependencyRowProps {\n dependency: DependencyItem;\n}\n\nexport const DependencyRow: React.FC<DependencyRowProps> = ({ dependency }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const getDependencyTypeBadgeStyle = (type: string) => {\n const baseStyle = {\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n minWidth: '36px',\n textAlign: 'center' as const,\n };\n\n switch (type) {\n case 'production':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.primary}20`,\n color: theme.colors.primary,\n };\n case 'development':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.secondary}20`,\n color: theme.colors.secondary,\n };\n case 'peer':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.accent}20`,\n color: theme.colors.accent,\n };\n default:\n return {\n ...baseStyle,\n backgroundColor: theme.colors.backgroundLight,\n color: theme.colors.textSecondary,\n };\n }\n };\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n const copyText = `${dependency.name}@${dependency.version}`;\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const actionButtonStyle: React.CSSProperties = {\n padding: `${theme.space[1]}px`,\n borderRadius: `${theme.radii[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${theme.space[2]}px ${theme.space[3]}px`,\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n transition: 'all 0.2s',\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Type badge and package name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n flex: 1,\n minWidth: 0,\n }}\n >\n <span style={getDependencyTypeBadgeStyle(dependency.dependencyType)}>\n {dependency.dependencyType === 'production'\n ? 'prod'\n : dependency.dependencyType === 'development'\n ? 'dev'\n : 'peer'}\n </span>\n <span\n style={{\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {dependency.name}\n </span>\n {/* NPM link - next to package name */}\n <a\n href={`https://www.npmjs.com/package/${dependency.name}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n ...actionButtonStyle,\n color: theme.colors.textSecondary,\n textDecoration: 'none',\n flexShrink: 0,\n }}\n title=\"View on npm\"\n >\n <ExternalLink size={12} />\n </a>\n </div>\n\n {/* Copy button and version */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {/* Copy button - left of version */}\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...actionButtonStyle,\n color: copied ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n title={copied ? 'Copied!' : `Copy ${dependency.name}@${dependency.version}`}\n >\n {copied ? <Check size={12} /> : <Copy size={12} />}\n </button>\n\n <span style={{ color: theme.colors.textSecondary }}>\n {dependency.version}\n </span>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Search, X } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\n\ntype ToggleableFilterType = 'production' | 'development' | 'peer';\n\ninterface FilterBarProps {\n activeFilters: Set<ToggleableFilterType>;\n onToggleFilter: (type: ToggleableFilterType) => void;\n searchQuery: string;\n onSearchChange: (query: string) => void;\n counts: {\n all: number;\n production: number;\n development: number;\n peer: number;\n };\n}\n\nexport const FilterBar: React.FC<FilterBarProps> = ({\n activeFilters,\n onToggleFilter,\n searchQuery,\n onSearchChange,\n counts,\n}) => {\n const { theme } = useTheme();\n\n // Only show filter buttons for types that have dependencies\n const availableFilters: ToggleableFilterType[] = [\n ...(counts.peer > 0 ? (['peer'] as const) : []),\n ...(counts.production > 0 ? (['production'] as const) : []),\n ...(counts.development > 0 ? (['development'] as const) : []),\n ];\n\n // Don't show filters if there's only one type\n const showFilters = availableFilters.length > 1;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {/* Search Bar */}\n <div\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Search\n size={14}\n style={{\n position: 'absolute',\n left: `${theme.space[3]}px`,\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Search dependencies...\"\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px ${theme.space[5]}px`,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n outline: 'none',\n transition: 'all 0.2s',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n style={{\n position: 'absolute',\n right: `${theme.space[2]}px`,\n padding: `${theme.space[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n borderRadius: `${theme.radii[1]}px`,\n }}\n title=\"Clear search\"\n >\n <X size={14} color={theme.colors.textSecondary} />\n </button>\n )}\n </div>\n\n {/* Type Filter Toggles */}\n {showFilters && (\n <div style={{ display: 'flex', gap: `${theme.space[1]}px`, width: '100%' }}>\n {availableFilters.map((type) => {\n const isActive = activeFilters.has(type);\n return (\n <button\n key={type}\n onClick={() => onToggleFilter(type)}\n style={{\n flex: 1,\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: isActive\n ? `${theme.colors.primary}20`\n : theme.colors.backgroundSecondary,\n color: isActive ? theme.colors.primary : theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n >\n {type === 'production'\n ? 'Prod'\n : type === 'development'\n ? 'Dev'\n : 'Peer'}\n <span\n style={{ marginLeft: `${theme.space[1]}px`, opacity: 0.7 }}\n >\n ({counts[type]})\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { Package, HelpCircle, Boxes } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../../types';\nimport type {\n PackageLayer,\n DependencyItem,\n PackagesSliceData,\n} from './types';\nimport { DependencyInfoModal, DependencyRow, FilterBar } from './components';\n\n/**\n * Sort order for dependency types: peer, production, development\n */\nconst dependencyTypeOrder: Record<DependencyItem['dependencyType'], number> = {\n peer: 0,\n production: 1,\n development: 2,\n};\n\n/**\n * Extract dependencies from a PackageLayer into DependencyItems\n */\nfunction extractDependencies(packageLayer: PackageLayer): DependencyItem[] {\n const { dependencies, devDependencies, peerDependencies } =\n packageLayer.packageData;\n\n const items: DependencyItem[] = [];\n\n if (dependencies) {\n Object.entries(dependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'production' });\n });\n }\n\n if (devDependencies) {\n Object.entries(devDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'development' });\n });\n }\n\n if (peerDependencies) {\n Object.entries(peerDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'peer' });\n });\n }\n\n // Sort by type (peer, prod, dev) then by name\n return items.sort((a, b) => {\n const typeCompare = dependencyTypeOrder[a.dependencyType] - dependencyTypeOrder[b.dependencyType];\n if (typeCompare !== 0) return typeCompare;\n return a.name.localeCompare(b.name);\n });\n}\n\n/**\n * DependenciesPanelContent - Internal component that uses theme\n */\nconst DependenciesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n}) => {\n const { theme } = useTheme();\n\n // State\n const [selectedPackagePath, setSelectedPackagePath] = useState<string | null>(\n null\n );\n const [activeFilters, setActiveFilters] = useState<Set<'production' | 'development' | 'peer'>>(new Set());\n const [searchQuery, setSearchQuery] = useState('');\n const [showInfoModal, setShowInfoModal] = useState(false);\n\n // Get packages slice data\n const packagesSlice = context.getSlice<PackagesSliceData>('packages');\n const isLoading = context.isSliceLoading('packages');\n const hasPackages = context.hasSlice('packages');\n\n const packages = useMemo(() => {\n return packagesSlice?.data?.packages ?? [];\n }, [packagesSlice?.data?.packages]);\n\n // Auto-select: single package, or root package in monorepo\n const effectiveSelectedPath = useMemo(() => {\n if (selectedPackagePath !== null) return selectedPackagePath;\n if (packages.length === 1) return packages[0].packageData.path;\n // For monorepos, auto-select root package (path: '')\n const rootPackage = packages.find((p) => p.packageData.path === '');\n if (rootPackage) return '';\n return null;\n }, [selectedPackagePath, packages]);\n\n // Get selected package\n const selectedPackage = useMemo(() => {\n if (effectiveSelectedPath === null) return null;\n return packages.find((p) => p.packageData.path === effectiveSelectedPath);\n }, [effectiveSelectedPath, packages]);\n\n // Extract dependencies from selected package\n const dependencyItems = useMemo(() => {\n if (!selectedPackage) return [];\n return extractDependencies(selectedPackage);\n }, [selectedPackage]);\n\n // Calculate counts\n const counts = useMemo(() => {\n return {\n all: dependencyItems.length,\n production: dependencyItems.filter((d) => d.dependencyType === 'production')\n .length,\n development: dependencyItems.filter(\n (d) => d.dependencyType === 'development'\n ).length,\n peer: dependencyItems.filter((d) => d.dependencyType === 'peer').length,\n };\n }, [dependencyItems]);\n\n // Handle filter toggle\n const handleToggleFilter = (type: 'production' | 'development' | 'peer') => {\n setActiveFilters((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n // Filter dependencies\n const filteredDependencies = useMemo(() => {\n let filtered = [...dependencyItems];\n\n // Apply search\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n filtered = filtered.filter((dep) =>\n dep.name.toLowerCase().includes(query)\n );\n }\n\n // Apply type filter: empty set or all types selected = show all\n const allTypes: Array<'production' | 'development' | 'peer'> = ['production', 'development', 'peer'];\n const availableTypes = allTypes.filter((t) => counts[t] > 0);\n const isAllSelected = activeFilters.size === 0 || availableTypes.every((t) => activeFilters.has(t));\n\n if (!isAllSelected && activeFilters.size > 0) {\n filtered = filtered.filter((dep) => activeFilters.has(dep.dependencyType));\n }\n\n return filtered;\n }, [dependencyItems, searchQuery, activeFilters, counts]);\n\n // Loading state\n if (isLoading) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading packages...\n </div>\n );\n }\n\n // No packages available\n if (!hasPackages || packages.length === 0) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: `${theme.space[2]}px`,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n <Package size={32} />\n <p style={{ margin: 0 }}>No package data available</p>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n overflow: 'hidden',\n }}\n >\n {/* Fixed Header Section */}\n <div\n style={{\n flexShrink: 0,\n padding: `${theme.space[3]}px`,\n paddingBottom: `${theme.space[2]}px`,\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Title Row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n {packages.length > 1 ? (\n <>\n <Boxes size={16} />\n Monorepo Dependencies\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.body,\n color: theme.colors.textSecondary,\n }}\n >\n ({packages.length})\n </span>\n </>\n ) : (\n <>\n <Package size={16} />\n Dependencies\n </>\n )}\n </h3>\n <button\n onClick={() => setShowInfoModal(true)}\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.primary,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[1]}px`,\n transition: 'all 0.2s',\n }}\n >\n <HelpCircle size={12} />\n Learn More\n </button>\n </div>\n\n {/* Package Selection (only if multiple packages) */}\n {packages.length > 1 && (\n <select\n value={effectiveSelectedPath ?? '__none__'}\n onChange={(e) => setSelectedPackagePath(e.target.value === '__none__' ? null : e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n {packages.map((pkg) => (\n <option key={pkg.packageData.path || '__root__'} value={pkg.packageData.path}>\n {pkg.packageData.name} ({pkg.packageData.path || 'root'})\n </option>\n ))}\n </select>\n )}\n\n {/* Package Info (single package) */}\n {packages.length === 1 && selectedPackage && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {selectedPackage.packageData.name} • {dependencyItems.length} dependencies\n </div>\n )}\n\n {/* Filter Bar */}\n {selectedPackage && dependencyItems.length > 0 && (\n <FilterBar\n activeFilters={activeFilters}\n onToggleFilter={handleToggleFilter}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n counts={counts}\n />\n )}\n </div>\n\n {/* Scrollable Dependencies List */}\n {selectedPackage && dependencyItems.length > 0 && (\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: `${theme.space[2]}px ${theme.space[3]}px ${theme.space[3]}px`,\n }}\n >\n {/* Results Count */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n marginBottom: `${theme.space[2]}px`,\n }}\n >\n Showing {filteredDependencies.length} of {dependencyItems.length} dependencies\n </div>\n\n {/* Dependency Items */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[1]}px`,\n }}\n >\n {filteredDependencies.length === 0 ? (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n No dependencies match your filters\n </div>\n ) : (\n filteredDependencies.map((dep) => (\n <DependencyRow\n key={`${dep.name}-${dep.dependencyType}`}\n dependency={dep}\n />\n ))\n )}\n </div>\n </div>\n )}\n\n {/* No package selected */}\n {!selectedPackage && packages.length > 1 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n Select a package to view its dependencies\n </div>\n )}\n\n {/* Info Modal */}\n <DependencyInfoModal\n isOpen={showInfoModal}\n onClose={() => setShowInfoModal(false)}\n />\n </div>\n );\n};\n\n/**\n * DependenciesPanel - Main panel component\n */\nexport const DependenciesPanel: React.FC<PanelComponentProps> = (props) => {\n return <DependenciesPanelContent {...props} />;\n};\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 * Dependencies Panel Tools\n *\n * UTCP-compatible tools for the Dependencies panel extension.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/utcp-panel-event';\n\nconst PANEL_ID = 'principal-ade.dependencies-panel';\n\n/**\n * Tool: Filter Dependencies\n * Allows filtering the dependency list by search term\n */\nexport const filterDependenciesTool: PanelTool = {\n name: 'filter_dependencies',\n description: 'Filter the dependencies list by package name',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter dependencies by name',\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', 'dependencies'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Tool: Select Dependency Type\n * Allows selecting a specific dependency type to filter\n */\nexport const selectDependencyTypeTool: PanelTool = {\n name: 'select_dependency_type',\n description: 'Filter dependencies by type (production, development, or peer)',\n inputs: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['production', 'development', 'peer', 'all'],\n description: 'The dependency type to filter by',\n },\n },\n required: ['type'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedType: { type: 'string' },\n },\n },\n tags: ['filter', 'type', 'dependencies'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-type`,\n },\n};\n\n/**\n * Tool: Select Package (for monorepos)\n * Allows selecting a specific package in a monorepo\n */\nexport const selectPackageTool: PanelTool = {\n name: 'select_package',\n description: 'Select a package to view its dependencies (for monorepos)',\n inputs: {\n type: 'object',\n properties: {\n packagePath: {\n type: 'string',\n description: 'The path of the package to select',\n },\n },\n required: ['packagePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedPackage: { type: 'string' },\n },\n },\n tags: ['select', 'package', 'monorepo'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-package`,\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const dependenciesPanelTools: PanelTool[] = [\n filterDependenciesTool,\n selectDependencyTypeTool,\n selectPackageTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const dependenciesPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Dependencies Panel',\n description: 'Tools for viewing and exploring package dependencies',\n tools: dependenciesPanelTools,\n};\n","import { LocalProjectsPanel } from './panels/LocalProjectsPanel';\nimport { WorkspaceRepositoriesPanel } from './panels/WorkspaceRepositoriesPanel';\nimport { WorkspacesListPanel } from './panels/WorkspacesListPanel';\nimport { DependenciesPanel } from './panels/DependenciesPanel';\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 { dependenciesPanelTools } from './panels/DependenciesPanel/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: 'principal-ade.dependencies-panel',\n name: 'Dependencies',\n icon: 'Package',\n version: '0.1.0',\n author: 'Principal ADE',\n description: 'View and explore package dependencies',\n slices: ['packages'],\n tools: dependenciesPanelTools,\n },\n component: DependenciesPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies 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 dependenciesPanelTools,\n dependenciesPanelToolsMetadata,\n filterDependenciesTool,\n selectDependencyTypeTool,\n selectPackageTool,\n} from './panels/DependenciesPanel/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 { DependenciesPanel } from './panels/DependenciesPanel';\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 PackageLayer,\n DependencyItem,\n PackageSummary,\n PackagesSliceData,\n} from './panels/DependenciesPanel/types';\n"],"names":["__iconNode","Loader2","PANEL_ID","createPanelEvent","_a","React","Home","Edit2","HelpCircle"],"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]}
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/boxes.js","../node_modules/lucide-react/dist/esm/icons/building-2.js","../node_modules/lucide-react/dist/esm/icons/check.js","../node_modules/lucide-react/dist/esm/icons/circle-question-mark.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/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/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/move-up.js","../node_modules/lucide-react/dist/esm/icons/package.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/scale.js","../node_modules/lucide-react/dist/esm/icons/search.js","../node_modules/lucide-react/dist/esm/icons/trash-2.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/DependenciesPanel/components/DependencyInfoModal.tsx","../src/panels/DependenciesPanel/components/DependencyRow.tsx","../src/panels/DependenciesPanel/components/FilterBar.tsx","../src/panels/DependenciesPanel/index.tsx","../src/panels/LocalProjectsPanel/tools.ts","../src/panels/WorkspaceRepositoriesPanel/tools.ts","../src/panels/WorkspacesListPanel/tools.ts","../src/panels/DependenciesPanel/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 [\n \"path\",\n {\n d: \"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\",\n key: \"lc1i9w\"\n }\n ],\n [\"path\", { d: \"m7 16.5-4.74-2.85\", key: \"1o9zyk\" }],\n [\"path\", { d: \"m7 16.5 5-3\", key: \"va8pkn\" }],\n [\"path\", { d: \"M7 16.5v5.17\", key: \"jnp8gn\" }],\n [\n \"path\",\n {\n d: \"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\",\n key: \"8zsnat\"\n }\n ],\n [\"path\", { d: \"m17 16.5-5-3\", key: \"8arw3v\" }],\n [\"path\", { d: \"m17 16.5 4.74-2.85\", key: \"8rfmw\" }],\n [\"path\", { d: \"M17 16.5v5.17\", key: \"k6z78m\" }],\n [\n \"path\",\n {\n d: \"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\",\n key: \"1xygjf\"\n }\n ],\n [\"path\", { d: \"M12 8 7.26 5.15\", key: \"1vbdud\" }],\n [\"path\", { d: \"m12 8 4.74-2.85\", key: \"3rx089\" }],\n [\"path\", { d: \"M12 13.5V8\", key: \"1io7kd\" }]\n];\nconst Boxes = createLucideIcon(\"boxes\", __iconNode);\n\nexport { __iconNode, Boxes as default };\n//# sourceMappingURL=boxes.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 = [[\"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 = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.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: \"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 [\"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 [\"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: \"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\",\n key: \"1a0edw\"\n }\n ],\n [\"path\", { d: \"M12 22V12\", key: \"d0xqtd\" }],\n [\"polyline\", { points: \"3.29 7 12 12 20.71 7\", key: \"ousv84\" }],\n [\"path\", { d: \"m7.5 4.27 9 5.15\", key: \"1c824w\" }]\n];\nconst Package = createLucideIcon(\"package\", __iconNode);\n\nexport { __iconNode, Package as default };\n//# sourceMappingURL=package.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: \"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 [\"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: \"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 } 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}) => {\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 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 // Icon-only action button style (like WorkspaceCard)\n const actionButtonStyle: React.CSSProperties = {\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: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\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 // Icon-only buttons that appear on hover\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={16} className=\"animate-spin\" /> : <Plus size={16} />}\n </button>\n );\n }\n\n // Workspace mode - icon-only buttons\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={16} className=\"animate-spin\" /> : <MoveUp size={16} />}\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={16} /> : <Copy size={16} />}\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={16} />\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={16} className=\"animate-spin\" /> : <X size={16} />}\n </button>\n )}\n </>\n );\n }\n\n // Default and minimal modes - icon-only buttons\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={16} /> : <Copy size={16} />}\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={16} />\n ) : windowState === 'opening' ? (\n <Loader2 size={16} className=\"animate-spin\" />\n ) : (\n <FolderOpen size={16} />\n )}\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={16} className=\"animate-spin\" /> : <X size={16} />}\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={40}\n fallbackIcon={\n <div\n style={{\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}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 style={{\n flex: 1,\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 textDecoration: 'underline',\n textDecorationColor: entry.github?.primaryLanguage\n ? getLanguageColor(entry.github.primaryLanguage)\n : theme.colors.textSecondary,\n textUnderlineOffset: '3px',\n }}\n >\n {entry.name}\n </span>\n </div>\n\n {/* Description row with action buttons */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n minHeight: '20px',\n }}\n >\n {/* Description - shrinks to make room for buttons */}\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 }}\n title={entry.github?.description || entry.path}\n >\n {entry.github?.description || entry.path}\n </div>\n\n {/* Action buttons - grow from right */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n maxWidth: isHovered ? '200px' : 0,\n marginLeft: isHovered ? '8px' : 0,\n overflow: 'hidden',\n opacity: isHovered ? 1 : 0,\n flexShrink: 0,\n transition: 'max-width 0.2s ease, opacity 0.15s ease, margin-left 0.2s 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 padding: '16px',\n gap: '12px',\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 {/* Search bar with sort toggle and add button */}\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n <div style={{ position: 'relative', flex: 1, minWidth: 0 }}>\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 <button\n onClick={() => setSortByOrg(!sortByOrg)}\n title={sortByOrg ? 'Sorting by organization' : 'Sorting by repo name'}\n style={{\n padding: '8px',\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: '8px',\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\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 }}\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\n const workspace = workspaceSlice?.data ?? null;\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 padding: '16px',\n gap: '12px',\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 {/* Workspace header */}\n <div>\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: '16px',\n marginBottom: '4px',\n }}\n >\n {/* Left: Workspace name */}\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n {workspace.name}\n </h3>\n\n {/* Right: 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 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 }}\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 <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 )}\n </div>\n\n {/* Scrollable content */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\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 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 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 } 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 width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\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: '40px',\n height: '40px',\n borderRadius: '6px',\n backgroundColor: `color-mix(in srgb, ${iconColor} 12%, transparent)`,\n color: iconColor,\n flexShrink: 0,\n marginTop: '2px',\n }}\n >\n {workspace.icon ? (\n <span style={{ fontSize: `${theme.fontSizes[3]}px` }}>{workspace.icon}</span>\n ) : (\n <DoorClosed size={24} />\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 flex: 1,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {workspace.name}\n </span>\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: '20px',\n }}\n >\n {/* Description - shrinks to make room for buttons */}\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 }}\n title={workspace.description}\n >\n {workspace.description || '\\u00A0'}\n </div>\n\n {/* Action buttons - grow from right */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n maxWidth: isHovered ? '200px' : 0,\n marginLeft: isHovered ? '8px' : 0,\n overflow: 'hidden',\n opacity: isHovered ? 1 : 0,\n flexShrink: 0,\n transition: 'max-width 0.2s ease, opacity 0.15s ease, margin-left 0.2s 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={16} />\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={16} />\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={16} />\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 const [isCreating, setIsCreating] = useState(false);\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\n const handleCreateWorkspace = useCallback(async () => {\n if (!panelActions.createWorkspace) {\n console.warn('Create workspace action not available');\n return;\n }\n\n const name = window.prompt('Enter workspace name:');\n if (!name?.trim()) return;\n\n try {\n setIsCreating(true);\n const workspace = await panelActions.createWorkspace(name.trim());\n events.emit(\n createPanelEvent(`${PANEL_ID}:workspace:created`, {\n workspaceId: workspace.id,\n workspace,\n })\n );\n\n // Refresh workspaces\n await context.refresh('workspace', 'workspaces');\n } catch (error) {\n console.error('Failed to create workspace:', error);\n } finally {\n setIsCreating(false);\n }\n }, [panelActions, events, context]);\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 padding: '16px',\n gap: '12px',\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 display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n }}\n >\n <h3\n style={{\n margin: 0,\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Workspaces\n </h3>\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 {panelActions.createWorkspace && (\n <button\n onClick={handleCreateWorkspace}\n disabled={isCreating}\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: isCreating ? 'not-allowed' : 'pointer',\n opacity: isCreating ? 0.6 : 1,\n transition: 'all 0.15s ease',\n }}\n title=\"Create new workspace\"\n >\n <Plus size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Search box */}\n {showSearchBox && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\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 }}\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 from 'react';\nimport { X, Package, Scale, HelpCircle } from 'lucide-react';\nimport { useTheme, type Theme } from '@principal-ade/industry-theme';\n\ninterface DependencyInfoModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport const DependencyInfoModal: React.FC<DependencyInfoModalProps> = ({\n isOpen,\n onClose,\n}) => {\n const { theme } = useTheme();\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: theme.colors.muted,\n zIndex: theme.zIndices[4],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n onClick={onClose}\n >\n {/* Modal */}\n <div\n style={{\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[3]}px`,\n maxWidth: '600px',\n maxHeight: '80vh',\n width: '90%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n boxShadow: theme.shadows[3],\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2\n style={{\n fontSize: `${theme.fontSizes[4]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n <HelpCircle size={20} />\n Understanding Dependencies\n </h2>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n color: theme.colors.textSecondary,\n cursor: 'pointer',\n padding: `${theme.space[1]}px`,\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div\n style={{\n padding: `${theme.space[4]}px`,\n overflow: 'auto',\n flex: 1,\n }}\n >\n {/* Dependency Types */}\n <Section\n icon={<Package size={18} />}\n title=\"Dependency Types\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'prod', color: theme.colors.primary }}\n title=\"Production Dependencies\"\n description=\"Required for your application to run in production. These are bundled with your app and affect its size and security.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'dev', color: theme.colors.secondary }}\n title=\"Development Dependencies\"\n description=\"Only needed during development (build tools, testing, linters). Not included in production builds.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'peer', color: theme.colors.accent }}\n title=\"Peer Dependencies\"\n description=\"Expected to be provided by the consumer of your package. Important for library authors to specify compatibility.\"\n theme={theme}\n />\n </Section>\n\n {/* Licenses */}\n <Section\n icon={<Scale size={18} />}\n title=\"Common Licenses\"\n theme={theme}\n >\n <InfoItem\n badge={{ text: 'MIT', color: theme.colors.success }}\n title=\"Permissive Licenses (MIT, Apache, BSD)\"\n description=\"Few restrictions. Can use in commercial projects. Must include copyright notice.\"\n theme={theme}\n />\n <InfoItem\n badge={{ text: 'GPL', color: theme.colors.warning }}\n title=\"Copyleft Licenses (GPL, LGPL, AGPL)\"\n description=\"Requires sharing source code of derivative works. Can impact your project's licensing.\"\n theme={theme}\n />\n </Section>\n </div>\n </div>\n </div>\n </>\n );\n};\n\n// Helper Components\nconst Section: React.FC<{\n icon: React.ReactNode;\n title: string;\n theme: Theme;\n children: React.ReactNode;\n}> = ({ icon, title, theme, children }) => (\n <div style={{ marginBottom: `${theme.space[5]}px` }}>\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n marginBottom: `${theme.space[3]}px`,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n }}\n >\n {icon}\n {title}\n </h3>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {children}\n </div>\n </div>\n);\n\nconst InfoItem: React.FC<{\n badge: { text: string; color: string };\n title: string;\n description: string;\n theme: Theme;\n}> = ({ badge, title, description, theme }) => (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n backgroundColor: theme.colors.backgroundSecondary,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n marginBottom: `${theme.space[1]}px`,\n }}\n >\n <span\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n backgroundColor: `${badge.color}20`,\n color: badge.color,\n }}\n >\n {badge.text}\n </span>\n <span\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n }}\n >\n {title}\n </span>\n </div>\n <div\n style={{\n fontSize: `${theme.fontSizes[1]}px`,\n color: theme.colors.textSecondary,\n lineHeight: theme.lineHeights.relaxed,\n }}\n >\n {description}\n </div>\n </div>\n);\n","import React, { useState } from 'react';\nimport { ExternalLink, Copy, Check } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { DependencyItem } from '../types';\n\ninterface DependencyRowProps {\n dependency: DependencyItem;\n}\n\nexport const DependencyRow: React.FC<DependencyRowProps> = ({ dependency }) => {\n const { theme } = useTheme();\n const [isHovered, setIsHovered] = useState(false);\n const [copied, setCopied] = useState(false);\n\n const getDependencyTypeBadgeStyle = (type: string) => {\n const baseStyle = {\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n minWidth: '36px',\n textAlign: 'center' as const,\n };\n\n switch (type) {\n case 'production':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.primary}20`,\n color: theme.colors.primary,\n };\n case 'development':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.secondary}20`,\n color: theme.colors.secondary,\n };\n case 'peer':\n return {\n ...baseStyle,\n backgroundColor: `${theme.colors.accent}20`,\n color: theme.colors.accent,\n };\n default:\n return {\n ...baseStyle,\n backgroundColor: theme.colors.backgroundLight,\n color: theme.colors.textSecondary,\n };\n }\n };\n\n const handleCopy = async (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n try {\n const copyText = `${dependency.name}@${dependency.version}`;\n await navigator.clipboard.writeText(copyText);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const actionButtonStyle: React.CSSProperties = {\n padding: `${theme.space[1]}px`,\n borderRadius: `${theme.radii[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n opacity: isHovered ? 1 : 0,\n pointerEvents: isHovered ? 'auto' : 'none',\n };\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: `${theme.space[2]}px ${theme.space[3]}px`,\n backgroundColor: theme.colors.background,\n borderRadius: `${theme.radii[1]}px`,\n fontSize: `${theme.fontSizes[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n transition: 'all 0.2s',\n }}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {/* Type badge and package name */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n flex: 1,\n minWidth: 0,\n }}\n >\n <span style={getDependencyTypeBadgeStyle(dependency.dependencyType)}>\n {dependency.dependencyType === 'production'\n ? 'prod'\n : dependency.dependencyType === 'development'\n ? 'dev'\n : 'peer'}\n </span>\n <span\n style={{\n fontWeight: theme.fontWeights.medium,\n color: theme.colors.text,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {dependency.name}\n </span>\n {/* NPM link - next to package name */}\n <a\n href={`https://www.npmjs.com/package/${dependency.name}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n ...actionButtonStyle,\n color: theme.colors.textSecondary,\n textDecoration: 'none',\n flexShrink: 0,\n }}\n title=\"View on npm\"\n >\n <ExternalLink size={12} />\n </a>\n </div>\n\n {/* Copy button and version */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {/* Copy button - left of version */}\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n ...actionButtonStyle,\n color: copied ? theme.colors.success || '#10b981' : theme.colors.textSecondary,\n }}\n title={copied ? 'Copied!' : `Copy ${dependency.name}@${dependency.version}`}\n >\n {copied ? <Check size={12} /> : <Copy size={12} />}\n </button>\n\n <span style={{ color: theme.colors.textSecondary }}>\n {dependency.version}\n </span>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Search, X } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\n\ntype ToggleableFilterType = 'production' | 'development' | 'peer';\n\ninterface FilterBarProps {\n activeFilters: Set<ToggleableFilterType>;\n onToggleFilter: (type: ToggleableFilterType) => void;\n searchQuery: string;\n onSearchChange: (query: string) => void;\n counts: {\n all: number;\n production: number;\n development: number;\n peer: number;\n };\n}\n\nexport const FilterBar: React.FC<FilterBarProps> = ({\n activeFilters,\n onToggleFilter,\n searchQuery,\n onSearchChange,\n counts,\n}) => {\n const { theme } = useTheme();\n\n // Only show filter buttons for types that have dependencies\n const availableFilters: ToggleableFilterType[] = [\n ...(counts.peer > 0 ? (['peer'] as const) : []),\n ...(counts.production > 0 ? (['production'] as const) : []),\n ...(counts.development > 0 ? (['development'] as const) : []),\n ];\n\n // Don't show filters if there's only one type\n const showFilters = availableFilters.length > 1;\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n }}\n >\n {/* Search Bar */}\n <div\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <Search\n size={14}\n style={{\n position: 'absolute',\n left: `${theme.space[3]}px`,\n color: theme.colors.textSecondary,\n pointerEvents: 'none',\n }}\n />\n <input\n type=\"text\"\n placeholder=\"Search dependencies...\"\n value={searchQuery}\n onChange={(e) => onSearchChange(e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px ${theme.space[5]}px`,\n borderRadius: `${theme.radii[2]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n outline: 'none',\n transition: 'all 0.2s',\n }}\n />\n {searchQuery && (\n <button\n onClick={() => onSearchChange('')}\n style={{\n position: 'absolute',\n right: `${theme.space[2]}px`,\n padding: `${theme.space[1]}px`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n borderRadius: `${theme.radii[1]}px`,\n }}\n title=\"Clear search\"\n >\n <X size={14} color={theme.colors.textSecondary} />\n </button>\n )}\n </div>\n\n {/* Type Filter Toggles */}\n {showFilters && (\n <div style={{ display: 'flex', gap: `${theme.space[1]}px`, width: '100%' }}>\n {availableFilters.map((type) => {\n const isActive = activeFilters.has(type);\n return (\n <button\n key={type}\n onClick={() => onToggleFilter(type)}\n style={{\n flex: 1,\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,\n backgroundColor: isActive\n ? `${theme.colors.primary}20`\n : theme.colors.backgroundSecondary,\n color: isActive ? theme.colors.primary : theme.colors.text,\n cursor: 'pointer',\n transition: 'all 0.2s',\n }}\n >\n {type === 'production'\n ? 'Prod'\n : type === 'development'\n ? 'Dev'\n : 'Peer'}\n <span\n style={{ marginLeft: `${theme.space[1]}px`, opacity: 0.7 }}\n >\n ({counts[type]})\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useMemo } from 'react';\nimport { Package, HelpCircle, Boxes } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../../types';\nimport type {\n PackageLayer,\n DependencyItem,\n PackagesSliceData,\n} from './types';\nimport { DependencyInfoModal, DependencyRow, FilterBar } from './components';\n\n/**\n * Sort order for dependency types: peer, production, development\n */\nconst dependencyTypeOrder: Record<DependencyItem['dependencyType'], number> = {\n peer: 0,\n production: 1,\n development: 2,\n};\n\n/**\n * Extract dependencies from a PackageLayer into DependencyItems\n */\nfunction extractDependencies(packageLayer: PackageLayer): DependencyItem[] {\n const { dependencies, devDependencies, peerDependencies } =\n packageLayer.packageData;\n\n const items: DependencyItem[] = [];\n\n if (dependencies) {\n Object.entries(dependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'production' });\n });\n }\n\n if (devDependencies) {\n Object.entries(devDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'development' });\n });\n }\n\n if (peerDependencies) {\n Object.entries(peerDependencies).forEach(([name, version]) => {\n items.push({ name, version, dependencyType: 'peer' });\n });\n }\n\n // Sort by type (peer, prod, dev) then by name\n return items.sort((a, b) => {\n const typeCompare = dependencyTypeOrder[a.dependencyType] - dependencyTypeOrder[b.dependencyType];\n if (typeCompare !== 0) return typeCompare;\n return a.name.localeCompare(b.name);\n });\n}\n\n/**\n * DependenciesPanelContent - Internal component that uses theme\n */\nconst DependenciesPanelContent: React.FC<PanelComponentProps> = ({\n context,\n}) => {\n const { theme } = useTheme();\n\n // State\n const [selectedPackagePath, setSelectedPackagePath] = useState<string | null>(\n null\n );\n const [activeFilters, setActiveFilters] = useState<Set<'production' | 'development' | 'peer'>>(new Set());\n const [searchQuery, setSearchQuery] = useState('');\n const [showInfoModal, setShowInfoModal] = useState(false);\n\n // Get packages slice data\n const packagesSlice = context.getSlice<PackagesSliceData>('packages');\n const isLoading = context.isSliceLoading('packages');\n const hasPackages = context.hasSlice('packages');\n\n const packages = useMemo(() => {\n return packagesSlice?.data?.packages ?? [];\n }, [packagesSlice?.data?.packages]);\n\n // Auto-select: single package, or root package in monorepo\n const effectiveSelectedPath = useMemo(() => {\n if (selectedPackagePath !== null) return selectedPackagePath;\n if (packages.length === 1) return packages[0].packageData.path;\n // For monorepos, auto-select root package (path: '')\n const rootPackage = packages.find((p) => p.packageData.path === '');\n if (rootPackage) return '';\n return null;\n }, [selectedPackagePath, packages]);\n\n // Get selected package\n const selectedPackage = useMemo(() => {\n if (effectiveSelectedPath === null) return null;\n return packages.find((p) => p.packageData.path === effectiveSelectedPath);\n }, [effectiveSelectedPath, packages]);\n\n // Extract dependencies from selected package\n const dependencyItems = useMemo(() => {\n if (!selectedPackage) return [];\n return extractDependencies(selectedPackage);\n }, [selectedPackage]);\n\n // Calculate counts\n const counts = useMemo(() => {\n return {\n all: dependencyItems.length,\n production: dependencyItems.filter((d) => d.dependencyType === 'production')\n .length,\n development: dependencyItems.filter(\n (d) => d.dependencyType === 'development'\n ).length,\n peer: dependencyItems.filter((d) => d.dependencyType === 'peer').length,\n };\n }, [dependencyItems]);\n\n // Handle filter toggle\n const handleToggleFilter = (type: 'production' | 'development' | 'peer') => {\n setActiveFilters((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n // Filter dependencies\n const filteredDependencies = useMemo(() => {\n let filtered = [...dependencyItems];\n\n // Apply search\n if (searchQuery.trim()) {\n const query = searchQuery.toLowerCase();\n filtered = filtered.filter((dep) =>\n dep.name.toLowerCase().includes(query)\n );\n }\n\n // Apply type filter: empty set or all types selected = show all\n const allTypes: Array<'production' | 'development' | 'peer'> = ['production', 'development', 'peer'];\n const availableTypes = allTypes.filter((t) => counts[t] > 0);\n const isAllSelected = activeFilters.size === 0 || availableTypes.every((t) => activeFilters.has(t));\n\n if (!isAllSelected && activeFilters.size > 0) {\n filtered = filtered.filter((dep) => activeFilters.has(dep.dependencyType));\n }\n\n return filtered;\n }, [dependencyItems, searchQuery, activeFilters, counts]);\n\n // Loading state\n if (isLoading) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading packages...\n </div>\n );\n }\n\n // No packages available\n if (!hasPackages || packages.length === 0) {\n return (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: `${theme.space[2]}px`,\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.background,\n fontFamily: theme.fonts.body,\n }}\n >\n <Package size={32} />\n <p style={{ margin: 0 }}>No package data available</p>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n overflow: 'hidden',\n }}\n >\n {/* Fixed Header Section */}\n <div\n style={{\n flexShrink: 0,\n padding: `${theme.space[3]}px`,\n paddingBottom: `${theme.space[2]}px`,\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[2]}px`,\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Title Row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h3\n style={{\n fontSize: `${theme.fontSizes[2]}px`,\n fontWeight: theme.fontWeights.semibold,\n color: theme.colors.text,\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[2]}px`,\n margin: 0,\n }}\n >\n {packages.length > 1 ? (\n <>\n <Boxes size={16} />\n Monorepo Dependencies\n <span\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.body,\n color: theme.colors.textSecondary,\n }}\n >\n ({packages.length})\n </span>\n </>\n ) : (\n <>\n <Package size={16} />\n Dependencies\n </>\n )}\n </h3>\n <button\n onClick={() => setShowInfoModal(true)}\n style={{\n padding: `${theme.space[1]}px ${theme.space[2]}px`,\n fontSize: `${theme.fontSizes[0]}px`,\n fontWeight: theme.fontWeights.medium,\n fontFamily: theme.fonts.body,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.primary,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: `${theme.space[1]}px`,\n transition: 'all 0.2s',\n }}\n >\n <HelpCircle size={12} />\n Learn More\n </button>\n </div>\n\n {/* Package Selection (only if multiple packages) */}\n {packages.length > 1 && (\n <select\n value={effectiveSelectedPath ?? '__none__'}\n onChange={(e) => setSelectedPackagePath(e.target.value === '__none__' ? null : e.target.value)}\n style={{\n width: '100%',\n padding: `${theme.space[2]}px`,\n borderRadius: `${theme.radii[1]}px`,\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n fontSize: `${theme.fontSizes[1]}px`,\n fontFamily: theme.fonts.body,\n cursor: 'pointer',\n }}\n >\n {packages.map((pkg) => (\n <option key={pkg.packageData.path || '__root__'} value={pkg.packageData.path}>\n {pkg.packageData.name} ({pkg.packageData.path || 'root'})\n </option>\n ))}\n </select>\n )}\n\n {/* Package Info (single package) */}\n {packages.length === 1 && selectedPackage && (\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n }}\n >\n {selectedPackage.packageData.name} • {dependencyItems.length} dependencies\n </div>\n )}\n\n {/* Filter Bar */}\n {selectedPackage && dependencyItems.length > 0 && (\n <FilterBar\n activeFilters={activeFilters}\n onToggleFilter={handleToggleFilter}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n counts={counts}\n />\n )}\n </div>\n\n {/* Scrollable Dependencies List */}\n {selectedPackage && dependencyItems.length > 0 && (\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n padding: `${theme.space[2]}px ${theme.space[3]}px ${theme.space[3]}px`,\n }}\n >\n {/* Results Count */}\n <div\n style={{\n fontSize: `${theme.fontSizes[0]}px`,\n color: theme.colors.textSecondary,\n marginBottom: `${theme.space[2]}px`,\n }}\n >\n Showing {filteredDependencies.length} of {dependencyItems.length} dependencies\n </div>\n\n {/* Dependency Items */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.space[1]}px`,\n }}\n >\n {filteredDependencies.length === 0 ? (\n <div\n style={{\n padding: `${theme.space[3]}px`,\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n No dependencies match your filters\n </div>\n ) : (\n filteredDependencies.map((dep) => (\n <DependencyRow\n key={`${dep.name}-${dep.dependencyType}`}\n dependency={dep}\n />\n ))\n )}\n </div>\n </div>\n )}\n\n {/* No package selected */}\n {!selectedPackage && packages.length > 1 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontSize: `${theme.fontSizes[1]}px`,\n }}\n >\n Select a package to view its dependencies\n </div>\n )}\n\n {/* Info Modal */}\n <DependencyInfoModal\n isOpen={showInfoModal}\n onClose={() => setShowInfoModal(false)}\n />\n </div>\n );\n};\n\n/**\n * DependenciesPanel - Main panel component\n */\nexport const DependenciesPanel: React.FC<PanelComponentProps> = (props) => {\n return <DependenciesPanelContent {...props} />;\n};\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 * Dependencies Panel Tools\n *\n * UTCP-compatible tools for the Dependencies panel extension.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type { PanelTool, PanelToolsMetadata } from '@principal-ade/utcp-panel-event';\n\nconst PANEL_ID = 'principal-ade.dependencies-panel';\n\n/**\n * Tool: Filter Dependencies\n * Allows filtering the dependency list by search term\n */\nexport const filterDependenciesTool: PanelTool = {\n name: 'filter_dependencies',\n description: 'Filter the dependencies list by package name',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n description: 'Search term to filter dependencies by name',\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', 'dependencies'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:filter`,\n },\n};\n\n/**\n * Tool: Select Dependency Type\n * Allows selecting a specific dependency type to filter\n */\nexport const selectDependencyTypeTool: PanelTool = {\n name: 'select_dependency_type',\n description: 'Filter dependencies by type (production, development, or peer)',\n inputs: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n enum: ['production', 'development', 'peer', 'all'],\n description: 'The dependency type to filter by',\n },\n },\n required: ['type'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedType: { type: 'string' },\n },\n },\n tags: ['filter', 'type', 'dependencies'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-type`,\n },\n};\n\n/**\n * Tool: Select Package (for monorepos)\n * Allows selecting a specific package in a monorepo\n */\nexport const selectPackageTool: PanelTool = {\n name: 'select_package',\n description: 'Select a package to view its dependencies (for monorepos)',\n inputs: {\n type: 'object',\n properties: {\n packagePath: {\n type: 'string',\n description: 'The path of the package to select',\n },\n },\n required: ['packagePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n selectedPackage: { type: 'string' },\n },\n },\n tags: ['select', 'package', 'monorepo'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: `${PANEL_ID}:select-package`,\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const dependenciesPanelTools: PanelTool[] = [\n filterDependenciesTool,\n selectDependencyTypeTool,\n selectPackageTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const dependenciesPanelToolsMetadata: PanelToolsMetadata = {\n id: PANEL_ID,\n name: 'Dependencies Panel',\n description: 'Tools for viewing and exploring package dependencies',\n tools: dependenciesPanelTools,\n};\n","import { LocalProjectsPanel } from './panels/LocalProjectsPanel';\nimport { WorkspaceRepositoriesPanel } from './panels/WorkspaceRepositoriesPanel';\nimport { WorkspacesListPanel } from './panels/WorkspacesListPanel';\nimport { DependenciesPanel } from './panels/DependenciesPanel';\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 { dependenciesPanelTools } from './panels/DependenciesPanel/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: 'principal-ade.dependencies-panel',\n name: 'Dependencies',\n icon: 'Package',\n version: '0.1.0',\n author: 'Principal ADE',\n description: 'View and explore package dependencies',\n slices: ['packages'],\n tools: dependenciesPanelTools,\n },\n component: DependenciesPanel,\n\n onMount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies Panel mounted');\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Dependencies 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 dependenciesPanelTools,\n dependenciesPanelToolsMetadata,\n filterDependenciesTool,\n selectDependencyTypeTool,\n selectPackageTool,\n} from './panels/DependenciesPanel/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 { DependenciesPanel } from './panels/DependenciesPanel';\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 PackageLayer,\n DependencyItem,\n PackageSummary,\n PackagesSliceData,\n} from './panels/DependenciesPanel/types';\n"],"names":["__iconNode","Loader2","PANEL_ID","createPanelEvent","_a","React","Home","Edit2","HelpCircle"],"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]}