@industry-theme/git-panels 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +536 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/mocks/panelContext.d.ts +24 -0
- package/dist/mocks/panelContext.d.ts.map +1 -0
- package/dist/panels/GitCommitHistoryPanel.d.ts +19 -0
- package/dist/panels/GitCommitHistoryPanel.d.ts.map +1 -0
- package/dist/panels/GitCommitHistoryPanel.stories.d.ts +30 -0
- package/dist/panels/GitCommitHistoryPanel.stories.d.ts.map +1 -0
- package/dist/panels/GitConfigPanel.d.ts +20 -0
- package/dist/panels/GitConfigPanel.d.ts.map +1 -0
- package/dist/panels/GitConfigPanel.stories.d.ts +34 -0
- package/dist/panels/GitConfigPanel.stories.d.ts.map +1 -0
- package/dist/panels/GitPullRequestsPanel.d.ts +19 -0
- package/dist/panels/GitPullRequestsPanel.d.ts.map +1 -0
- package/dist/panels/GitPullRequestsPanel.stories.d.ts +34 -0
- package/dist/panels/GitPullRequestsPanel.stories.d.ts.map +1 -0
- package/dist/panels.bundle.js +1437 -0
- package/dist/panels.bundle.js.map +1 -0
- package/dist/tools/index.d.ts +48 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools.bundle.js +139 -0
- package/dist/types/index.d.ts +192 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/formatters.d.ts +12 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panels.bundle.js","sources":["../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/calendar.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/clock.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/git-branch.js","../node_modules/lucide-react/dist/esm/icons/git-merge.js","../node_modules/lucide-react/dist/esm/icons/git-pull-request.js","../node_modules/lucide-react/dist/esm/icons/history.js","../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/lucide-react/dist/esm/icons/message-square.js","../node_modules/lucide-react/dist/esm/icons/refresh-ccw.js","../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../src/utils/formatters.ts","../src/panels/GitCommitHistoryPanel.tsx","../src/panels/GitPullRequestsPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M8 2v4\", key: \"1cmpym\" }],\n [\"path\", { d: \"M16 2v4\", key: \"4m81vk\" }],\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"4\", rx: \"2\", key: \"1hopcy\" }],\n [\"path\", { d: \"M3 10h18\", key: \"8toen8\" }]\n];\nconst Calendar = createLucideIcon(\"calendar\", __iconNode);\n\nexport { __iconNode, Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 6v6l4 2\", key: \"mmk7yg\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }]\n];\nconst Clock = createLucideIcon(\"clock\", __iconNode);\n\nexport { __iconNode, Clock as default };\n//# sourceMappingURL=clock.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 [\"line\", { x1: \"6\", x2: \"6\", y1: \"3\", y2: \"15\", key: \"17qcm7\" }],\n [\"circle\", { cx: \"18\", cy: \"6\", r: \"3\", key: \"1h7g24\" }],\n [\"circle\", { cx: \"6\", cy: \"18\", r: \"3\", key: \"fqmcym\" }],\n [\"path\", { d: \"M18 9a9 9 0 0 1-9 9\", key: \"n2h4wq\" }]\n];\nconst GitBranch = createLucideIcon(\"git-branch\", __iconNode);\n\nexport { __iconNode, GitBranch as default };\n//# sourceMappingURL=git-branch.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: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M6 21V9a9 9 0 0 0 9 9\", key: \"7kw0sc\" }]\n];\nconst GitMerge = createLucideIcon(\"git-merge\", __iconNode);\n\nexport { __iconNode, GitMerge as default };\n//# sourceMappingURL=git-merge.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: \"18\", cy: \"18\", r: \"3\", key: \"1xkwt0\" }],\n [\"circle\", { cx: \"6\", cy: \"6\", r: \"3\", key: \"1lh9wr\" }],\n [\"path\", { d: \"M13 6h3a2 2 0 0 1 2 2v7\", key: \"1yeb86\" }],\n [\"line\", { x1: \"6\", x2: \"6\", y1: \"9\", y2: \"21\", key: \"rroup\" }]\n];\nconst GitPullRequest = createLucideIcon(\"git-pull-request\", __iconNode);\n\nexport { __iconNode, GitPullRequest as default };\n//# sourceMappingURL=git-pull-request.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M12 7v5l4 2\", key: \"1fdv2h\" }]\n];\nconst History = createLucideIcon(\"history\", __iconNode);\n\nexport { __iconNode, History as default };\n//# sourceMappingURL=history.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\",\n key: \"18887p\"\n }\n ]\n];\nconst MessageSquare = createLucideIcon(\"message-square\", __iconNode);\n\nexport { __iconNode, MessageSquare as default };\n//# sourceMappingURL=message-square.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"14sxne\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\", key: \"1hlbsb\" }],\n [\"path\", { d: \"M16 16h5v5\", key: \"ccwih5\" }]\n];\nconst RefreshCcw = createLucideIcon(\"refresh-ccw\", __iconNode);\n\nexport { __iconNode, RefreshCcw as default };\n//# sourceMappingURL=refresh-ccw.js.map\n","// 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, 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.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 * Formatting utilities for git panels\n */\n\n/**\n * Format a date string as relative time (e.g., \"2 hours ago\")\n */\nexport function formatRelativeTime(dateStr: string | undefined): string {\n if (!dateStr) return 'Unknown';\n const date = new Date(dateStr);\n if (Number.isNaN(date.getTime())) {\n return 'Unknown';\n }\n\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const minutes = Math.floor(diffMs / (1000 * 60));\n if (minutes < 1) return 'Just now';\n if (minutes < 60) return `${minutes} minute${minutes === 1 ? '' : 's'} ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours} hour${hours === 1 ? '' : 's'} ago`;\n const days = Math.floor(hours / 24);\n if (days < 30) return `${days} day${days === 1 ? '' : 's'} ago`;\n const months = Math.floor(days / 30);\n if (months < 12) return `${months} month${months === 1 ? '' : 's'} ago`;\n const years = Math.floor(months / 12);\n return `${years} year${years === 1 ? '' : 's'} ago`;\n}\n\n/**\n * Format a date string with more context (Today, Yesterday, X days ago, etc.)\n */\nexport function formatDate(dateString: string | null): string {\n if (!dateString) {\n return 'Unknown';\n }\n\n const date = new Date(dateString);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (Number.isNaN(diffDays)) return 'Unknown';\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n return `${Math.floor(diffDays / 365)} years ago`;\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { History as HistoryIcon, RefreshCcw, Clock } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../types';\nimport type { CommitsSliceData, GitCommitInfo } from '../types';\nimport { formatRelativeTime } from '../utils/formatters';\n\n/**\n * GitCommitHistoryPanel - Displays git commit history from the 'commits' slice.\n *\n * This panel expects the host to provide commit data through:\n * - context.getSlice<CommitsSliceData>('commits')\n *\n * The panel supports:\n * - Displaying commits sorted by date (newest first)\n * - Refresh via context.refresh()\n * - Tool events for programmatic interaction\n */\nexport const GitCommitHistoryPanel: React.FC<PanelComponentProps> = ({\n context,\n events,\n}) => {\n const { theme } = useTheme();\n const [limit, setLimit] = useState(25);\n\n // Get commits from the slice\n const commitsSlice = context.getSlice<CommitsSliceData>('commits');\n const hasCommits = context.hasSlice('commits');\n const isLoading = context.isSliceLoading('commits');\n const commits = commitsSlice?.data?.commits ?? [];\n\n // Sort commits by date (newest first)\n const sortedCommits = useMemo(() => {\n return commits.slice(0, limit).sort((a, b) => {\n const timeA = new Date(a.date).getTime();\n const timeB = new Date(b.date).getTime();\n return timeB - timeA;\n });\n }, [commits, limit]);\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n // Tool: refresh commits\n events.on<{ force?: boolean }>('git-panels.commit-history:refresh', async (event) => {\n try {\n await context.refresh('repository', 'commits');\n } catch (error) {\n console.error('[GitCommitHistoryPanel] Refresh failed:', error);\n }\n }),\n\n // Tool: set limit\n events.on<{ limit: number }>('git-panels.commit-history:set-limit', (event) => {\n const newLimit = event.payload?.limit;\n if (newLimit && newLimit > 0) {\n setLimit(newLimit);\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, context]);\n\n const handleRefresh = async () => {\n try {\n await context.refresh('repository', 'commits');\n } catch (error) {\n console.error('[GitCommitHistoryPanel] Refresh failed:', error);\n }\n };\n\n const containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n overflow: 'hidden',\n };\n\n // Render a centered state message\n const renderState = (message: string) => (\n <div style={containerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n color: theme.colors.textSecondary,\n }}\n >\n {message}\n </div>\n </div>\n );\n\n // No repository connected\n if (!context.currentScope.repository) {\n return renderState('Connect a local repository to see commit history.');\n }\n\n // No commits slice available\n if (!hasCommits) {\n return renderState('Commit history data is not available.');\n }\n\n return (\n <div style={containerStyle}>\n {/* Header - 40px total including border */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n color: theme.colors.textSecondary,\n textTransform: 'uppercase',\n fontWeight: 600,\n fontSize: theme.fontSizes[1],\n boxSizing: 'border-box',\n }}\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <HistoryIcon size={14} />\n Commit History\n </span>\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={isLoading}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 10px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: isLoading ? 'default' : 'pointer',\n fontSize: '12px',\n fontWeight: 500,\n opacity: isLoading ? 0.7 : 1,\n }}\n >\n <RefreshCcw size={12} />\n {isLoading ? 'Refreshing...' : 'Refresh'}\n </button>\n </div>\n\n {/* Content area */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}\n >\n {/* Loading state */}\n {isLoading && commits.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n }}\n >\n Loading commit history...\n </div>\n )}\n\n {/* Empty state */}\n {!isLoading && sortedCommits.length === 0 && (\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n }}\n >\n No commits found.\n </div>\n )}\n\n {/* Commit list */}\n {sortedCommits.map((commit) => (\n <CommitCard key={commit.hash} commit={commit} theme={theme} />\n ))}\n </div>\n </div>\n );\n};\n\n/**\n * Individual commit card component\n */\nconst CommitCard: React.FC<{\n commit: GitCommitInfo;\n theme: ReturnType<typeof useTheme>['theme'];\n}> = ({ commit, theme }) => {\n const firstLine = commit.message.split('\\n')[0];\n const relative = formatRelativeTime(commit.date);\n\n return (\n <div\n style={{\n padding: '12px',\n backgroundColor: theme.colors.background,\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n }}\n >\n <div\n style={{\n fontSize: theme.fontSizes[2],\n color: theme.colors.text,\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n {firstLine}\n </div>\n <div\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '8px',\n alignItems: 'center',\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n }}\n >\n {commit.author && <span>{commit.author}</span>}\n <span style={{ fontSize: '10px' }}>•</span>\n <span\n style={{\n fontFamily: theme.fonts.monospace,\n fontSize: '11px',\n }}\n >\n {commit.hash.substring(0, 8)}\n </span>\n <span style={{ fontSize: '10px' }}>•</span>\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <Clock size={12} />\n <span title={new Date(commit.date).toLocaleString()}>{relative}</span>\n </span>\n </div>\n </div>\n );\n};\n\n/**\n * Preview component for panel configuration UI\n */\nexport const GitCommitHistoryPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }}\n >\n {[\n {\n title: 'chore: add commit history panel',\n author: 'Alex Engineer',\n sha: '1a2b3c4d',\n time: '2 hours ago',\n },\n {\n title: 'fix: handle empty repositories gracefully',\n author: 'Jamie Dev',\n sha: '5f6g7h8i',\n time: 'Yesterday',\n },\n ].map((commit) => (\n <div\n key={commit.sha}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '6px',\n padding: '8px',\n backgroundColor: theme.colors.background,\n }}\n >\n <span style={{ fontWeight: 600 }}>{commit.title}</span>\n <span\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n color: theme.colors.textSecondary,\n fontSize: '11px',\n fontFamily: theme.fonts.body,\n }}\n >\n <span>{commit.author}</span>\n <span>•</span>\n <span style={{ fontFamily: theme.fonts.monospace }}>\n {commit.sha}\n </span>\n <span>•</span>\n <span>{commit.time}</span>\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport {\n AlertCircle,\n Calendar,\n ExternalLink,\n GitBranch,\n GitMerge,\n GitPullRequest,\n Loader2,\n MessageSquare,\n RefreshCcw,\n} from 'lucide-react';\nimport type { PanelComponentProps } from '../types';\nimport type { PullRequestsSliceData, PullRequestInfo } from '../types';\nimport { formatDate } from '../utils/formatters';\n\ntype FilterState = 'all' | 'open' | 'closed';\n\n/**\n * GitPullRequestsPanel - Displays pull requests from the 'pullRequests' slice.\n *\n * This panel expects the host to provide PR data through:\n * - context.getSlice<PullRequestsSliceData>('pullRequests')\n *\n * The panel supports:\n * - Filtering by state (all, open, closed)\n * - Refresh via context.refresh()\n * - Tool events for programmatic interaction\n */\nexport const GitPullRequestsPanel: React.FC<PanelComponentProps> = ({\n context,\n events,\n}) => {\n const { theme } = useTheme();\n const [filter, setFilter] = useState<FilterState>('open');\n\n // Get pull requests from the slice\n const prSlice = context.getSlice<PullRequestsSliceData>('pullRequests');\n const hasPRs = context.hasSlice('pullRequests');\n const isLoading = context.isSliceLoading('pullRequests');\n const pullRequests = prSlice?.data?.pullRequests ?? [];\n const owner = prSlice?.data?.owner;\n const repo = prSlice?.data?.repo;\n\n // Subscribe to panel events\n useEffect(() => {\n const unsubscribers = [\n // Tool: refresh pull requests\n events.on<{ force?: boolean }>('git-panels.pull-requests:refresh', async () => {\n try {\n await context.refresh('repository', 'pullRequests');\n } catch (error) {\n console.error('[GitPullRequestsPanel] Refresh failed:', error);\n }\n }),\n\n // Tool: set filter\n events.on<{ filter: FilterState }>('git-panels.pull-requests:set-filter', (event) => {\n const newFilter = event.payload?.filter;\n if (newFilter && ['all', 'open', 'closed'].includes(newFilter)) {\n setFilter(newFilter);\n }\n }),\n ];\n\n return () => unsubscribers.forEach((unsub) => unsub());\n }, [events, context]);\n\n // Filter pull requests\n const filteredPullRequests = useMemo(() => {\n if (filter === 'all') {\n return pullRequests;\n }\n return pullRequests.filter((pr) => pr.state === filter);\n }, [filter, pullRequests]);\n\n // Count PRs by state\n const counts = useMemo(() => {\n const open = pullRequests.filter((pr) => pr.state === 'open').length;\n const closed = pullRequests.filter((pr) => pr.state === 'closed').length;\n return { open, closed, all: pullRequests.length };\n }, [pullRequests]);\n\n const handleRefresh = async () => {\n try {\n await context.refresh('repository', 'pullRequests');\n } catch (error) {\n console.error('[GitPullRequestsPanel] Refresh failed:', error);\n }\n };\n\n const containerStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: theme.colors.backgroundSecondary,\n overflow: 'hidden',\n };\n\n // Render a centered state message\n const renderState = (\n icon: React.ReactNode,\n title: string,\n description?: string,\n ) => (\n <div style={containerStyle}>\n <div\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '24px',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '16px',\n maxWidth: '360px',\n textAlign: 'center',\n }}\n >\n <div>{icon}</div>\n <div>\n <h3\n style={{\n margin: 0,\n marginBottom: '8px',\n color: theme.colors.text,\n fontSize: '16px',\n fontWeight: 600,\n }}\n >\n {title}\n </h3>\n {description && (\n <p\n style={{\n margin: 0,\n color: theme.colors.textSecondary,\n lineHeight: 1.5,\n }}\n >\n {description}\n </p>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n\n // Loading state\n if (isLoading && pullRequests.length === 0) {\n return renderState(\n <Loader2 size={32} style={{ color: theme.colors.textSecondary }} className=\"spin\" />,\n 'Loading pull requests...',\n 'Fetching pull request data for this repository.',\n );\n }\n\n // No repository\n if (!context.currentScope.repository) {\n return renderState(\n <AlertCircle size={32} style={{ color: theme.colors.textSecondary }} />,\n 'No repository selected',\n 'Select a repository to view pull requests.',\n );\n }\n\n // No PR slice available\n if (!hasPRs) {\n return renderState(\n <AlertCircle size={32} style={{ color: theme.colors.warning || '#f59e0b' }} />,\n 'Pull requests unavailable',\n 'Pull request data is not available for this repository.',\n );\n }\n\n return (\n <div style={containerStyle}>\n {/* Header - 40px total including border */}\n <div\n style={{\n height: '40px',\n minHeight: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.textSecondary,\n textTransform: 'uppercase',\n fontWeight: 600,\n fontSize: '12px',\n }}\n >\n <GitPullRequest size={14} />\n Pull Requests\n {owner && repo && (\n <span\n style={{\n fontWeight: 400,\n textTransform: 'none',\n opacity: 0.7,\n }}\n >\n · {owner}/{repo}\n </span>\n )}\n </div>\n\n <button\n type=\"button\"\n onClick={handleRefresh}\n disabled={isLoading}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 10px',\n borderRadius: '4px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n cursor: isLoading ? 'default' : 'pointer',\n fontSize: '12px',\n fontWeight: 500,\n opacity: isLoading ? 0.7 : 1,\n }}\n >\n {isLoading ? (\n <Loader2 size={12} className=\"spin\" />\n ) : (\n <RefreshCcw size={12} />\n )}\n {isLoading ? 'Refreshing...' : 'Refresh'}\n </button>\n </div>\n\n {/* Filter buttons - equal width */}\n <div\n style={{\n display: 'flex',\n borderBottom: `1px solid ${theme.colors.border}`,\n }}\n >\n {(['open', 'closed', 'all'] as const).map((value) => {\n const isActive = filter === value;\n const label = value === 'open' ? 'Open' : value === 'closed' ? 'Closed' : 'All';\n\n return (\n <button\n key={value}\n type=\"button\"\n onClick={() => setFilter(value)}\n style={{\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '8px 12px',\n border: 'none',\n borderBottom: isActive ? `2px solid ${theme.colors.primary}` : '2px solid transparent',\n backgroundColor: 'transparent',\n color: isActive ? theme.colors.text : theme.colors.textSecondary,\n fontSize: '13px',\n fontWeight: isActive ? 600 : 500,\n cursor: 'pointer',\n marginBottom: '-1px',\n }}\n >\n {label}\n <span style={{ opacity: 0.7 }}>({counts[value]})</span>\n </button>\n );\n })}\n </div>\n\n {/* PR List */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n }}\n >\n {filteredPullRequests.length === 0 ? (\n <div\n style={{\n marginTop: '48px',\n textAlign: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n <GitPullRequest size={32} style={{ marginBottom: '12px' }} />\n <div style={{ fontWeight: 600 }}>No pull requests found</div>\n <div style={{ marginTop: '4px', fontSize: '13px' }}>\n There are no {filter !== 'all' ? `${filter} ` : ''}pull requests to display.\n </div>\n </div>\n ) : (\n filteredPullRequests.map((pr) => (\n <PullRequestCard key={pr.id} pr={pr} theme={theme} />\n ))\n )}\n </div>\n </div>\n );\n};\n\n/**\n * Individual pull request card component\n */\nconst PullRequestCard: React.FC<{\n pr: PullRequestInfo;\n theme: ReturnType<typeof useTheme>['theme'];\n}> = ({ pr, theme }) => {\n const isMerged = pr.merged_at !== null;\n const isOpen = pr.state === 'open';\n\n const badgeColor = isOpen\n ? theme.colors.success || '#22c55e'\n : isMerged\n ? theme.colors.primary\n : theme.colors.error || '#ef4444';\n const badgeBg = `${badgeColor}22`;\n\n const totalComments = (pr.comments || 0) + (pr.review_comments || 0);\n\n return (\n <div\n style={{\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '12px',\n padding: '16px',\n backgroundColor: theme.colors.background,\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: '12px',\n }}\n >\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n flex: 1,\n }}\n >\n {/* Status badge and title */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n flexWrap: 'wrap',\n }}\n >\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '4px 10px',\n borderRadius: '999px',\n backgroundColor: badgeBg,\n color: badgeColor,\n fontSize: '12px',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.02em',\n }}\n >\n {isOpen ? 'Open' : isMerged ? 'Merged' : 'Closed'}\n {pr.draft && (\n <span\n style={{\n marginLeft: '6px',\n padding: '2px 6px',\n borderRadius: '8px',\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.textSecondary,\n fontSize: '11px',\n fontWeight: 500,\n textTransform: 'capitalize',\n }}\n >\n Draft\n </span>\n )}\n </span>\n <span\n style={{\n fontSize: '16px',\n fontWeight: 600,\n color: theme.colors.text,\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n #{pr.number} {pr.title}\n </span>\n </div>\n\n {/* Metadata row */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n flexWrap: 'wrap',\n color: theme.colors.textSecondary,\n fontSize: '12px',\n }}\n >\n <span>by {pr.user?.login ?? 'unknown'}</span>\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <Calendar size={12} /> Opened {formatDate(pr.created_at)}\n </span>\n {!isOpen && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {isMerged ? 'Merged' : 'Closed'} {formatDate(pr.merged_at || pr.updated_at)}\n </span>\n )}\n {totalComments > 0 && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n <MessageSquare size={12} /> {totalComments} comment\n {totalComments === 1 ? '' : 's'}\n </span>\n )}\n </div>\n\n {/* Branch info */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.textSecondary,\n fontSize: '12px',\n }}\n >\n <GitBranch size={14} />\n <span>\n {pr.base?.ref ?? 'unknown'}{' '}\n <span style={{ opacity: 0.6 }}>←</span>{' '}\n {pr.head?.ref ?? 'unknown'}\n </span>\n </div>\n\n {/* Body preview */}\n {pr.body && (\n <div\n style={{\n marginTop: '4px',\n color: theme.colors.textSecondary,\n fontSize: '13px',\n lineHeight: 1.5,\n maxHeight: '72px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {pr.body}\n </div>\n )}\n </div>\n\n {/* View button */}\n <a\n href={pr.html_url}\n target=\"_blank\"\n rel=\"noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '6px 10px',\n borderRadius: '6px',\n border: `1px solid ${theme.colors.border}`,\n backgroundColor: theme.colors.backgroundSecondary,\n color: theme.colors.text,\n textDecoration: 'none',\n fontSize: '13px',\n fontWeight: 600,\n whiteSpace: 'nowrap',\n }}\n >\n View\n <ExternalLink size={14} />\n </a>\n </div>\n\n {/* Merged info */}\n {isMerged && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '12px',\n color: theme.colors.primary,\n }}\n >\n <GitMerge size={14} /> Merged into {pr.base?.ref ?? 'base'} from{' '}\n {pr.head?.ref ?? 'head'}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Preview component for panel configuration UI\n */\nexport const GitPullRequestsPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: '12px',\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: '8px',\n }}\n >\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '2px 8px',\n borderRadius: '999px',\n backgroundColor: '#3b82f622',\n color: '#3b82f6',\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase',\n }}\n >\n Review\n </span>\n <span style={{ fontWeight: 600 }}>#42 Refine panel layout system</span>\n </div>\n <div\n style={{\n paddingLeft: '4px',\n color: theme.colors.textSecondary,\n fontSize: '11px',\n lineHeight: 1.4,\n }}\n >\n Adds preview registry and consolidates configurator metadata.\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.textSecondary,\n fontSize: '11px',\n }}\n >\n <span>4 checks</span>\n <span>•</span>\n <span>1 reviewer</span>\n </div>\n </div>\n );\n};\n","/**\n * Panel Tools\n *\n * UTCP-compatible tools for the git panels 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/panel-framework-core';\n\n// ============================================================================\n// Git Commit History Panel Tools\n// ============================================================================\n\n/**\n * Tool: Refresh Commits\n */\nexport const refreshCommitsTool: PanelTool = {\n name: 'refresh_commits',\n description: 'Refreshes the commit history display',\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 message: { type: 'string' },\n },\n },\n tags: ['git', 'commits', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'git-panels.commit-history:refresh',\n },\n};\n\n/**\n * Tool: Set Commit Limit\n */\nexport const setCommitLimitTool: PanelTool = {\n name: 'set_commit_limit',\n description: 'Sets the maximum number of commits to display',\n inputs: {\n type: 'object',\n properties: {\n limit: {\n type: 'number',\n description: 'Maximum number of commits to show (1-100)',\n },\n },\n required: ['limit'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n limit: { type: 'number' },\n },\n },\n tags: ['git', 'commits', 'display'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'git-panels.commit-history:set-limit',\n },\n};\n\n/**\n * All commit history panel tools\n */\nexport const commitHistoryTools: PanelTool[] = [\n refreshCommitsTool,\n setCommitLimitTool,\n];\n\n/**\n * Commit history panel tools metadata\n */\nexport const commitHistoryToolsMetadata: PanelToolsMetadata = {\n id: 'git-panels.commit-history',\n name: 'Git Commit History',\n description: 'Tools for the git commit history panel',\n tools: commitHistoryTools,\n};\n\n// ============================================================================\n// Pull Requests Panel Tools\n// ============================================================================\n\n/**\n * Tool: Refresh Pull Requests\n */\nexport const refreshPullRequestsTool: PanelTool = {\n name: 'refresh_pull_requests',\n description: 'Refreshes the pull requests display',\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 message: { type: 'string' },\n },\n },\n tags: ['git', 'pull-requests', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'git-panels.pull-requests:refresh',\n },\n};\n\n/**\n * Tool: Set PR Filter\n */\nexport const setPRFilterTool: PanelTool = {\n name: 'set_pr_filter',\n description: 'Sets the pull request filter (all, open, or closed)',\n inputs: {\n type: 'object',\n properties: {\n filter: {\n type: 'string',\n enum: ['all', 'open', 'closed'],\n description: 'Filter to apply to pull requests',\n },\n },\n required: ['filter'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filter: { type: 'string' },\n },\n },\n tags: ['git', 'pull-requests', 'filter'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'git-panels.pull-requests:set-filter',\n },\n};\n\n/**\n * All pull requests panel tools\n */\nexport const pullRequestsTools: PanelTool[] = [\n refreshPullRequestsTool,\n setPRFilterTool,\n];\n\n/**\n * Pull requests panel tools metadata\n */\nexport const pullRequestsToolsMetadata: PanelToolsMetadata = {\n id: 'git-panels.pull-requests',\n name: 'Git Pull Requests',\n description: 'Tools for the git pull requests panel',\n tools: pullRequestsTools,\n};\n\n// ============================================================================\n// Combined Exports\n// ============================================================================\n\n/**\n * All tools from this extension\n */\nexport const allGitPanelTools: PanelTool[] = [\n ...commitHistoryTools,\n ...pullRequestsTools,\n];\n","import { GitCommitHistoryPanel } from './panels/GitCommitHistoryPanel';\nimport { GitPullRequestsPanel } from './panels/GitPullRequestsPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport {\n commitHistoryTools,\n commitHistoryToolsMetadata,\n pullRequestsTools,\n pullRequestsToolsMetadata,\n} from './tools';\n\n/**\n * Export array of panel definitions.\n * This is the required export for panel extensions.\n */\nexport const panels: PanelDefinition[] = [\n {\n metadata: {\n id: 'git-panels.commit-history',\n name: 'Git Commit History',\n icon: 'history',\n version: '0.1.0',\n author: 'Principal ADE',\n description: 'View recent commits from the current repository',\n slices: ['commits'],\n tools: commitHistoryTools,\n },\n component: GitCommitHistoryPanel,\n\n onMount: async (context: PanelContextValue) => {\n // Refresh commits data when panel mounts\n if (context.hasSlice('commits') && !context.isSliceLoading('commits')) {\n await context.refresh('repository', 'commits');\n }\n },\n },\n {\n metadata: {\n id: 'git-panels.pull-requests',\n name: 'Git Pull Requests',\n icon: 'git-pull-request',\n version: '0.1.0',\n author: 'Principal ADE',\n description: 'Review open, merged, and closed pull requests',\n slices: ['pullRequests'],\n tools: pullRequestsTools,\n },\n component: GitPullRequestsPanel,\n\n onMount: async (context: PanelContextValue) => {\n // Refresh PR data when panel mounts\n if (context.hasSlice('pullRequests') && !context.isSliceLoading('pullRequests')) {\n await context.refresh('repository', 'pullRequests');\n }\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n */\nexport const onPackageLoad = async () => {\n console.log('[git-panels] Package loaded');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n */\nexport const onPackageUnload = async () => {\n console.log('[git-panels] Package unloading');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@principal-ade/git-panels/tools' to import without React dependencies.\n */\nexport {\n // Commit history tools\n commitHistoryTools,\n commitHistoryToolsMetadata,\n refreshCommitsTool,\n setCommitLimitTool,\n // Pull request tools\n pullRequestsTools,\n pullRequestsToolsMetadata,\n refreshPullRequestsTool,\n setPRFilterTool,\n // All tools\n allGitPanelTools,\n} from './tools';\n\n/**\n * Export types for consumers\n */\nexport type {\n GitCommitInfo,\n CommitsSliceData,\n PullRequestInfo,\n PullRequestsSliceData,\n PullRequestUser,\n PullRequestRef,\n} from './types';\n\n/**\n * Export panel components for direct use\n */\nexport { GitCommitHistoryPanel, GitCommitHistoryPanelPreview } from './panels/GitCommitHistoryPanel';\nexport { GitPullRequestsPanel, GitPullRequestsPanelPreview } from './panels/GitPullRequestsPanel';\n"],"names":["__iconNode","_a","HistoryIcon","Loader2","AlertCircle"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel Tools
|
|
3
|
+
*
|
|
4
|
+
* UTCP-compatible tools for the git panels extension.
|
|
5
|
+
* These tools can be invoked by AI agents and emit events that panels listen for.
|
|
6
|
+
*
|
|
7
|
+
* IMPORTANT: This file should NOT import any React components to ensure
|
|
8
|
+
* it can be imported server-side without pulling in React dependencies.
|
|
9
|
+
* Use the './tools' subpath export for server-safe imports.
|
|
10
|
+
*/
|
|
11
|
+
import type { PanelTool, PanelToolsMetadata } from '@principal-ade/panel-framework-core';
|
|
12
|
+
/**
|
|
13
|
+
* Tool: Refresh Commits
|
|
14
|
+
*/
|
|
15
|
+
export declare const refreshCommitsTool: PanelTool;
|
|
16
|
+
/**
|
|
17
|
+
* Tool: Set Commit Limit
|
|
18
|
+
*/
|
|
19
|
+
export declare const setCommitLimitTool: PanelTool;
|
|
20
|
+
/**
|
|
21
|
+
* All commit history panel tools
|
|
22
|
+
*/
|
|
23
|
+
export declare const commitHistoryTools: PanelTool[];
|
|
24
|
+
/**
|
|
25
|
+
* Commit history panel tools metadata
|
|
26
|
+
*/
|
|
27
|
+
export declare const commitHistoryToolsMetadata: PanelToolsMetadata;
|
|
28
|
+
/**
|
|
29
|
+
* Tool: Refresh Pull Requests
|
|
30
|
+
*/
|
|
31
|
+
export declare const refreshPullRequestsTool: PanelTool;
|
|
32
|
+
/**
|
|
33
|
+
* Tool: Set PR Filter
|
|
34
|
+
*/
|
|
35
|
+
export declare const setPRFilterTool: PanelTool;
|
|
36
|
+
/**
|
|
37
|
+
* All pull requests panel tools
|
|
38
|
+
*/
|
|
39
|
+
export declare const pullRequestsTools: PanelTool[];
|
|
40
|
+
/**
|
|
41
|
+
* Pull requests panel tools metadata
|
|
42
|
+
*/
|
|
43
|
+
export declare const pullRequestsToolsMetadata: PanelToolsMetadata;
|
|
44
|
+
/**
|
|
45
|
+
* All tools from this extension
|
|
46
|
+
*/
|
|
47
|
+
export declare const allGitPanelTools: PanelTool[];
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAMzF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAwBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAyBhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,EAGzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,kBAKxC,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAwBrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,SA0B7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,EAGxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,kBAKvC,CAAC;AAMF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,EAGvC,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// src/tools/index.ts
|
|
2
|
+
var refreshCommitsTool = {
|
|
3
|
+
name: "refresh_commits",
|
|
4
|
+
description: "Refreshes the commit history display",
|
|
5
|
+
inputs: {
|
|
6
|
+
type: "object",
|
|
7
|
+
properties: {
|
|
8
|
+
force: {
|
|
9
|
+
type: "boolean",
|
|
10
|
+
description: "Force refresh even if data is fresh"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
outputs: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
success: { type: "boolean" },
|
|
18
|
+
message: { type: "string" }
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
tags: ["git", "commits", "refresh"],
|
|
22
|
+
tool_call_template: {
|
|
23
|
+
call_template_type: "panel_event",
|
|
24
|
+
event_type: "git-panels.commit-history:refresh"
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var setCommitLimitTool = {
|
|
28
|
+
name: "set_commit_limit",
|
|
29
|
+
description: "Sets the maximum number of commits to display",
|
|
30
|
+
inputs: {
|
|
31
|
+
type: "object",
|
|
32
|
+
properties: {
|
|
33
|
+
limit: {
|
|
34
|
+
type: "number",
|
|
35
|
+
description: "Maximum number of commits to show (1-100)"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
required: ["limit"]
|
|
39
|
+
},
|
|
40
|
+
outputs: {
|
|
41
|
+
type: "object",
|
|
42
|
+
properties: {
|
|
43
|
+
success: { type: "boolean" },
|
|
44
|
+
limit: { type: "number" }
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
tags: ["git", "commits", "display"],
|
|
48
|
+
tool_call_template: {
|
|
49
|
+
call_template_type: "panel_event",
|
|
50
|
+
event_type: "git-panels.commit-history:set-limit"
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
var commitHistoryTools = [
|
|
54
|
+
refreshCommitsTool,
|
|
55
|
+
setCommitLimitTool
|
|
56
|
+
];
|
|
57
|
+
var commitHistoryToolsMetadata = {
|
|
58
|
+
id: "git-panels.commit-history",
|
|
59
|
+
name: "Git Commit History",
|
|
60
|
+
description: "Tools for the git commit history panel",
|
|
61
|
+
tools: commitHistoryTools
|
|
62
|
+
};
|
|
63
|
+
var refreshPullRequestsTool = {
|
|
64
|
+
name: "refresh_pull_requests",
|
|
65
|
+
description: "Refreshes the pull requests display",
|
|
66
|
+
inputs: {
|
|
67
|
+
type: "object",
|
|
68
|
+
properties: {
|
|
69
|
+
force: {
|
|
70
|
+
type: "boolean",
|
|
71
|
+
description: "Force refresh even if data is fresh"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
outputs: {
|
|
76
|
+
type: "object",
|
|
77
|
+
properties: {
|
|
78
|
+
success: { type: "boolean" },
|
|
79
|
+
message: { type: "string" }
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
tags: ["git", "pull-requests", "refresh"],
|
|
83
|
+
tool_call_template: {
|
|
84
|
+
call_template_type: "panel_event",
|
|
85
|
+
event_type: "git-panels.pull-requests:refresh"
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
var setPRFilterTool = {
|
|
89
|
+
name: "set_pr_filter",
|
|
90
|
+
description: "Sets the pull request filter (all, open, or closed)",
|
|
91
|
+
inputs: {
|
|
92
|
+
type: "object",
|
|
93
|
+
properties: {
|
|
94
|
+
filter: {
|
|
95
|
+
type: "string",
|
|
96
|
+
enum: ["all", "open", "closed"],
|
|
97
|
+
description: "Filter to apply to pull requests"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
required: ["filter"]
|
|
101
|
+
},
|
|
102
|
+
outputs: {
|
|
103
|
+
type: "object",
|
|
104
|
+
properties: {
|
|
105
|
+
success: { type: "boolean" },
|
|
106
|
+
filter: { type: "string" }
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
tags: ["git", "pull-requests", "filter"],
|
|
110
|
+
tool_call_template: {
|
|
111
|
+
call_template_type: "panel_event",
|
|
112
|
+
event_type: "git-panels.pull-requests:set-filter"
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
var pullRequestsTools = [
|
|
116
|
+
refreshPullRequestsTool,
|
|
117
|
+
setPRFilterTool
|
|
118
|
+
];
|
|
119
|
+
var pullRequestsToolsMetadata = {
|
|
120
|
+
id: "git-panels.pull-requests",
|
|
121
|
+
name: "Git Pull Requests",
|
|
122
|
+
description: "Tools for the git pull requests panel",
|
|
123
|
+
tools: pullRequestsTools
|
|
124
|
+
};
|
|
125
|
+
var allGitPanelTools = [
|
|
126
|
+
...commitHistoryTools,
|
|
127
|
+
...pullRequestsTools
|
|
128
|
+
];
|
|
129
|
+
export {
|
|
130
|
+
setPRFilterTool,
|
|
131
|
+
setCommitLimitTool,
|
|
132
|
+
refreshPullRequestsTool,
|
|
133
|
+
refreshCommitsTool,
|
|
134
|
+
pullRequestsToolsMetadata,
|
|
135
|
+
pullRequestsTools,
|
|
136
|
+
commitHistoryToolsMetadata,
|
|
137
|
+
commitHistoryTools,
|
|
138
|
+
allGitPanelTools
|
|
139
|
+
};
|