@industry-theme/file-editing-panels 0.3.8 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MDXEditorPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/MDXEditorPanel/MDXEditorPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MDXEditorPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/MDXEditorPanel/MDXEditorPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AA6BzE,OAAO,oCAAoC,CAAC;AAI5C,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA+WD;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAExD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAsCzC,CAAC"}
|
package/dist/panels.bundle.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
14
14
|
import { createContext, useContext, forwardRef, createElement, useState, useRef, useEffect, useCallback, useMemo } from "react";
|
|
15
15
|
import { ThemedMonacoWithProvider, ThemedMonacoDiffEditor } from "@principal-ade/industry-themed-monaco-editor";
|
|
16
|
-
import { headingsPlugin, listsPlugin, quotePlugin, thematicBreakPlugin, markdownShortcutPlugin, linkPlugin, linkDialogPlugin, imagePlugin, tablePlugin, codeBlockPlugin, codeMirrorPlugin, frontmatterPlugin, diffSourcePlugin, toolbarPlugin, DiffSourceToggleWrapper, UndoRedo, BlockTypeSelect, BoldItalicUnderlineToggles, CodeToggle, CreateLink, InsertImage, InsertTable, InsertThematicBreak, ListsToggle, MDXEditor } from "@principal-ai/mdx-editor";
|
|
16
|
+
import { headingsPlugin, listsPlugin, quotePlugin, thematicBreakPlugin, markdownShortcutPlugin, linkPlugin, linkDialogPlugin, imagePlugin, tablePlugin, codeBlockPlugin, codeMirrorPlugin, frontmatterPlugin, diffSourcePlugin, toolbarPlugin, DiffSourceToggleWrapper, UndoRedo, BlockTypeSelect, BoldItalicUnderlineToggles, CodeToggle, CreateLink, InsertImage, InsertTable, InsertThematicBreak, ListsToggle, themeToCSSVariables, MDXEditor } from "@principal-ai/mdx-editor";
|
|
17
17
|
var ThemeContext;
|
|
18
18
|
var getThemeContext = () => {
|
|
19
19
|
if (typeof window !== "undefined") {
|
|
@@ -1363,26 +1363,25 @@ const MDXEditorPanelContent = ({
|
|
|
1363
1363
|
);
|
|
1364
1364
|
}
|
|
1365
1365
|
const safeMarkdown = typeof markdown === "string" ? markdown : String(markdown || "");
|
|
1366
|
-
const
|
|
1367
|
-
|
|
1366
|
+
const themeVariables = themeToCSSVariables(theme);
|
|
1367
|
+
const editorWrapperStyle = {
|
|
1368
|
+
height: "100%",
|
|
1369
|
+
width: "100%",
|
|
1370
|
+
...Object.fromEntries(
|
|
1371
|
+
Object.entries(themeVariables).map(([key, value]) => [key, value])
|
|
1372
|
+
)
|
|
1373
|
+
};
|
|
1374
|
+
const editorContent = /* @__PURE__ */ jsx("div", { style: editorWrapperStyle, children: /* @__PURE__ */ jsx(
|
|
1375
|
+
MDXEditor,
|
|
1368
1376
|
{
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
onChange: handleChange,
|
|
1378
|
-
readOnly: !isEditable,
|
|
1379
|
-
contentEditableClassName: "prose",
|
|
1380
|
-
plugins
|
|
1381
|
-
},
|
|
1382
|
-
filePath || "default"
|
|
1383
|
-
)
|
|
1384
|
-
}
|
|
1385
|
-
);
|
|
1377
|
+
markdown: safeMarkdown,
|
|
1378
|
+
onChange: handleChange,
|
|
1379
|
+
readOnly: !isEditable,
|
|
1380
|
+
contentEditableClassName: "prose",
|
|
1381
|
+
plugins
|
|
1382
|
+
},
|
|
1383
|
+
filePath || "default"
|
|
1384
|
+
) });
|
|
1386
1385
|
if (parseError) {
|
|
1387
1386
|
return /* @__PURE__ */ jsxs(
|
|
1388
1387
|
"div",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/panels/FileEditorPanel/FileEditorPanel.tsx","../src/panels/GitDiffPanel/GitDiffPanel.tsx","../src/panels/MDXEditorPanel/MDXEditorPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 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 * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n];\nconst GitCommitHorizontal = createLucideIcon(\"git-commit-horizontal\", __iconNode);\n\nexport { __iconNode, GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoWithProvider } from '@principal-ade/industry-themed-monaco-editor';\nimport { FileText, X } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * User preferences slice shape\n */\ninterface UserPreferences {\n vimMode?: boolean;\n // other preferences...\n}\n\n/**\n * Extended props for FileEditorPanel with optional prop-controlled mode\n */\nexport interface FileEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\nconst getLanguage = (path: string): string => {\n const ext = path.split('.').pop()?.toLowerCase() || '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n kt: 'kotlin',\n swift: 'swift',\n json: 'json',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sql: 'sql',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n md: 'markdown',\n mdx: 'markdown',\n };\n return languageMap[ext] || 'plaintext';\n};\n\n/**\n * FileEditorPanelContent - Internal component that uses theme\n */\nconst FileEditorPanelContent: React.FC<FileEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [fileContent, setFileContent] = useState<string>('');\n const [editorContent, setEditorContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n const latestFilePathRef = useRef<string | null>(null);\n const isSavingRef = useRef(false);\n const isDirtyRef = useRef(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Get user preferences (vim mode, etc.)\n const preferencesSlice = context.getSlice<UserPreferences>('preferences');\n const vimMode = preferencesSlice?.data?.vimMode ?? false;\n\n useEffect(() => {\n isDirtyRef.current = isDirty;\n }, [isDirty]);\n\n useEffect(() => {\n isDirtyRef.current = false;\n setIsDirty(false);\n setIsSaving(false);\n isSavingRef.current = false;\n setSaveError(null);\n }, [filePath]);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[FileEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp && activeFileSlice?.data?.path) {\n setFilePath(activeFileSlice.data.path);\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n setFilePath(payload.path);\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n const loadFile = useCallback(async () => {\n if (!filePath || !fileSystem?.readFile) {\n latestFilePathRef.current = null;\n setFileContent('');\n setEditorContent('');\n setIsDirty(false);\n setIsSaving(false);\n setSaveError(null);\n return;\n }\n\n latestFilePathRef.current = filePath;\n setIsLoading(true);\n setError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (latestFilePathRef.current !== filePath) {\n return;\n }\n\n if (content !== null) {\n setFileContent(content);\n setSaveError(null);\n if (!isDirtyRef.current) {\n setEditorContent(content);\n setIsDirty(false);\n }\n } else {\n throw new Error('Failed to read file');\n }\n } catch (err) {\n console.error('Error loading file:', err);\n if (latestFilePathRef.current === filePath) {\n setError(err instanceof Error ? err.message : 'Failed to load file');\n setFileContent('');\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsLoading(false);\n }\n }\n }, [filePath, fileSystem]);\n\n useEffect(() => {\n loadFile();\n }, [loadFile]);\n\n const handleEditorChange = useCallback(\n (value?: string) => {\n const nextValue = value ?? '';\n setEditorContent(nextValue);\n setIsDirty(nextValue !== fileContent);\n if (saveError) {\n setSaveError(null);\n }\n },\n [fileContent, saveError]\n );\n\n const handleEditorSave = useCallback(\n async (value?: string) => {\n if (!filePath || !fileSystem?.writeFile) {\n return;\n }\n\n const contentToSave = value ?? editorContent;\n\n if (!isDirty && contentToSave === fileContent) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setSaveError(null);\n\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n\n if (latestFilePathRef.current === filePath) {\n setFileContent(contentToSave);\n setEditorContent(contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n }\n } catch (err) {\n if (latestFilePathRef.current === filePath) {\n setSaveError(\n err instanceof Error ? err.message : 'Failed to save file'\n );\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsSaving(false);\n }\n isSavingRef.current = false;\n }\n },\n [editorContent, fileContent, filePath, isDirty, fileSystem, events]\n );\n\n const handleClose = useCallback(() => {\n events.emit({\n type: 'file:close',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n }, [events, filePath]);\n\n const fileName = filePath?.split('/').pop() || filePath || '';\n const language = filePath ? getLanguage(filePath) : 'plaintext';\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n color: theme.colors.textSecondary,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <div\n style={{\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n marginBottom: '12px',\n color: theme.colors.text,\n }}\n >\n File Editor\n </div>\n <div style={{ fontSize: theme.fontSizes[1] }}>\n Select a file to view or edit\n </div>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n {/* Header */}\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <FileText\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {fileName}\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n {isEditable && (\n <>\n {saveError ? (\n <span\n style={{\n color: theme.colors.error,\n fontSize: theme.fontSizes[0],\n }}\n >\n Save failed: {saveError}\n </span>\n ) : isSaving ? (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saving...\n </span>\n ) : isDirty ? (\n <span\n style={{\n color: theme.colors.primary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Unsaved changes\n </span>\n ) : (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saved\n </span>\n )}\n <button\n onClick={() => void handleEditorSave()}\n disabled={!isDirty || isSaving}\n style={{\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n border: 'none',\n borderRadius: '4px',\n padding: '6px 10px',\n fontSize: theme.fontSizes[0],\n cursor: !isDirty || isSaving ? 'not-allowed' : 'pointer',\n opacity: !isDirty || isSaving ? 0.6 : 1,\n transition: 'opacity 0.2s ease',\n }}\n >\n Save\n </button>\n </>\n )}\n {filePath && showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundSecondary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n Error: {error}\n </div>\n ) : (\n <ThemedMonacoWithProvider\n value={editorContent}\n language={language}\n vimMode={isEditable ? vimMode : false}\n options={{\n readOnly: !isEditable,\n minimap: { enabled: false },\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n fontSize: theme.fontSizes[2],\n automaticLayout: true,\n folding: true,\n renderWhitespace: 'selection',\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n useShadows: false,\n verticalScrollbarSize: 10,\n horizontalScrollbarSize: 10,\n },\n }}\n height=\"100%\"\n onChange={isEditable ? handleEditorChange : undefined}\n onSave={isEditable ? handleEditorSave : undefined}\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * FileEditorPanel - Monaco-based code editor with vim mode support.\n *\n * This panel provides:\n * - Syntax highlighting for many languages\n * - File editing with save support\n * - Dirty state tracking\n * - Integration with panel framework events\n */\nexport const FileEditorPanel: React.FC<FileEditorPanelProps> = (props) => {\n return <FileEditorPanelContent {...props} />;\n};\n\nexport const FileEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div>\n <span style={{ color: '#c678dd' }}>export</span>{' '}\n <span style={{ color: '#61afef' }}>function</span>{' '}\n <span style={{ color: '#e5c07b' }}>hello</span>() {'{'}\n </div>\n <div style={{ paddingLeft: '12px' }}>\n console.<span style={{ color: '#61afef' }}>log</span>(\n <span style={{ color: '#98c379' }}>'Hello'</span>);\n </div>\n <div>{'}'}</div>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoDiffEditor } from '@principal-ade/industry-themed-monaco-editor';\nimport { GitCommit, X } from 'lucide-react';\n\nimport type { PanelComponentProps, GitChangeStatus } from '../../types';\n\nconst statusMeta: Record<\n GitChangeStatus,\n { label: string; description: string }\n> = {\n staged: {\n label: 'Staged change',\n description: 'Comparing staged changes against the last commit',\n },\n unstaged: {\n label: 'Unstaged change',\n description: 'Comparing working tree changes against the last commit',\n },\n untracked: {\n label: 'Untracked file',\n description: 'New file compared against an empty baseline',\n },\n deleted: {\n label: 'Deleted file',\n description: 'Showing the last committed contents of the deleted file',\n },\n};\n\nconst languageFromPath = (filePath: string | null): string => {\n if (!filePath) {\n return 'plaintext';\n }\n\n const ext = filePath.split('.').pop()?.toLowerCase() ?? '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n go: 'go',\n rs: 'rust',\n php: 'php',\n rb: 'ruby',\n swift: 'swift',\n kt: 'kotlin',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n };\n\n return languageMap[ext] ?? 'plaintext';\n};\n\ninterface GitDiffPayload {\n path: string;\n status?: GitChangeStatus;\n original?: string;\n modified?: string;\n}\n\n/**\n * Extended props for GitDiffPanel with optional prop-controlled mode\n */\nexport interface GitDiffPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display diff for.\n * If provided, this takes precedence over event-based selection.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Optional git status for the file.\n * Used together with filePath in prop-controlled mode.\n */\n gitStatus?: GitChangeStatus;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * GitDiffPanelContent - Internal component that uses theme\n */\nconst GitDiffPanelContent: React.FC<GitDiffPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n gitStatus: gitStatusProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [status, setStatus] = useState<GitChangeStatus>('unstaged');\n const [originalContent, setOriginalContent] = useState<string>('');\n const [modifiedContent, setModifiedContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const language = useMemo(() => languageFromPath(filePath), [filePath]);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[GitDiffPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n setStatus(gitStatusProp || 'unstaged');\n }\n }, [filePathProp, gitStatusProp]);\n\n // Listen for git:diff events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('git:diff', (event) => {\n const payload = event.payload as GitDiffPayload;\n if (payload?.path) {\n setFilePath(payload.path);\n setStatus(payload.status || 'unstaged');\n // If content is provided directly, use it\n if (payload.original !== undefined || payload.modified !== undefined) {\n setOriginalContent(payload.original ?? '');\n setModifiedContent(payload.modified ?? '');\n setIsLoading(false);\n setError(null);\n }\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n // Load diff content when file path changes\n useEffect(() => {\n let isActive = true;\n\n const loadDiff = async () => {\n if (!filePath) {\n setOriginalContent('');\n setModifiedContent('');\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // If we don't have a file system adapter, we can't load content\n if (!fileSystem?.readFile) {\n // Content should be provided via events\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // For now, read the current file content as \"modified\"\n // The \"original\" would need to come from git or be provided via events\n const modified = await fileSystem.readFile(filePath);\n\n if (!isActive) return;\n\n setModifiedContent(modified ?? '');\n // Original content should be provided via git:diff event payload\n // or we leave it empty for new files\n if (status === 'untracked') {\n setOriginalContent('');\n }\n } catch (err) {\n if (!isActive) return;\n\n console.error('Failed to load git diff:', err);\n setError(\n err instanceof Error\n ? `Failed to load diff: ${err.message}`\n : 'Failed to load diff'\n );\n setOriginalContent('');\n setModifiedContent('');\n } finally {\n if (isActive) {\n setIsLoading(false);\n }\n }\n };\n\n void loadDiff();\n\n return () => {\n isActive = false;\n };\n }, [filePath, status, fileSystem]);\n\n const handleClose = () => {\n events.emit({\n type: 'git:diff:close',\n source: 'industry-theme.git-diff',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n };\n\n const statusInfo = status ? statusMeta[status] : null;\n const statusColor = useMemo(() => {\n if (!status) return theme.colors.textSecondary;\n\n switch (status) {\n case 'staged':\n return theme.colors.success || '#10b981';\n case 'unstaged':\n return theme.colors.warning || '#f59e0b';\n case 'untracked':\n return theme.colors.info || theme.colors.primary || '#3b82f6';\n case 'deleted':\n return theme.colors.error || '#ef4444';\n default:\n return theme.colors.textSecondary;\n }\n }, [status, theme.colors]);\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a file from Git Changes to view its diff.\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <GitCommit\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {filePath?.split('/').pop() || filePath}\n </div>\n {statusInfo && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n fontSize: theme.fontSizes[0],\n padding: '2px 8px',\n borderRadius: '999px',\n backgroundColor: `${statusColor}20`,\n color: statusColor,\n border: `1px solid ${statusColor}60`,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n {statusInfo.label}\n </span>\n )}\n </div>\n {showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading diff...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </div>\n ) : (\n <ThemedMonacoDiffEditor\n theme={theme}\n original={originalContent}\n modified={modifiedContent}\n language={language}\n height=\"100%\"\n options={{\n renderSideBySide: true,\n readOnly: true,\n minimap: { enabled: false },\n automaticLayout: true,\n renderIndicators: true,\n renderMarginRevertIcon: true,\n ignoreTrimWhitespace: false,\n diffAlgorithm: 'advanced',\n scrollbar: {\n useShadows: false,\n vertical: 'auto',\n horizontal: 'auto',\n },\n }}\n loadingComponent={\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Preparing diff editor...\n </div>\n }\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * GitDiffPanel - Side-by-side git diff viewer.\n *\n * This panel shows:\n * - Side-by-side comparison of original vs modified content\n * - Status indicators for staged/unstaged/untracked/deleted files\n * - Syntax highlighting based on file type\n */\nexport const GitDiffPanel: React.FC<GitDiffPanelProps> = (props) => {\n return <GitDiffPanelContent {...props} />;\n};\n\nexport const GitDiffPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '8px',\n }}\n >\n <span style={{ color: theme.colors.textSecondary }}>@@ 12,5 @@</span>\n </div>\n <div style={{ color: '#ef4444' }}>- const count = oldValue;</div>\n <div style={{ color: '#22c55e' }}>+ const count = newValue;</div>\n <div style={{ color: theme.colors.textSecondary }}> return count;</div>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport {\n headingsPlugin,\n listsPlugin,\n quotePlugin,\n thematicBreakPlugin,\n markdownShortcutPlugin,\n linkPlugin,\n linkDialogPlugin,\n imagePlugin,\n tablePlugin,\n codeBlockPlugin,\n codeMirrorPlugin,\n diffSourcePlugin,\n frontmatterPlugin,\n toolbarPlugin,\n UndoRedo,\n BoldItalicUnderlineToggles,\n CodeToggle,\n CreateLink,\n InsertImage,\n InsertTable,\n InsertThematicBreak,\n ListsToggle,\n BlockTypeSelect,\n DiffSourceToggleWrapper,\n MDXEditor,\n} from '@principal-ai/mdx-editor';\nimport '@principal-ai/mdx-editor/style.css';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FileText } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * Extended props for MDXEditorPanel with optional prop-controlled mode\n */\nexport interface MDXEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * MDXEditorPanelContent - Internal component that uses theme\n */\nconst MDXEditorPanelContent: React.FC<MDXEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [markdown, setMarkdown] = useState('');\n const [isMounted, setIsMounted] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [parseError, setParseError] = useState<string | null>(null);\n const [_isDirty, setIsDirty] = useState<boolean>(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Memoize plugins array for performance\n const plugins = useMemo(\n () => [\n headingsPlugin(),\n listsPlugin(),\n quotePlugin(),\n thematicBreakPlugin(),\n markdownShortcutPlugin(),\n linkPlugin(),\n linkDialogPlugin(),\n imagePlugin({\n imageUploadHandler: async (file) => {\n console.warn('Image upload not configured:', file.name);\n return '/placeholder-image.png';\n },\n }),\n tablePlugin(),\n codeBlockPlugin({ defaultCodeBlockLanguage: 'javascript' }),\n codeMirrorPlugin({\n codeBlockLanguages: {\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n tsx: 'TypeScript (JSX)',\n jsx: 'JavaScript (JSX)',\n python: 'Python',\n java: 'Java',\n go: 'Go',\n rust: 'Rust',\n cpp: 'C++',\n c: 'C',\n css: 'CSS',\n html: 'HTML',\n json: 'JSON',\n yaml: 'YAML',\n markdown: 'Markdown',\n bash: 'Bash',\n shell: 'Shell',\n sql: 'SQL',\n },\n }),\n frontmatterPlugin(),\n diffSourcePlugin({\n viewMode: parseError ? 'source' : 'rich-text',\n }),\n toolbarPlugin({\n toolbarContents: () => (\n <>\n <DiffSourceToggleWrapper>\n <UndoRedo />\n <BlockTypeSelect />\n <BoldItalicUnderlineToggles />\n <CodeToggle />\n <CreateLink />\n <InsertImage />\n <InsertTable />\n <InsertThematicBreak />\n <ListsToggle />\n </DiffSourceToggleWrapper>\n </>\n ),\n }),\n ],\n [parseError]\n );\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[MDXEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only for markdown files, only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp) {\n const path = activeFileSlice?.data?.path;\n if (path && (path.endsWith('.md') || path.endsWith('.mdx'))) {\n setFilePath(path);\n }\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only handle markdown files, only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n const path = payload.path;\n if (path.endsWith('.md') || path.endsWith('.mdx')) {\n setFilePath(path);\n }\n }\n });\n return unsubscribe;\n }, [filePathProp, events]);\n\n const handleChange = useCallback((value: string) => {\n setMarkdown(value);\n setIsDirty(true);\n setParseError(null);\n }, []);\n\n const handleSave = useCallback(\n async (content?: string) => {\n const contentToSave = content || markdown;\n\n if (filePath && fileSystem?.writeFile) {\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.mdx-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n } catch (error) {\n console.error('Error saving file:', error);\n }\n }\n },\n [markdown, filePath, fileSystem, events]\n );\n\n // Load file content when filePath changes\n useEffect(() => {\n const loadFileContent = async () => {\n if (!filePath || !fileSystem?.readFile) {\n setMarkdown('');\n return;\n }\n\n setIsLoading(true);\n setLoadError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (content !== null) {\n setMarkdown(content);\n setParseError(null);\n setIsDirty(false);\n } else {\n throw new Error('Failed to read file');\n }\n } catch (error) {\n console.error('Error loading file:', error);\n setLoadError(`Failed to load file: ${filePath}`);\n setMarkdown('');\n setParseError(null);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadFileContent();\n }, [filePath, fileSystem]);\n\n // Handle keyboard shortcuts for save\n useEffect(() => {\n if (!isEditable) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault();\n handleSave();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isEditable, handleSave]);\n\n if (!isMounted) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading editor...\n </div>\n );\n }\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n );\n }\n\n if (loadError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <div style={{ marginBottom: '10px' }}>Warning</div>\n <div>{loadError}</div>\n </div>\n );\n }\n\n if (!filePath) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textSecondary,\n padding: '40px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n color: theme.colors.text,\n }}\n >\n No File Selected\n </h3>\n <p\n style={{\n margin: 0,\n fontSize: theme.fontSizes[2],\n maxWidth: '400px',\n }}\n >\n Select a markdown file (.md or .mdx) to start editing\n </p>\n </div>\n );\n }\n\n const safeMarkdown =\n typeof markdown === 'string' ? markdown : String(markdown || '');\n\n const editorContent = (\n <div\n style={{\n height: '100%',\n width: '100%',\n }}\n >\n <MDXEditor\n key={filePath || 'default'}\n markdown={safeMarkdown}\n onChange={handleChange}\n readOnly={!isEditable}\n contentEditableClassName=\"prose\"\n plugins={plugins}\n />\n </div>\n );\n\n if (parseError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n backgroundColor: theme.colors.warning || '#f59e0b',\n color: theme.colors.background,\n fontSize: theme.fontSizes[2],\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span>Warning</span>\n <span>\n {parseError} - Switch to source mode using the toolbar button to\n edit the raw markdown.\n </span>\n </div>\n <div style={{ flex: 1 }}>{editorContent}</div>\n </div>\n );\n }\n\n return editorContent;\n};\n\n/**\n * MDXEditorPanel - Rich markdown/MDX editor.\n *\n * This panel provides:\n * - WYSIWYG markdown editing\n * - Code block support with syntax highlighting\n * - Image and table insertion\n * - Source mode for raw markdown editing\n */\nexport const MDXEditorPanel: React.FC<MDXEditorPanelProps> = (props) => {\n return <MDXEditorPanelContent {...props} />;\n};\n\nexport const MDXEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n padding: '20px',\n }}\n >\n <FileText size={32} style={{ marginBottom: '12px', opacity: 0.6 }} />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: '4px',\n }}\n >\n MDX Editor\n </div>\n <div\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n textAlign: 'center',\n }}\n >\n Rich markdown editor with live preview\n </div>\n </div>\n );\n};\n","/**\n * Panel Tools\n *\n * UTCP-compatible tools for file editing panels.\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 {\n PanelTool,\n PanelToolsMetadata,\n} from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Open File in Editor\n */\nexport const openFileTool: PanelTool = {\n name: 'open_file',\n description: 'Opens a file in the file editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['file', 'editor', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-file',\n },\n};\n\n/**\n * Tool: View Git Diff\n */\nexport const viewDiffTool: PanelTool = {\n name: 'view_diff',\n description: 'Opens a file in the git diff panel to view changes',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to diff',\n },\n status: {\n type: 'string',\n enum: ['staged', 'unstaged', 'untracked', 'deleted'],\n description: 'The git status of the file',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['git', 'diff', 'view'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:view-diff',\n },\n};\n\n/**\n * Tool: Open Markdown Editor\n */\nexport const openMarkdownTool: PanelTool = {\n name: 'open_markdown',\n description: 'Opens a markdown file in the MDX editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the markdown file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['markdown', 'mdx', 'editor'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-markdown',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const fileEditingPanelTools: PanelTool[] = [\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const fileEditingPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.file-editing-panels',\n name: 'File Editing Panels',\n description: 'Tools for file editing, git diff viewing, and markdown editing',\n tools: fileEditingPanelTools,\n};\n","/**\n * @industry-theme/file-editing-panels\n *\n * Git diff view and editor panels for dev workspaces.\n * These panels use the panel framework pattern with PanelComponentProps.\n */\n\nimport { FileEditorPanel } from './panels/FileEditorPanel';\nimport { GitDiffPanel } from './panels/GitDiffPanel';\nimport { MDXEditorPanel } from './panels/MDXEditorPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { fileEditingPanelTools, fileEditingPanelToolsMetadata } 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: 'industry-theme.file-editor',\n name: 'File Editor',\n icon: '📝',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Monaco-based code editor with syntax highlighting',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[0]], // openFileTool\n },\n component: FileEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'File Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('File Editor Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.git-diff',\n name: 'Git Diff',\n icon: '🔀',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Side-by-side git diff viewer',\n slices: ['git', 'fileTree'],\n tools: [fileEditingPanelTools[1]], // viewDiffTool\n },\n component: GitDiffPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'Git Diff Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Diff Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.mdx-editor',\n name: 'MDX Editor',\n icon: '📄',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Rich markdown/MDX editor with live preview',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[2]], // openMarkdownTool\n },\n component: MDXEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'MDX Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('MDX Editor Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - File Editing Panels');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - File Editing Panels');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/file-editing-panels/tools' to import without React dependencies.\n */\nexport {\n fileEditingPanelTools,\n fileEditingPanelToolsMetadata,\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n} from './tools';\n\n// Re-export panel components for direct usage\nexport { FileEditorPanel, FileEditorPanelPreview } from './panels/FileEditorPanel';\nexport { GitDiffPanel, GitDiffPanelPreview } from './panels/GitDiffPanel';\nexport { MDXEditorPanel, MDXEditorPanelPreview } from './panels/MDXEditorPanel';\n\n// Re-export types\nexport type { GitChangeStatus } from './types';\n\n// Re-export framework types for convenience\nexport type {\n PanelDefinition,\n PanelContextValue,\n PanelMetadata,\n PanelComponentProps,\n} from './types';\n"],"names":["__iconNode","_a","GitCommit"],"mappings":";;;;AAk2CA,IAAI;AACJ,IAAI,kBAAkB,MAAM;AAC1B,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,eAAe;AACrB,QAAI,CAAC,aAAa,+BAA+B;AAC/C,mBAAa,gCAAgC,cAAc,MAAS;AAAA,IACtE;AACA,WAAO,aAAa;AAAA,EACtB,OAAO;AACL,QAAI,CAAC,cAAc;AACjB,qBAAe,cAAc,MAAS;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF;AACA,IAAI,wBAAwB,gBAAe;AAC3C,IAAI,WAAW,MAAM;AACnB,QAAM,UAAU,WAAW,qBAAqB;AAChD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AACT;ACx3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,MAAM,cAAc,CAAC,WAAW,OAAO,QAAQ,sBAAsB,OAAO,EAAE,YAAW;AACzF,MAAM,cAAc,CAAC,WAAW,OAAO;AAAA,EACrC;AAAA,EACA,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,YAAW,IAAK,GAAG,YAAW;AAC3D;AACA,MAAM,eAAe,CAAC,WAAW;AAC/B,QAAM,YAAY,YAAY,MAAM;AACpC,SAAO,UAAU,OAAO,CAAC,EAAE,YAAW,IAAK,UAAU,MAAM,CAAC;AAC9D;AACA,MAAM,eAAe,IAAI,YAAY,QAAQ,OAAO,CAAC,WAAW,OAAO,UAAU;AAC/E,SAAO,QAAQ,SAAS,KAAK,UAAU,KAAI,MAAO,MAAM,MAAM,QAAQ,SAAS,MAAM;AACvF,CAAC,EAAE,KAAK,GAAG,EAAE,KAAI;AACjB,MAAM,cAAc,CAAC,UAAU;AAC7B,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,OAAO,KAAK,SAAS,UAAU,SAAS,SAAS;AACnE,aAAO;AAAA,IACT;AAAA,EACF;AACF;ACzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,IAAI,oBAAoB;AAAA,EACtB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAClB;ACjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,OAAO;AAAA,EACX,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,IACd;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,GAAK,QAAQ;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,MACA,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,aAAa,sBAAsB,OAAO,WAAW,IAAI,KAAK,OAAO,IAAI,IAAI;AAAA,MAC7E,WAAW,aAAa,UAAU,SAAS;AAAA,MAC3C,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,KAAK,EAAE,eAAe,OAAM;AAAA,MAC7D,GAAG;AAAA,IACT;AAAA,IACI;AAAA,MACE,GAAG,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,cAAc,KAAK,KAAK,CAAC;AAAA,MAC3D,GAAG,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAAA,IACvD;AAAA,EACA;AACA;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,mBAAmB,CAAC,UAAU,aAAa;AAC/C,QAAM,YAAY;AAAA,IAChB,CAAC,EAAE,WAAW,GAAG,MAAK,GAAI,QAAQ,cAAc,MAAM;AAAA,MACpD;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,UAAU,YAAY,aAAa,QAAQ,CAAC,CAAC;AAAA,QAC7C,UAAU,QAAQ;AAAA,QAClB;AAAA,MACR;AAAA,MACM,GAAG;AAAA,IACT,CAAK;AAAA,EACL;AACE,YAAU,cAAc,aAAa,QAAQ;AAC7C,SAAO;AACT;AC1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,eAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,2BAA2B,KAAK,SAAQ,CAAE;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C;AACA,MAAM,WAAW,iBAAiB,aAAaA,YAAU;ACtBzD;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,eAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AAAA,EAChE,CAAC,QAAQ,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AACpE;AACA,MAAM,sBAAsB,iBAAiB,yBAAyBA,YAAU;ACdhF;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAM,aAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAAA,EAC3C,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C;AACA,MAAM,IAAI,iBAAiB,KAAK,UAAU;ACoB1C,MAAM,cAAc,CAAC,SAAyB;;AAC5C,QAAM,QAAM,UAAK,MAAM,GAAG,EAAE,IAAA,MAAhB,mBAAuB,kBAAiB;AACpD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,KAAK;AAAA,EAAA;AAEP,SAAO,YAAY,GAAG,KAAK;AAC7B;AAKA,MAAM,yBAAyD,CAAC;AAAA,EAC9D;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,aAAa,cAAc,IAAI,SAAiB,EAAE;AACzD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiB,EAAE;AAC7D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,oBAAoB,OAAsB,IAAI;AACpD,QAAM,cAAc,OAAO,KAAK;AAChC,QAAM,aAAa,OAAO,KAAK;AAG/B,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AACrC,QAAM,aAAa,QAAQ,yCAAY,SAAS;AAGhD,QAAM,kBAAkB,QAAQ,SAA0B,aAAa;AAGvE,QAAM,mBAAmB,QAAQ,SAA0B,aAAa;AACxE,QAAM,YAAU,0DAAkB,SAAlB,mBAAwB,YAAW;AAEnD,YAAU,MAAM;AACd,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,OAAO,CAAC;AAEZ,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,eAAW,KAAK;AAChB,gBAAY,KAAK;AACjB,gBAAY,UAAU;AACtB,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAC,QAAQ,CAAC;AAGb,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,sDAAsD,YAAY;AAC9E,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,YAAU,MAAM;;AACd,QAAI,CAAC,kBAAgBC,MAAA,mDAAiB,SAAjB,gBAAAA,IAAuB,OAAM;AAChD,kBAAY,gBAAgB,KAAK,IAAI;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,eAAc,wDAAiB,SAAjB,mBAAuB,IAAI,CAAC;AAG9C,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,aAAa,CAAC,UAAU;AACpD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,oBAAY,QAAQ,IAAI;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,QAAM,WAAW,YAAY,YAAY;AACvC,QAAI,CAAC,YAAY,EAAC,yCAAY,WAAU;AACtC,wBAAkB,UAAU;AAC5B,qBAAe,EAAE;AACjB,uBAAiB,EAAE;AACnB,iBAAW,KAAK;AAChB,kBAAY,KAAK;AACjB,mBAAa,IAAI;AACjB;AAAA,IACF;AAEA,sBAAkB,UAAU;AAC5B,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,UAAU,MAAM,WAAW,SAAS,QAAQ;AAElD,UAAI,kBAAkB,YAAY,UAAU;AAC1C;AAAA,MACF;AAEA,UAAI,YAAY,MAAM;AACpB,uBAAe,OAAO;AACtB,qBAAa,IAAI;AACjB,YAAI,CAAC,WAAW,SAAS;AACvB,2BAAiB,OAAO;AACxB,qBAAW,KAAK;AAAA,QAClB;AAAA,MACF,OAAO;AACL,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACvC;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,uBAAuB,GAAG;AACxC,UAAI,kBAAkB,YAAY,UAAU;AAC1C,iBAAS,eAAe,QAAQ,IAAI,UAAU,qBAAqB;AACnE,uBAAe,EAAE;AAAA,MACnB;AAAA,IACF,UAAA;AACE,UAAI,kBAAkB,YAAY,UAAU;AAC1C,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,YAAU,MAAM;AACd,aAAA;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,qBAAqB;AAAA,IACzB,CAAC,UAAmB;AAClB,YAAM,YAAY,SAAS;AAC3B,uBAAiB,SAAS;AAC1B,iBAAW,cAAc,WAAW;AACpC,UAAI,WAAW;AACb,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,aAAa,SAAS;AAAA,EAAA;AAGzB,QAAM,mBAAmB;AAAA,IACvB,OAAO,UAAmB;AACxB,UAAI,CAAC,YAAY,EAAC,yCAAY,YAAW;AACvC;AAAA,MACF;AAEA,YAAM,gBAAgB,SAAS;AAE/B,UAAI,CAAC,WAAW,kBAAkB,aAAa;AAC7C;AAAA,MACF;AAEA,kBAAY,UAAU;AACtB,kBAAY,IAAI;AAChB,mBAAa,IAAI;AAEjB,UAAI;AACF,cAAM,WAAW,UAAU,UAAU,aAAa;AAElD,YAAI,kBAAkB,YAAY,UAAU;AAC1C,yBAAe,aAAa;AAC5B,2BAAiB,aAAa;AAC9B,qBAAW,KAAK;AAGhB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,KAAK,IAAA;AAAA,YAChB,SAAS,EAAE,MAAM,SAAA;AAAA,UAAS,CAC3B;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,kBAAkB,YAAY,UAAU;AAC1C;AAAA,YACE,eAAe,QAAQ,IAAI,UAAU;AAAA,UAAA;AAAA,QAEzC;AAAA,MACF,UAAA;AACE,YAAI,kBAAkB,YAAY,UAAU;AAC1C,sBAAY,KAAK;AAAA,QACnB;AACA,oBAAY,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,eAAe,aAAa,UAAU,SAAS,YAAY,MAAM;AAAA,EAAA;AAGpE,QAAM,cAAc,YAAY,MAAM;AACpC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,KAAK,IAAA;AAAA,MAChB,SAAS,EAAE,MAAM,SAAA;AAAA,IAAS,CAC3B;AACD,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,QAAM,YAAW,qCAAU,MAAM,KAAK,UAAS,YAAY;AAC3D,QAAM,WAAW,WAAW,YAAY,QAAQ,IAAI;AAEpD,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,UACnE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,OAAO,MAAM,OAAO;AAAA,cAAA;AAAA,cAEvB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,oBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,MAAM,UAAU,CAAC,KAAK,UAAA,gCAAA,CAE9C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,iBAAiB,MAAM,OAAO;AAAA,MAAA;AAAA,MAIhC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc,aAAa,MAAM,OAAO,MAAM;AAAA,cAC9C,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,iBAAiB,MAAM,OAAO;AAAA,cAC9B,YAAY,MAAM,MAAM;AAAA,cACxB,YAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,kBAAA;AAAA,kBAGZ,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,OAAO,EAAE,OAAO,MAAM,OAAO,SAAS,YAAY,EAAA;AAAA,sBAAE;AAAA,oBAAA;AAAA,oBAEtD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,YAAY;AAAA,0BACZ,OAAO,MAAM,OAAO;AAAA,0BACpB,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,cAAc;AAAA,wBAAA;AAAA,wBAEhB,OAAO;AAAA,wBAEN,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,cACC,qBAAA,UAAA,EACG,UAAA;AAAA,sBAAA,YACC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,4BAAA;AAAA,4BACe;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA,IAEd,WACF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA,IAGC,UACF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA,IAID;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAIH;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS,MAAM,KAAK,iBAAA;AAAA,0BACpB,UAAU,CAAC,WAAW;AAAA,0BACtB,OAAO;AAAA,4BACL,iBAAiB,MAAM,OAAO;AAAA,4BAC9B,OAAO,MAAM,OAAO;AAAA,4BACpB,QAAQ;AAAA,4BACR,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,UAAU,MAAM,UAAU,CAAC;AAAA,4BAC3B,QAAQ,CAAC,WAAW,WAAW,gBAAgB;AAAA,4BAC/C,SAAS,CAAC,WAAW,WAAW,MAAM;AAAA,4BACtC,YAAY;AAAA,0BAAA;AAAA,0BAEf,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAED,GACF;AAAA,oBAED,YAAY,mBACX;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT,OAAO;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,QAAQ;AAAA,0BACR,OAAO,MAAM,OAAO;AAAA,0BACpB,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,gBAAgB;AAAA,0BAChB,cAAc;AAAA,0BACd,YAAY;AAAA,wBAAA;AAAA,wBAEd,cAAc,CAAC,MAAM;AACnB,4BAAE,cAAc,MAAM,kBACpB,MAAM,OAAO;AAAA,wBACjB;AAAA,wBACA,cAAc,CAAC,MAAM;AACnB,4BAAE,cAAc,MAAM,kBAAkB;AAAA,wBAC1C;AAAA,wBAEA,UAAA,oBAAC,GAAA,EAAE,MAAM,GAAA,CAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACf;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIF,oBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAA,GAC/B,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,cAAA;AAAA,cACS;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,IAGV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA,YACA,SAAS,aAAa,UAAU;AAAA,YAChC,SAAS;AAAA,cACP,UAAU,CAAC;AAAA,cACX,SAAS,EAAE,SAAS,MAAA;AAAA,cACpB,aAAa;AAAA,cACb,sBAAsB;AAAA,cACtB,UAAU;AAAA,cACV,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,iBAAiB;AAAA,cACjB,SAAS;AAAA,cACT,kBAAkB;AAAA,cAClB,WAAW;AAAA,gBACT,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,uBAAuB;AAAA,gBACvB,yBAAyB;AAAA,cAAA;AAAA,YAC3B;AAAA,YAEF,QAAO;AAAA,YACP,UAAU,aAAa,qBAAqB;AAAA,YAC5C,QAAQ,aAAa,mBAAmB;AAAA,UAAA;AAAA,QAAA,EAC1C,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAWO,MAAM,kBAAkD,CAAC,UAAU;AACxE,SAAO,oBAAC,wBAAA,EAAwB,GAAG,MAAA,CAAO;AAC5C;AAEO,MAAM,yBAAmC,MAAM;AACpD,QAAM,EAAE,MAAA,IAAU,SAAA;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,MAAM,UAAU,CAAC;AAAA,QAC3B,OAAO,MAAM,OAAO;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAA,qBAAC,OAAA,EACC,UAAA;AAAA,UAAA,oBAAC,UAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,UAAM;AAAA,UAAQ;AAAA,8BAChD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,YAAQ;AAAA,UAAQ;AAAA,8BAClD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,SAAK;AAAA,UAAO;AAAA,UAAI;AAAA,QAAA,GACrD;AAAA,6BACC,OAAA,EAAI,OAAO,EAAE,aAAa,UAAU,UAAA;AAAA,UAAA;AAAA,8BAC1B,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,OAAG;AAAA,UAAO;AAAA,8BACpD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,WAAO;AAAA,UAAO;AAAA,QAAA,GACnD;AAAA,QACA,oBAAC,SAAK,UAAA,IAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhB;ACniBA,MAAM,aAGF;AAAA,EACF,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,UAAU;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,WAAW;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,mBAAmB,CAAC,aAAoC;;AAC5D,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,QAAM,cAAS,MAAM,GAAG,EAAE,IAAA,MAApB,mBAA2B,kBAAiB;AACxD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,IACL,GAAG;AAAA,IACH,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAGP,SAAO,YAAY,GAAG,KAAK;AAC7B;AAmCA,MAAM,sBAAmD,CAAC;AAAA,EACxD;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA0B,UAAU;AAChE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAiB,EAAE;AACjE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAiB,EAAE;AACjE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,QAAM,WAAW,QAAQ,MAAM,iBAAiB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAGrE,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AAGrC,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,mDAAmD,YAAY;AAC3E,kBAAY,YAAY;AACxB,gBAAU,iBAAiB,UAAU;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,cAAc,aAAa,CAAC;AAGhC,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,YAAY,CAAC,UAAU;AACnD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,oBAAY,QAAQ,IAAI;AACxB,kBAAU,QAAQ,UAAU,UAAU;AAEtC,YAAI,QAAQ,aAAa,UAAa,QAAQ,aAAa,QAAW;AACpE,6BAAmB,QAAQ,YAAY,EAAE;AACzC,6BAAmB,QAAQ,YAAY,EAAE;AACzC,uBAAa,KAAK;AAClB,mBAAS,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,YAAY,CAAC;AAGzB,YAAU,MAAM;AACd,QAAI,WAAW;AAEf,UAAM,WAAW,YAAY;AAC3B,UAAI,CAAC,UAAU;AACb,2BAAmB,EAAE;AACrB,2BAAmB,EAAE;AACrB,qBAAa,KAAK;AAClB,iBAAS,IAAI;AACb;AAAA,MACF;AAGA,UAAI,EAAC,yCAAY,WAAU;AAEzB;AAAA,MACF;AAEA,mBAAa,IAAI;AACjB,eAAS,IAAI;AAEb,UAAI;AAGF,cAAM,WAAW,MAAM,WAAW,SAAS,QAAQ;AAEnD,YAAI,CAAC,SAAU;AAEf,2BAAmB,YAAY,EAAE;AAGjC,YAAI,WAAW,aAAa;AAC1B,6BAAmB,EAAE;AAAA,QACvB;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,CAAC,SAAU;AAEf,gBAAQ,MAAM,4BAA4B,GAAG;AAC7C;AAAA,UACE,eAAe,QACX,wBAAwB,IAAI,OAAO,KACnC;AAAA,QAAA;AAEN,2BAAmB,EAAE;AACrB,2BAAmB,EAAE;AAAA,MACvB,UAAA;AACE,YAAI,UAAU;AACZ,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,SAAA;AAEL,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,UAAU,QAAQ,UAAU,CAAC;AAEjC,QAAM,cAAc,MAAM;AACxB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,KAAK,IAAA;AAAA,MAChB,SAAS,EAAE,MAAM,SAAA;AAAA,IAAS,CAC3B;AACD,gBAAY,IAAI;AAAA,EAClB;AAEA,QAAM,aAAa,SAAS,WAAW,MAAM,IAAI;AACjD,QAAM,cAAc,QAAQ,MAAM;AAChC,QAAI,CAAC,OAAQ,QAAO,MAAM,OAAO;AAEjC,YAAQ,QAAA;AAAA,MACN,KAAK;AACH,eAAO,MAAM,OAAO,WAAW;AAAA,MACjC,KAAK;AACH,eAAO,MAAM,OAAO,WAAW;AAAA,MACjC,KAAK;AACH,eAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,WAAW;AAAA,MACtD,KAAK;AACH,eAAO,MAAM,OAAO,SAAS;AAAA,MAC/B;AACE,eAAO,MAAM,OAAO;AAAA,IAAA;AAAA,EAE1B,GAAG,CAAC,QAAQ,MAAM,MAAM,CAAC;AAEzB,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,OAAO,MAAM,OAAO;AAAA,UACpB,iBAAiB,MAAM,OAAO;AAAA,UAC9B,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,iBAAiB,MAAM,OAAO;AAAA,MAAA;AAAA,MAGhC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc,aAAa,MAAM,OAAO,MAAM;AAAA,cAC9C,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,iBAAiB,MAAM,OAAO;AAAA,cAC9B,YAAY,MAAM,MAAM;AAAA,cACxB,YAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,kBAAA;AAAA,kBAGZ,UAAA;AAAA,oBAAA;AAAA,sBAACC;AAAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,OAAO,EAAE,OAAO,MAAM,OAAO,SAAS,YAAY,EAAA;AAAA,sBAAE;AAAA,oBAAA;AAAA,oBAEtD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,YAAY;AAAA,0BACZ,OAAO,MAAM,OAAO;AAAA,0BACpB,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,cAAc;AAAA,wBAAA;AAAA,wBAEhB,OAAO;AAAA,wBAEN,WAAA,qCAAU,MAAM,KAAK,UAAS;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEhC,cACC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,SAAS;AAAA,0BACT,cAAc;AAAA,0BACd,iBAAiB,GAAG,WAAW;AAAA,0BAC/B,OAAO;AAAA,0BACP,QAAQ,aAAa,WAAW;AAAA,0BAChC,YAAY;AAAA,0BACZ,YAAY;AAAA,wBAAA;AAAA,wBAGb,UAAA,WAAW;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACd;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGH,mBACC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO;AAAA,oBACL,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,QAAQ;AAAA,oBACR,OAAO,MAAM,OAAO;AAAA,oBACpB,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,cAAc;AAAA,oBACd,YAAY;AAAA,oBACZ,YAAY;AAAA,kBAAA;AAAA,kBAEd,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBACpB,MAAM,OAAO;AAAA,kBACjB;AAAA,kBACA,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBAEA,UAAA,oBAAC,GAAA,EAAE,MAAM,GAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YACf;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,oBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAA,GAC/B,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAGzB,UAAA;AAAA,UAAA;AAAA,QAAA,IAGH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,YACA,QAAO;AAAA,YACP,SAAS;AAAA,cACP,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,EAAE,SAAS,MAAA;AAAA,cACpB,iBAAiB;AAAA,cACjB,kBAAkB;AAAA,cAClB,wBAAwB;AAAA,cACxB,sBAAsB;AAAA,cACtB,eAAe;AAAA,cACf,WAAW;AAAA,gBACT,YAAY;AAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,cAAA;AAAA,YACd;AAAA,YAEF,kBACE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,OAAO,MAAM,OAAO;AAAA,gBAAA;AAAA,gBAEvB,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA,EAEJ,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAUO,MAAM,eAA4C,CAAC,UAAU;AAClE,SAAO,oBAAC,qBAAA,EAAqB,GAAG,MAAA,CAAO;AACzC;AAEO,MAAM,sBAAgC,MAAM;AACjD,QAAM,EAAE,MAAA,IAAU,SAAA;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,MAAM,UAAU,CAAC;AAAA,QAC3B,OAAO,MAAM,OAAO;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,KAAK;AAAA,YAAA;AAAA,YAGP,UAAA,oBAAC,UAAK,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAiB,UAAA,aAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,4BAE/D,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,6BAAyB;AAAA,4BAC1D,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,6BAAyB;AAAA,QAC3D,oBAAC,SAAI,OAAO,EAAE,OAAO,MAAM,OAAO,cAAA,GAAiB,UAAA,iBAAA,CAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvE;ACtaA,MAAM,wBAAuD,CAAC;AAAA,EAC5D;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAC3C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAwB,IAAI;AAChE,QAAM,CAAC,UAAU,UAAU,IAAI,SAAkB,KAAK;AAGtD,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AACrC,QAAM,aAAa,QAAQ,yCAAY,SAAS;AAGhD,QAAM,kBAAkB,QAAQ,SAA0B,aAAa;AAGvE,QAAM,UAAU;AAAA,IACd,MAAM;AAAA,MACJ,eAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAY;AAAA,QACV,oBAAoB,OAAO,SAAS;AAClC,kBAAQ,KAAK,gCAAgC,KAAK,IAAI;AACtD,iBAAO;AAAA,QACT;AAAA,MAAA,CACD;AAAA,MACD,YAAA;AAAA,MACA,gBAAgB,EAAE,0BAA0B,cAAc;AAAA,MAC1D,iBAAiB;AAAA,QACf,oBAAoB;AAAA,UAClB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,GAAG;AAAA,UACH,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,UACP,KAAK;AAAA,QAAA;AAAA,MACP,CACD;AAAA,MACD,kBAAA;AAAA,MACA,iBAAiB;AAAA,QACf,UAAU,aAAa,WAAW;AAAA,MAAA,CACnC;AAAA,MACD,cAAc;AAAA,QACZ,iBAAiB,MACf,oBAAA,UAAA,EACE,UAAA,qBAAC,yBAAA,EACC,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS;AAAA,8BACT,iBAAA,EAAgB;AAAA,8BAChB,4BAAA,EAA2B;AAAA,8BAC3B,YAAA,EAAW;AAAA,8BACX,YAAA,EAAW;AAAA,8BACX,aAAA,EAAY;AAAA,8BACZ,aAAA,EAAY;AAAA,8BACZ,qBAAA,EAAoB;AAAA,8BACpB,aAAA,CAAA,CAAY;AAAA,QAAA,EAAA,CACf,EAAA,CACF;AAAA,MAAA,CAEH;AAAA,IAAA;AAAA,IAEH,CAAC,UAAU;AAAA,EAAA;AAGb,YAAU,MAAM;AACd,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAA,CAAE;AAGL,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,qDAAqD,YAAY;AAC7E,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,YAAU,MAAM;;AACd,QAAI,CAAC,cAAc;AACjB,YAAM,QAAOD,MAAA,mDAAiB,SAAjB,gBAAAA,IAAuB;AACpC,UAAI,SAAS,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,IAAI;AAC3D,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,eAAc,wDAAiB,SAAjB,mBAAuB,IAAI,CAAC;AAG9C,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,aAAa,CAAC,UAAU;AACpD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,GAAG;AACjD,sBAAY,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,cAAc,MAAM,CAAC;AAEzB,QAAM,eAAe,YAAY,CAAC,UAAkB;AAClD,gBAAY,KAAK;AACjB,eAAW,IAAI;AACf,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,QAAM,aAAa;AAAA,IACjB,OAAO,YAAqB;AAC1B,YAAM,gBAAgB,WAAW;AAEjC,UAAI,aAAY,yCAAY,YAAW;AACrC,YAAI;AACF,gBAAM,WAAW,UAAU,UAAU,aAAa;AAClD,qBAAW,KAAK;AAGhB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,KAAK,IAAA;AAAA,YAChB,SAAS,EAAE,MAAM,SAAA;AAAA,UAAS,CAC3B;AAAA,QACH,SAAS,OAAO;AACd,kBAAQ,MAAM,sBAAsB,KAAK;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,YAAY,MAAM;AAAA,EAAA;AAIzC,YAAU,MAAM;AACd,UAAM,kBAAkB,YAAY;AAClC,UAAI,CAAC,YAAY,EAAC,yCAAY,WAAU;AACtC,oBAAY,EAAE;AACd;AAAA,MACF;AAEA,mBAAa,IAAI;AACjB,mBAAa,IAAI;AAEjB,UAAI;AACF,cAAM,UAAU,MAAM,WAAW,SAAS,QAAQ;AAElD,YAAI,YAAY,MAAM;AACpB,sBAAY,OAAO;AACnB,wBAAc,IAAI;AAClB,qBAAW,KAAK;AAAA,QAClB,OAAO;AACL,gBAAM,IAAI,MAAM,qBAAqB;AAAA,QACvC;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,uBAAuB,KAAK;AAC1C,qBAAa,wBAAwB,QAAQ,EAAE;AAC/C,oBAAY,EAAE;AACd,sBAAc,IAAI;AAAA,MACpB,UAAA;AACE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,oBAAA;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAGzB,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AAEjB,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,UAAE,eAAA;AACF,mBAAA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,YAAY,UAAU,CAAC;AAE3B,MAAI,CAAC,WAAW;AACd,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,SAAI,OAAO,EAAE,cAAc,OAAA,GAAU,UAAA,WAAO;AAAA,UAC7C,oBAAC,SAAK,UAAA,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGtB;AAEA,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,UACnE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,YAAY;AAAA,gBACZ,OAAO,MAAM,OAAO;AAAA,cAAA;AAAA,cAEvB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,UAAU;AAAA,cAAA;AAAA,cAEb,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,QAAM,eACJ,OAAO,aAAa,WAAW,WAAW,OAAO,YAAY,EAAE;AAEjE,QAAM,gBACJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU,CAAC;AAAA,UACX,0BAAyB;AAAA,UACzB;AAAA,QAAA;AAAA,QALK,YAAY;AAAA,MAAA;AAAA,IAMnB;AAAA,EAAA;AAIJ,MAAI,YAAY;AACd,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,QAAQ;AAAA,QAAA;AAAA,QAGV,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,iBAAiB,MAAM,OAAO,WAAW;AAAA,gBACzC,OAAO,MAAM,OAAO;AAAA,gBACpB,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,KAAK;AAAA,cAAA;AAAA,cAGP,UAAA;AAAA,gBAAA,oBAAC,UAAK,UAAA,UAAA,CAAO;AAAA,qCACZ,QAAA,EACE,UAAA;AAAA,kBAAA;AAAA,kBAAW;AAAA,gBAAA,EAAA,CAEd;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,8BAED,OAAA,EAAI,OAAO,EAAE,MAAM,EAAA,GAAM,UAAA,cAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG9C;AAEA,SAAO;AACT;AAWO,MAAM,iBAAgD,CAAC,UAAU;AACtE,SAAO,oBAAC,uBAAA,EAAuB,GAAG,MAAA,CAAO;AAC3C;AAEO,MAAM,wBAAkC,MAAM;AACnD,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,QAAQ,aAAa,MAAM,OAAO,MAAM;AAAA,QACxC,cAAc;AAAA,QACd,SAAS;AAAA,MAAA;AAAA,MAGX,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,QACnE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,YAAY;AAAA,cACZ,OAAO,MAAM,OAAO;AAAA,cACpB,cAAc;AAAA,YAAA;AAAA,YAEjB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,OAAO,MAAM,OAAO;AAAA,cACpB,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA;AAGN;AC5bO,MAAM,eAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,QAAQ,UAAU,MAAM;AAAA,EAC/B,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,eAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,YAAY,aAAa,SAAS;AAAA,QACnD,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,OAAO,QAAQ,MAAM;AAAA,EAC5B,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,mBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,YAAY,OAAO,QAAQ;AAAA,EAClC,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,wBAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AACF;AAKO,MAAM,gCAAoD;AAAA,EAC/D,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AACT;ACvHO,MAAM,SAA4B;AAAA,EACvC;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe,UAAU;AAAA,MAClC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,8BAA8B;AAAA,IAC5C;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO,UAAU;AAAA,MAC1B,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,2BAA2B;AAAA,IACzC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe,UAAU;AAAA,MAClC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,6BAA6B;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAMO,MAAM,gBAAgB,YAAY;AAEvC,UAAQ,IAAI,4CAA4C;AAC1D;AAMO,MAAM,kBAAkB,YAAY;AAEzC,UAAQ,IAAI,+CAA+C;AAC7D;","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|
|
1
|
+
{"version":3,"file":"panels.bundle.js","sources":["../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js","../node_modules/lucide-react/dist/esm/icons/x.js","../src/panels/FileEditorPanel/FileEditorPanel.tsx","../src/panels/GitDiffPanel/GitDiffPanel.tsx","../src/panels/MDXEditorPanel/MDXEditorPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["// src/glassmorphismTheme.ts\nvar glassmorphismTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.4,\n relaxed: 1.8\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 8, 12, 16, 20, 24, 32, 40],\n shadows: [\n \"none\",\n \"0 8px 32px 0 rgba(31, 38, 135, 0.15)\",\n \"0 12px 40px 0 rgba(31, 38, 135, 0.2)\",\n \"0 16px 48px 0 rgba(31, 38, 135, 0.25)\",\n \"0 20px 56px 0 rgba(31, 38, 135, 0.3)\",\n \"0 24px 64px 0 rgba(31, 38, 135, 0.35)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(255, 255, 255, 0.1)\",\n primary: \"rgba(99, 102, 241, 0.9)\",\n secondary: \"rgba(139, 92, 246, 0.9)\",\n accent: \"rgba(236, 72, 153, 0.9)\",\n highlight: \"rgba(99, 102, 241, 0.2)\",\n muted: \"rgba(255, 255, 255, 0.05)\",\n success: \"rgba(34, 197, 94, 0.9)\",\n warning: \"rgba(251, 146, 60, 0.9)\",\n error: \"rgba(239, 68, 68, 0.9)\",\n info: \"rgba(59, 130, 246, 0.9)\",\n border: \"rgba(255, 255, 255, 0.18)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.15)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.2)\",\n backgroundLight: \"rgba(255, 255, 255, 0.08)\",\n backgroundHover: \"rgba(255, 255, 255, 0.25)\",\n surface: \"rgba(255, 255, 255, 0.12)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.3)\",\n highlightBorder: \"rgba(251, 191, 36, 0.5)\"\n },\n modes: {\n dark: {\n text: \"rgba(255, 255, 255, 0.95)\",\n background: \"rgba(0, 0, 0, 0.3)\",\n primary: \"rgba(129, 140, 248, 0.9)\",\n secondary: \"rgba(167, 139, 250, 0.9)\",\n accent: \"rgba(244, 114, 182, 0.9)\",\n highlight: \"rgba(129, 140, 248, 0.25)\",\n muted: \"rgba(0, 0, 0, 0.15)\",\n success: \"rgba(74, 222, 128, 0.9)\",\n warning: \"rgba(251, 191, 36, 0.9)\",\n error: \"rgba(248, 113, 113, 0.9)\",\n info: \"rgba(96, 165, 250, 0.9)\",\n border: \"rgba(255, 255, 255, 0.15)\",\n backgroundSecondary: \"rgba(0, 0, 0, 0.4)\",\n backgroundTertiary: \"rgba(0, 0, 0, 0.5)\",\n backgroundLight: \"rgba(0, 0, 0, 0.2)\",\n backgroundHover: \"rgba(255, 255, 255, 0.1)\",\n surface: \"rgba(0, 0, 0, 0.35)\",\n textSecondary: \"rgba(255, 255, 255, 0.8)\",\n textTertiary: \"rgba(255, 255, 255, 0.6)\",\n textMuted: \"rgba(255, 255, 255, 0.4)\",\n highlightBg: \"rgba(251, 191, 36, 0.35)\",\n highlightBorder: \"rgba(251, 191, 36, 0.6)\"\n },\n frosted: {\n text: \"rgba(31, 41, 55, 0.95)\",\n background: \"rgba(255, 255, 255, 0.3)\",\n primary: \"rgba(79, 70, 229, 0.95)\",\n secondary: \"rgba(124, 58, 237, 0.95)\",\n accent: \"rgba(219, 39, 119, 0.95)\",\n highlight: \"rgba(79, 70, 229, 0.15)\",\n muted: \"rgba(255, 255, 255, 0.4)\",\n success: \"rgba(16, 185, 129, 0.95)\",\n warning: \"rgba(245, 158, 11, 0.95)\",\n error: \"rgba(220, 38, 38, 0.95)\",\n info: \"rgba(37, 99, 235, 0.95)\",\n border: \"rgba(255, 255, 255, 0.5)\",\n backgroundSecondary: \"rgba(255, 255, 255, 0.4)\",\n backgroundTertiary: \"rgba(255, 255, 255, 0.5)\",\n backgroundLight: \"rgba(255, 255, 255, 0.25)\",\n backgroundHover: \"rgba(255, 255, 255, 0.6)\",\n surface: \"rgba(255, 255, 255, 0.35)\",\n textSecondary: \"rgba(31, 41, 55, 0.8)\",\n textTertiary: \"rgba(31, 41, 55, 0.6)\",\n textMuted: \"rgba(31, 41, 55, 0.5)\",\n highlightBg: \"rgba(251, 191, 36, 0.4)\",\n highlightBorder: \"rgba(251, 191, 36, 0.7)\"\n }\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"secondary\"\n }\n },\n secondary: {\n color: \"text\",\n bg: \"rgba(255, 255, 255, 0.1)\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n \"&:hover\": {\n bg: \"rgba(255, 255, 255, 0.2)\"\n }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"transparent\",\n \"&:hover\": {\n borderColor: \"rgba(255, 255, 255, 0.2)\",\n bg: \"rgba(255, 255, 255, 0.05)\"\n }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 3\n }\n }\n};\n// src/defaultThemes.ts\nvar defaultMarkdownTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n heading: '\"Crimson Text\", \"Georgia\", \"Times New Roman\", serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.6,\n heading: 1.3,\n tight: 1.25,\n relaxed: 1.75\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)\",\n \"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)\",\n \"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)\",\n \"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)\",\n \"0 25px 50px -12px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#1a1a1a\",\n background: \"#ffffff\",\n primary: \"#007acc\",\n secondary: \"#005a9e\",\n accent: \"#1a1a1a\",\n highlight: \"rgba(0, 122, 204, 0.1)\",\n muted: \"#f0f0f0\",\n success: \"#28a745\",\n warning: \"#ffc107\",\n error: \"#dc3545\",\n info: \"#17a2b8\",\n border: \"rgba(0, 0, 0, 0.1)\",\n backgroundSecondary: \"#f8f9fa\",\n backgroundTertiary: \"#e9ecef\",\n backgroundLight: \"rgba(0, 0, 0, 0.03)\",\n backgroundHover: \"rgba(0, 0, 0, 0.05)\",\n surface: \"#ffffff\",\n textSecondary: \"#555555\",\n textTertiary: \"#888888\",\n textMuted: \"#aaaaaa\",\n highlightBg: \"rgba(255, 235, 59, 0.3)\",\n highlightBorder: \"rgba(255, 235, 59, 0.6)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 2\n }\n }\n};\nvar defaultTerminalTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Courier New\", Courier, monospace',\n heading: '\"Courier New\", Courier, monospace',\n monospace: '\"Courier New\", Courier, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 500,\n bold: 600,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.4,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.6\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 0 5px rgba(255, 193, 7, 0.1)\",\n \"0 0 10px rgba(255, 193, 7, 0.15)\",\n \"0 0 15px rgba(255, 193, 7, 0.2)\",\n \"0 0 20px rgba(255, 193, 7, 0.25)\",\n \"0 0 30px rgba(255, 193, 7, 0.3)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#ffc107\",\n background: \"#000000\",\n primary: \"#ffc107\",\n secondary: \"#ffb300\",\n accent: \"#ffffff\",\n highlight: \"rgba(255, 193, 7, 0.1)\",\n muted: \"#1a1a1a\",\n success: \"#4caf50\",\n warning: \"#ff9800\",\n error: \"#f44336\",\n info: \"#2196f3\",\n border: \"rgba(255, 193, 7, 0.2)\",\n backgroundSecondary: \"#0a0a0a\",\n backgroundTertiary: \"#111111\",\n backgroundLight: \"rgba(255, 193, 7, 0.03)\",\n backgroundHover: \"rgba(255, 193, 7, 0.05)\",\n surface: \"#050505\",\n textSecondary: \"#e0e0e0\",\n textTertiary: \"#b0b0b0\",\n textMuted: \"#808080\",\n highlightBg: \"rgba(255, 193, 7, 0.2)\",\n highlightBorder: \"rgba(255, 193, 7, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"black\",\n bg: \"primary\",\n borderWidth: 0,\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 0\n }\n }\n};\nvar defaultEditorTheme = {\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\n fonts: {\n body: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace',\n heading: '\"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\n monospace: '\"Fira Code\", \"SF Mono\", Monaco, Inconsolata, monospace'\n },\n fontSizes: [12, 14, 16, 18, 20, 24, 32, 48, 64, 96],\n fontScale: 1,\n fontWeights: {\n body: 400,\n heading: 600,\n bold: 700,\n light: 300,\n medium: 500,\n semibold: 600\n },\n lineHeights: {\n body: 1.5,\n heading: 1.2,\n tight: 1.3,\n relaxed: 1.7\n },\n breakpoints: [\"640px\", \"768px\", \"1024px\", \"1280px\"],\n sizes: [16, 32, 64, 128, 256, 512, 768, 1024, 1536],\n radii: [0, 2, 4, 6, 8, 12, 16, 24],\n shadows: [\n \"none\",\n \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n \"0 2px 4px rgba(0, 0, 0, 0.1)\",\n \"0 4px 8px rgba(0, 0, 0, 0.15)\",\n \"0 8px 16px rgba(0, 0, 0, 0.2)\",\n \"0 12px 24px rgba(0, 0, 0, 0.25)\"\n ],\n zIndices: [0, 1, 10, 20, 30, 40, 50],\n colors: {\n text: \"#d4d4d4\",\n background: \"#1e1e1e\",\n primary: \"#569cd6\",\n secondary: \"#408ac9\",\n accent: \"#c586c0\",\n highlight: \"rgba(86, 156, 214, 0.1)\",\n muted: \"#2a2a2a\",\n success: \"#6a9955\",\n warning: \"#d18616\",\n error: \"#f44747\",\n info: \"#569cd6\",\n border: \"rgba(255, 255, 255, 0.1)\",\n backgroundSecondary: \"#252526\",\n backgroundTertiary: \"#333333\",\n backgroundLight: \"rgba(255, 255, 255, 0.03)\",\n backgroundHover: \"rgba(255, 255, 255, 0.05)\",\n surface: \"#252526\",\n textSecondary: \"#cccccc\",\n textTertiary: \"#999999\",\n textMuted: \"#666666\",\n highlightBg: \"rgba(255, 235, 59, 0.2)\",\n highlightBorder: \"rgba(255, 235, 59, 0.4)\"\n },\n buttons: {\n primary: {\n color: \"white\",\n bg: \"primary\",\n \"&:hover\": { bg: \"secondary\" }\n },\n secondary: {\n color: \"primary\",\n bg: \"transparent\",\n borderWidth: 1,\n borderStyle: \"solid\",\n borderColor: \"primary\",\n \"&:hover\": { bg: \"highlight\" }\n },\n ghost: {\n color: \"text\",\n bg: \"transparent\",\n \"&:hover\": { bg: \"backgroundHover\" }\n }\n },\n text: {\n heading: {\n fontFamily: \"heading\",\n fontWeight: \"heading\",\n lineHeight: \"heading\"\n },\n body: {\n fontFamily: \"body\",\n fontWeight: \"body\",\n lineHeight: \"body\"\n },\n caption: {\n fontSize: 1,\n color: \"textSecondary\"\n }\n },\n cards: {\n primary: {\n bg: \"surface\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n },\n secondary: {\n bg: \"backgroundSecondary\",\n border: \"1px solid\",\n borderColor: \"border\",\n borderRadius: 1\n }\n }\n};\n// src/landingPageTheme.ts\nvar landingPageTheme = {\n space: [0, 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 100, 128],\n fonts: {\n body: 'Inter, \"Geist Sans\", system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n heading: '-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n monospace: '\"SF Mono\", Monaco, Inconsolata, \"Fira Code\", monospace'\n },\n fontSizes: [12, 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 * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M14 2v5a1 1 0 0 0 1 1h5\", key: \"wfsgrz\" }],\n [\"path\", { d: \"M10 9H8\", key: \"b1mrlr\" }],\n [\"path\", { d: \"M16 13H8\", key: \"t4e002\" }],\n [\"path\", { d: \"M16 17H8\", key: \"z1uh3a\" }]\n];\nconst FileText = createLucideIcon(\"file-text\", __iconNode);\n\nexport { __iconNode, FileText as default };\n//# sourceMappingURL=file-text.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }],\n [\"line\", { x1: \"3\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1dyftd\" }],\n [\"line\", { x1: \"15\", x2: \"21\", y1: \"12\", y2: \"12\", key: \"oup4p8\" }]\n];\nconst GitCommitHorizontal = createLucideIcon(\"git-commit-horizontal\", __iconNode);\n\nexport { __iconNode, GitCommitHorizontal as default };\n//# sourceMappingURL=git-commit-horizontal.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import React, { useState, useEffect, useCallback, useRef } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoWithProvider } from '@principal-ade/industry-themed-monaco-editor';\nimport { FileText, X } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * User preferences slice shape\n */\ninterface UserPreferences {\n vimMode?: boolean;\n // other preferences...\n}\n\n/**\n * Extended props for FileEditorPanel with optional prop-controlled mode\n */\nexport interface FileEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\nconst getLanguage = (path: string): string => {\n const ext = path.split('.').pop()?.toLowerCase() || '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n cs: 'csharp',\n php: 'php',\n rb: 'ruby',\n go: 'go',\n rs: 'rust',\n kt: 'kotlin',\n swift: 'swift',\n json: 'json',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sql: 'sql',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n md: 'markdown',\n mdx: 'markdown',\n };\n return languageMap[ext] || 'plaintext';\n};\n\n/**\n * FileEditorPanelContent - Internal component that uses theme\n */\nconst FileEditorPanelContent: React.FC<FileEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [fileContent, setFileContent] = useState<string>('');\n const [editorContent, setEditorContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n const latestFilePathRef = useRef<string | null>(null);\n const isSavingRef = useRef(false);\n const isDirtyRef = useRef(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Get user preferences (vim mode, etc.)\n const preferencesSlice = context.getSlice<UserPreferences>('preferences');\n const vimMode = preferencesSlice?.data?.vimMode ?? false;\n\n useEffect(() => {\n isDirtyRef.current = isDirty;\n }, [isDirty]);\n\n useEffect(() => {\n isDirtyRef.current = false;\n setIsDirty(false);\n setIsSaving(false);\n isSavingRef.current = false;\n setSaveError(null);\n }, [filePath]);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[FileEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp && activeFileSlice?.data?.path) {\n setFilePath(activeFileSlice.data.path);\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n setFilePath(payload.path);\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n const loadFile = useCallback(async () => {\n if (!filePath || !fileSystem?.readFile) {\n latestFilePathRef.current = null;\n setFileContent('');\n setEditorContent('');\n setIsDirty(false);\n setIsSaving(false);\n setSaveError(null);\n return;\n }\n\n latestFilePathRef.current = filePath;\n setIsLoading(true);\n setError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (latestFilePathRef.current !== filePath) {\n return;\n }\n\n if (content !== null) {\n setFileContent(content);\n setSaveError(null);\n if (!isDirtyRef.current) {\n setEditorContent(content);\n setIsDirty(false);\n }\n } else {\n throw new Error('Failed to read file');\n }\n } catch (err) {\n console.error('Error loading file:', err);\n if (latestFilePathRef.current === filePath) {\n setError(err instanceof Error ? err.message : 'Failed to load file');\n setFileContent('');\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsLoading(false);\n }\n }\n }, [filePath, fileSystem]);\n\n useEffect(() => {\n loadFile();\n }, [loadFile]);\n\n const handleEditorChange = useCallback(\n (value?: string) => {\n const nextValue = value ?? '';\n setEditorContent(nextValue);\n setIsDirty(nextValue !== fileContent);\n if (saveError) {\n setSaveError(null);\n }\n },\n [fileContent, saveError]\n );\n\n const handleEditorSave = useCallback(\n async (value?: string) => {\n if (!filePath || !fileSystem?.writeFile) {\n return;\n }\n\n const contentToSave = value ?? editorContent;\n\n if (!isDirty && contentToSave === fileContent) {\n return;\n }\n\n isSavingRef.current = true;\n setIsSaving(true);\n setSaveError(null);\n\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n\n if (latestFilePathRef.current === filePath) {\n setFileContent(contentToSave);\n setEditorContent(contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n }\n } catch (err) {\n if (latestFilePathRef.current === filePath) {\n setSaveError(\n err instanceof Error ? err.message : 'Failed to save file'\n );\n }\n } finally {\n if (latestFilePathRef.current === filePath) {\n setIsSaving(false);\n }\n isSavingRef.current = false;\n }\n },\n [editorContent, fileContent, filePath, isDirty, fileSystem, events]\n );\n\n const handleClose = useCallback(() => {\n events.emit({\n type: 'file:close',\n source: 'industry-theme.file-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n }, [events, filePath]);\n\n const fileName = filePath?.split('/').pop() || filePath || '';\n const language = filePath ? getLanguage(filePath) : 'plaintext';\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'column',\n color: theme.colors.textSecondary,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <div\n style={{\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n marginBottom: '12px',\n color: theme.colors.text,\n }}\n >\n File Editor\n </div>\n <div style={{ fontSize: theme.fontSizes[1] }}>\n Select a file to view or edit\n </div>\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n {/* Header */}\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <FileText\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {fileName}\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n }}\n >\n {isEditable && (\n <>\n {saveError ? (\n <span\n style={{\n color: theme.colors.error,\n fontSize: theme.fontSizes[0],\n }}\n >\n Save failed: {saveError}\n </span>\n ) : isSaving ? (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saving...\n </span>\n ) : isDirty ? (\n <span\n style={{\n color: theme.colors.primary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Unsaved changes\n </span>\n ) : (\n <span\n style={{\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[0],\n }}\n >\n Saved\n </span>\n )}\n <button\n onClick={() => void handleEditorSave()}\n disabled={!isDirty || isSaving}\n style={{\n backgroundColor: theme.colors.primary,\n color: theme.colors.background,\n border: 'none',\n borderRadius: '4px',\n padding: '6px 10px',\n fontSize: theme.fontSizes[0],\n cursor: !isDirty || isSaving ? 'not-allowed' : 'pointer',\n opacity: !isDirty || isSaving ? 0.6 : 1,\n transition: 'opacity 0.2s ease',\n }}\n >\n Save\n </button>\n </>\n )}\n {filePath && showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundSecondary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n </div>\n\n {/* Content */}\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n Error: {error}\n </div>\n ) : (\n <ThemedMonacoWithProvider\n value={editorContent}\n language={language}\n vimMode={isEditable ? vimMode : false}\n options={{\n readOnly: !isEditable,\n minimap: { enabled: false },\n lineNumbers: 'on',\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n fontSize: theme.fontSizes[2],\n automaticLayout: true,\n folding: true,\n renderWhitespace: 'selection',\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n useShadows: false,\n verticalScrollbarSize: 10,\n horizontalScrollbarSize: 10,\n },\n }}\n height=\"100%\"\n onChange={isEditable ? handleEditorChange : undefined}\n onSave={isEditable ? handleEditorSave : undefined}\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * FileEditorPanel - Monaco-based code editor with vim mode support.\n *\n * This panel provides:\n * - Syntax highlighting for many languages\n * - File editing with save support\n * - Dirty state tracking\n * - Integration with panel framework events\n */\nexport const FileEditorPanel: React.FC<FileEditorPanelProps> = (props) => {\n return <FileEditorPanelContent {...props} />;\n};\n\nexport const FileEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div>\n <span style={{ color: '#c678dd' }}>export</span>{' '}\n <span style={{ color: '#61afef' }}>function</span>{' '}\n <span style={{ color: '#e5c07b' }}>hello</span>() {'{'}\n </div>\n <div style={{ paddingLeft: '12px' }}>\n console.<span style={{ color: '#61afef' }}>log</span>(\n <span style={{ color: '#98c379' }}>'Hello'</span>);\n </div>\n <div>{'}'}</div>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { ThemedMonacoDiffEditor } from '@principal-ade/industry-themed-monaco-editor';\nimport { GitCommit, X } from 'lucide-react';\n\nimport type { PanelComponentProps, GitChangeStatus } from '../../types';\n\nconst statusMeta: Record<\n GitChangeStatus,\n { label: string; description: string }\n> = {\n staged: {\n label: 'Staged change',\n description: 'Comparing staged changes against the last commit',\n },\n unstaged: {\n label: 'Unstaged change',\n description: 'Comparing working tree changes against the last commit',\n },\n untracked: {\n label: 'Untracked file',\n description: 'New file compared against an empty baseline',\n },\n deleted: {\n label: 'Deleted file',\n description: 'Showing the last committed contents of the deleted file',\n },\n};\n\nconst languageFromPath = (filePath: string | null): string => {\n if (!filePath) {\n return 'plaintext';\n }\n\n const ext = filePath.split('.').pop()?.toLowerCase() ?? '';\n const languageMap: Record<string, string> = {\n js: 'javascript',\n jsx: 'javascript',\n ts: 'typescript',\n tsx: 'typescript',\n py: 'python',\n java: 'java',\n c: 'c',\n cpp: 'cpp',\n h: 'c',\n hpp: 'cpp',\n cs: 'csharp',\n go: 'go',\n rs: 'rust',\n php: 'php',\n rb: 'ruby',\n swift: 'swift',\n kt: 'kotlin',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n toml: 'toml',\n ini: 'ini',\n cfg: 'ini',\n conf: 'ini',\n xml: 'xml',\n html: 'html',\n css: 'css',\n scss: 'scss',\n sass: 'sass',\n less: 'less',\n sh: 'bash',\n bash: 'bash',\n zsh: 'bash',\n md: 'markdown',\n mdx: 'markdown',\n sql: 'sql',\n };\n\n return languageMap[ext] ?? 'plaintext';\n};\n\ninterface GitDiffPayload {\n path: string;\n status?: GitChangeStatus;\n original?: string;\n modified?: string;\n}\n\n/**\n * Extended props for GitDiffPanel with optional prop-controlled mode\n */\nexport interface GitDiffPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display diff for.\n * If provided, this takes precedence over event-based selection.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Optional git status for the file.\n * Used together with filePath in prop-controlled mode.\n */\n gitStatus?: GitChangeStatus;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * GitDiffPanelContent - Internal component that uses theme\n */\nconst GitDiffPanelContent: React.FC<GitDiffPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n gitStatus: gitStatusProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [status, setStatus] = useState<GitChangeStatus>('unstaged');\n const [originalContent, setOriginalContent] = useState<string>('');\n const [modifiedContent, setModifiedContent] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const language = useMemo(() => languageFromPath(filePath), [filePath]);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[GitDiffPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n setStatus(gitStatusProp || 'unstaged');\n }\n }, [filePathProp, gitStatusProp]);\n\n // Listen for git:diff events (only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('git:diff', (event) => {\n const payload = event.payload as GitDiffPayload;\n if (payload?.path) {\n setFilePath(payload.path);\n setStatus(payload.status || 'unstaged');\n // If content is provided directly, use it\n if (payload.original !== undefined || payload.modified !== undefined) {\n setOriginalContent(payload.original ?? '');\n setModifiedContent(payload.modified ?? '');\n setIsLoading(false);\n setError(null);\n }\n }\n });\n return unsubscribe;\n }, [events, filePathProp]);\n\n // Load diff content when file path changes\n useEffect(() => {\n let isActive = true;\n\n const loadDiff = async () => {\n if (!filePath) {\n setOriginalContent('');\n setModifiedContent('');\n setIsLoading(false);\n setError(null);\n return;\n }\n\n // If we don't have a file system adapter, we can't load content\n if (!fileSystem?.readFile) {\n // Content should be provided via events\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // For now, read the current file content as \"modified\"\n // The \"original\" would need to come from git or be provided via events\n const modified = await fileSystem.readFile(filePath);\n\n if (!isActive) return;\n\n setModifiedContent(modified ?? '');\n // Original content should be provided via git:diff event payload\n // or we leave it empty for new files\n if (status === 'untracked') {\n setOriginalContent('');\n }\n } catch (err) {\n if (!isActive) return;\n\n console.error('Failed to load git diff:', err);\n setError(\n err instanceof Error\n ? `Failed to load diff: ${err.message}`\n : 'Failed to load diff'\n );\n setOriginalContent('');\n setModifiedContent('');\n } finally {\n if (isActive) {\n setIsLoading(false);\n }\n }\n };\n\n void loadDiff();\n\n return () => {\n isActive = false;\n };\n }, [filePath, status, fileSystem]);\n\n const handleClose = () => {\n events.emit({\n type: 'git:diff:close',\n source: 'industry-theme.git-diff',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n setFilePath(null);\n };\n\n const statusInfo = status ? statusMeta[status] : null;\n const statusColor = useMemo(() => {\n if (!status) return theme.colors.textSecondary;\n\n switch (status) {\n case 'staged':\n return theme.colors.success || '#10b981';\n case 'unstaged':\n return theme.colors.warning || '#f59e0b';\n case 'untracked':\n return theme.colors.info || theme.colors.primary || '#3b82f6';\n case 'deleted':\n return theme.colors.error || '#ef4444';\n default:\n return theme.colors.textSecondary;\n }\n }, [status, theme.colors]);\n\n if (!filePath) {\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Select a file from Git Changes to view its diff.\n </div>\n );\n }\n\n return (\n <div\n style={{\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.colors.background,\n }}\n >\n <div\n style={{\n height: '40px',\n padding: '0 12px',\n borderBottom: `1px solid ${theme.colors.border}`,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n backgroundColor: theme.colors.backgroundSecondary,\n fontFamily: theme.fonts.body,\n flexShrink: 0,\n boxSizing: 'border-box',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flex: 1,\n minWidth: 0,\n }}\n >\n <GitCommit\n size={16}\n style={{ color: theme.colors.primary, flexShrink: 0 }}\n />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n title={filePath}\n >\n {filePath?.split('/').pop() || filePath}\n </div>\n {statusInfo && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n fontSize: theme.fontSizes[0],\n padding: '2px 8px',\n borderRadius: '999px',\n backgroundColor: `${statusColor}20`,\n color: statusColor,\n border: `1px solid ${statusColor}60`,\n whiteSpace: 'nowrap',\n flexShrink: 0,\n }}\n >\n {statusInfo.label}\n </span>\n )}\n </div>\n {showCloseButton && (\n <button\n onClick={handleClose}\n style={{\n background: 'none',\n border: 'none',\n padding: '4px',\n cursor: 'pointer',\n color: theme.colors.textSecondary,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor =\n theme.colors.backgroundTertiary;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <X size={16} />\n </button>\n )}\n </div>\n <div style={{ flex: 1, minHeight: 0 }}>\n {isLoading ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading diff...\n </div>\n ) : error ? (\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n {error}\n </div>\n ) : (\n <ThemedMonacoDiffEditor\n theme={theme}\n original={originalContent}\n modified={modifiedContent}\n language={language}\n height=\"100%\"\n options={{\n renderSideBySide: true,\n readOnly: true,\n minimap: { enabled: false },\n automaticLayout: true,\n renderIndicators: true,\n renderMarginRevertIcon: true,\n ignoreTrimWhitespace: false,\n diffAlgorithm: 'advanced',\n scrollbar: {\n useShadows: false,\n vertical: 'auto',\n horizontal: 'auto',\n },\n }}\n loadingComponent={\n <div\n style={{\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.colors.textSecondary,\n }}\n >\n Preparing diff editor...\n </div>\n }\n />\n )}\n </div>\n </div>\n );\n};\n\n/**\n * GitDiffPanel - Side-by-side git diff viewer.\n *\n * This panel shows:\n * - Side-by-side comparison of original vs modified content\n * - Status indicators for staged/unstaged/untracked/deleted files\n * - Syntax highlighting based on file type\n */\nexport const GitDiffPanel: React.FC<GitDiffPanelProps> = (props) => {\n return <GitDiffPanelContent {...props} />;\n};\n\nexport const GitDiffPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n\n return (\n <div\n style={{\n padding: '12px',\n fontSize: theme.fontSizes[0],\n color: theme.colors.text,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n fontFamily: theme.fonts.monospace,\n }}\n >\n <div\n style={{\n display: 'flex',\n gap: '8px',\n }}\n >\n <span style={{ color: theme.colors.textSecondary }}>@@ 12,5 @@</span>\n </div>\n <div style={{ color: '#ef4444' }}>- const count = oldValue;</div>\n <div style={{ color: '#22c55e' }}>+ const count = newValue;</div>\n <div style={{ color: theme.colors.textSecondary }}> return count;</div>\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState, useMemo } from 'react';\nimport {\n headingsPlugin,\n listsPlugin,\n quotePlugin,\n thematicBreakPlugin,\n markdownShortcutPlugin,\n linkPlugin,\n linkDialogPlugin,\n imagePlugin,\n tablePlugin,\n codeBlockPlugin,\n codeMirrorPlugin,\n diffSourcePlugin,\n frontmatterPlugin,\n toolbarPlugin,\n UndoRedo,\n BoldItalicUnderlineToggles,\n CodeToggle,\n CreateLink,\n InsertImage,\n InsertTable,\n InsertThematicBreak,\n ListsToggle,\n BlockTypeSelect,\n DiffSourceToggleWrapper,\n MDXEditor,\n themeToCSSVariables,\n} from '@principal-ai/mdx-editor';\nimport '@principal-ai/mdx-editor/style.css';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport { FileText } from 'lucide-react';\n\nimport type { PanelComponentProps, ActiveFileSlice } from '../../types';\n\n/**\n * Extended props for MDXEditorPanel with optional prop-controlled mode\n */\nexport interface MDXEditorPanelProps extends PanelComponentProps {\n /**\n * Optional file path to display.\n * If provided, this takes precedence over event-based selection and context slices.\n * This allows the host to control panel state via props instead of events.\n */\n filePath?: string | null;\n /**\n * Whether to show the close button in the panel header.\n * Set to false when using in tabs (where the tab has its own close button).\n * Defaults to true.\n */\n showCloseButton?: boolean;\n}\n\n/**\n * MDXEditorPanelContent - Internal component that uses theme\n */\nconst MDXEditorPanelContent: React.FC<MDXEditorPanelProps> = ({\n context,\n actions: _actions,\n events,\n filePath: filePathProp,\n showCloseButton = true,\n}) => {\n const { theme } = useTheme();\n const [filePath, setFilePath] = useState<string | null>(null);\n const [markdown, setMarkdown] = useState('');\n const [isMounted, setIsMounted] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [parseError, setParseError] = useState<string | null>(null);\n const [_isDirty, setIsDirty] = useState<boolean>(false);\n\n // Get file system adapter from context\n const fileSystem = context.adapters?.fileSystem;\n const isEditable = Boolean(fileSystem?.writeFile);\n\n // Get active file from context slice\n const activeFileSlice = context.getSlice<ActiveFileSlice>('active-file');\n\n // Memoize plugins array for performance\n const plugins = useMemo(\n () => [\n headingsPlugin(),\n listsPlugin(),\n quotePlugin(),\n thematicBreakPlugin(),\n markdownShortcutPlugin(),\n linkPlugin(),\n linkDialogPlugin(),\n imagePlugin({\n imageUploadHandler: async (file) => {\n console.warn('Image upload not configured:', file.name);\n return '/placeholder-image.png';\n },\n }),\n tablePlugin(),\n codeBlockPlugin({ defaultCodeBlockLanguage: 'javascript' }),\n codeMirrorPlugin({\n codeBlockLanguages: {\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n tsx: 'TypeScript (JSX)',\n jsx: 'JavaScript (JSX)',\n python: 'Python',\n java: 'Java',\n go: 'Go',\n rust: 'Rust',\n cpp: 'C++',\n c: 'C',\n css: 'CSS',\n html: 'HTML',\n json: 'JSON',\n yaml: 'YAML',\n markdown: 'Markdown',\n bash: 'Bash',\n shell: 'Shell',\n sql: 'SQL',\n },\n }),\n frontmatterPlugin(),\n diffSourcePlugin({\n viewMode: parseError ? 'source' : 'rich-text',\n }),\n toolbarPlugin({\n toolbarContents: () => (\n <>\n <DiffSourceToggleWrapper>\n <UndoRedo />\n <BlockTypeSelect />\n <BoldItalicUnderlineToggles />\n <CodeToggle />\n <CreateLink />\n <InsertImage />\n <InsertTable />\n <InsertThematicBreak />\n <ListsToggle />\n </DiffSourceToggleWrapper>\n </>\n ),\n }),\n ],\n [parseError]\n );\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Prop-controlled mode: when filePath prop is provided, it takes precedence\n useEffect(() => {\n if (filePathProp) {\n console.log('[MDXEditorPanel] Using prop-controlled file path:', filePathProp);\n setFilePath(filePathProp);\n }\n }, [filePathProp]);\n\n // Sync with active-file slice (only for markdown files, only when not prop-controlled)\n useEffect(() => {\n if (!filePathProp) {\n const path = activeFileSlice?.data?.path;\n if (path && (path.endsWith('.md') || path.endsWith('.mdx'))) {\n setFilePath(path);\n }\n }\n }, [filePathProp, activeFileSlice?.data?.path]);\n\n // Listen for file:open events (only handle markdown files, only when not prop-controlled)\n useEffect(() => {\n if (filePathProp) {\n // In prop-controlled mode, ignore events\n return undefined;\n }\n\n const unsubscribe = events.on('file:open', (event) => {\n const payload = event.payload as { path: string };\n if (payload?.path) {\n const path = payload.path;\n if (path.endsWith('.md') || path.endsWith('.mdx')) {\n setFilePath(path);\n }\n }\n });\n return unsubscribe;\n }, [filePathProp, events]);\n\n const handleChange = useCallback((value: string) => {\n setMarkdown(value);\n setIsDirty(true);\n setParseError(null);\n }, []);\n\n const handleSave = useCallback(\n async (content?: string) => {\n const contentToSave = content || markdown;\n\n if (filePath && fileSystem?.writeFile) {\n try {\n await fileSystem.writeFile(filePath, contentToSave);\n setIsDirty(false);\n\n // Emit file:save event\n events.emit({\n type: 'file:save',\n source: 'industry-theme.mdx-editor',\n timestamp: Date.now(),\n payload: { path: filePath },\n });\n } catch (error) {\n console.error('Error saving file:', error);\n }\n }\n },\n [markdown, filePath, fileSystem, events]\n );\n\n // Load file content when filePath changes\n useEffect(() => {\n const loadFileContent = async () => {\n if (!filePath || !fileSystem?.readFile) {\n setMarkdown('');\n return;\n }\n\n setIsLoading(true);\n setLoadError(null);\n\n try {\n const content = await fileSystem.readFile(filePath);\n\n if (content !== null) {\n setMarkdown(content);\n setParseError(null);\n setIsDirty(false);\n } else {\n throw new Error('Failed to read file');\n }\n } catch (error) {\n console.error('Error loading file:', error);\n setLoadError(`Failed to load file: ${filePath}`);\n setMarkdown('');\n setParseError(null);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadFileContent();\n }, [filePath, fileSystem]);\n\n // Handle keyboard shortcuts for save\n useEffect(() => {\n if (!isEditable) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 's') {\n e.preventDefault();\n handleSave();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [isEditable, handleSave]);\n\n if (!isMounted) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading editor...\n </div>\n );\n }\n\n if (isLoading) {\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.text,\n fontFamily: theme.fonts.body,\n }}\n >\n Loading file...\n </div>\n );\n }\n\n if (loadError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.error,\n padding: '20px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <div style={{ marginBottom: '10px' }}>Warning</div>\n <div>{loadError}</div>\n </div>\n );\n }\n\n if (!filePath) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n color: theme.colors.textSecondary,\n padding: '40px',\n textAlign: 'center',\n fontFamily: theme.fonts.body,\n }}\n >\n <FileText size={48} style={{ marginBottom: '16px', opacity: 0.5 }} />\n <h3\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[3],\n fontWeight: 600,\n color: theme.colors.text,\n }}\n >\n No File Selected\n </h3>\n <p\n style={{\n margin: 0,\n fontSize: theme.fontSizes[2],\n maxWidth: '400px',\n }}\n >\n Select a markdown file (.md or .mdx) to start editing\n </p>\n </div>\n );\n }\n\n const safeMarkdown =\n typeof markdown === 'string' ? markdown : String(markdown || '');\n\n // Apply theme CSS variables to the editor wrapper\n const themeVariables = themeToCSSVariables(theme);\n const editorWrapperStyle = {\n height: '100%',\n width: '100%',\n ...Object.fromEntries(\n Object.entries(themeVariables).map(([key, value]) => [key, value])\n ),\n };\n\n const editorContent = (\n <div style={editorWrapperStyle}>\n <MDXEditor\n key={filePath || 'default'}\n markdown={safeMarkdown}\n onChange={handleChange}\n readOnly={!isEditable}\n contentEditableClassName=\"prose\"\n plugins={plugins}\n />\n </div>\n );\n\n if (parseError) {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n }}\n >\n <div\n style={{\n padding: '12px 16px',\n backgroundColor: theme.colors.warning || '#f59e0b',\n color: theme.colors.background,\n fontSize: theme.fontSizes[2],\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span>Warning</span>\n <span>\n {parseError} - Switch to source mode using the toolbar button to\n edit the raw markdown.\n </span>\n </div>\n <div style={{ flex: 1 }}>{editorContent}</div>\n </div>\n );\n }\n\n return editorContent;\n};\n\n/**\n * MDXEditorPanel - Rich markdown/MDX editor.\n *\n * This panel provides:\n * - WYSIWYG markdown editing\n * - Code block support with syntax highlighting\n * - Image and table insertion\n * - Source mode for raw markdown editing\n */\nexport const MDXEditorPanel: React.FC<MDXEditorPanelProps> = (props) => {\n return <MDXEditorPanelContent {...props} />;\n};\n\nexport const MDXEditorPanelPreview: React.FC = () => {\n const { theme } = useTheme();\n return (\n <div\n style={{\n width: '100%',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n border: `1px solid ${theme.colors.border}`,\n borderRadius: '4px',\n padding: '20px',\n }}\n >\n <FileText size={32} style={{ marginBottom: '12px', opacity: 0.6 }} />\n <div\n style={{\n fontSize: theme.fontSizes[2],\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: '4px',\n }}\n >\n MDX Editor\n </div>\n <div\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n textAlign: 'center',\n }}\n >\n Rich markdown editor with live preview\n </div>\n </div>\n );\n};\n","/**\n * Panel Tools\n *\n * UTCP-compatible tools for file editing panels.\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 {\n PanelTool,\n PanelToolsMetadata,\n} from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Open File in Editor\n */\nexport const openFileTool: PanelTool = {\n name: 'open_file',\n description: 'Opens a file in the file editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['file', 'editor', 'open'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-file',\n },\n};\n\n/**\n * Tool: View Git Diff\n */\nexport const viewDiffTool: PanelTool = {\n name: 'view_diff',\n description: 'Opens a file in the git diff panel to view changes',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the file to diff',\n },\n status: {\n type: 'string',\n enum: ['staged', 'unstaged', 'untracked', 'deleted'],\n description: 'The git status of the file',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['git', 'diff', 'view'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:view-diff',\n },\n};\n\n/**\n * Tool: Open Markdown Editor\n */\nexport const openMarkdownTool: PanelTool = {\n name: 'open_markdown',\n description: 'Opens a markdown file in the MDX editor panel',\n inputs: {\n type: 'object',\n properties: {\n filePath: {\n type: 'string',\n description: 'Path to the markdown file to open',\n },\n readOnly: {\n type: 'boolean',\n description: 'Whether to open the file in read-only mode',\n },\n },\n required: ['filePath'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n filePath: { type: 'string' },\n },\n },\n tags: ['markdown', 'mdx', 'editor'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'file-editing-panels:open-markdown',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const fileEditingPanelTools: PanelTool[] = [\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const fileEditingPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.file-editing-panels',\n name: 'File Editing Panels',\n description: 'Tools for file editing, git diff viewing, and markdown editing',\n tools: fileEditingPanelTools,\n};\n","/**\n * @industry-theme/file-editing-panels\n *\n * Git diff view and editor panels for dev workspaces.\n * These panels use the panel framework pattern with PanelComponentProps.\n */\n\nimport { FileEditorPanel } from './panels/FileEditorPanel';\nimport { GitDiffPanel } from './panels/GitDiffPanel';\nimport { MDXEditorPanel } from './panels/MDXEditorPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { fileEditingPanelTools, fileEditingPanelToolsMetadata } 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: 'industry-theme.file-editor',\n name: 'File Editor',\n icon: '📝',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Monaco-based code editor with syntax highlighting',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[0]], // openFileTool\n },\n component: FileEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'File Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('File Editor Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.git-diff',\n name: 'Git Diff',\n icon: '🔀',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Side-by-side git diff viewer',\n slices: ['git', 'fileTree'],\n tools: [fileEditingPanelTools[1]], // viewDiffTool\n },\n component: GitDiffPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'Git Diff Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Git Diff Panel unmounting');\n },\n },\n {\n metadata: {\n id: 'industry-theme.mdx-editor',\n name: 'MDX Editor',\n icon: '📄',\n version: '0.1.0',\n author: 'Industry Theme',\n description: 'Rich markdown/MDX editor with live preview',\n slices: ['active-file', 'fileTree'],\n tools: [fileEditingPanelTools[2]], // openMarkdownTool\n },\n component: MDXEditorPanel,\n\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'MDX Editor Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('MDX Editor Panel unmounting');\n },\n },\n];\n\n/**\n * Optional: Called once when the entire package is loaded.\n * Use this for package-level initialization.\n */\nexport const onPackageLoad = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package loaded - File Editing Panels');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - File Editing Panels');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/file-editing-panels/tools' to import without React dependencies.\n */\nexport {\n fileEditingPanelTools,\n fileEditingPanelToolsMetadata,\n openFileTool,\n viewDiffTool,\n openMarkdownTool,\n} from './tools';\n\n// Re-export panel components for direct usage\nexport { FileEditorPanel, FileEditorPanelPreview } from './panels/FileEditorPanel';\nexport { GitDiffPanel, GitDiffPanelPreview } from './panels/GitDiffPanel';\nexport { MDXEditorPanel, MDXEditorPanelPreview } from './panels/MDXEditorPanel';\n\n// Re-export types\nexport type { GitChangeStatus } from './types';\n\n// Re-export framework types for convenience\nexport type {\n PanelDefinition,\n PanelContextValue,\n PanelMetadata,\n PanelComponentProps,\n} from './types';\n"],"names":["__iconNode","_a","GitCommit"],"mappings":";;;;AAk2CA,IAAI;AACJ,IAAI,kBAAkB,MAAM;AAC1B,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,eAAe;AACrB,QAAI,CAAC,aAAa,+BAA+B;AAC/C,mBAAa,gCAAgC,cAAc,MAAS;AAAA,IACtE;AACA,WAAO,aAAa;AAAA,EACtB,OAAO;AACL,QAAI,CAAC,cAAc;AACjB,qBAAe,cAAc,MAAS;AAAA,IACxC;AACA,WAAO;AAAA,EACT;AACF;AACA,IAAI,wBAAwB,gBAAe;AAC3C,IAAI,WAAW,MAAM;AACnB,QAAM,UAAU,WAAW,qBAAqB;AAChD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AACT;ACx3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,MAAM,cAAc,CAAC,WAAW,OAAO,QAAQ,sBAAsB,OAAO,EAAE,YAAW;AACzF,MAAM,cAAc,CAAC,WAAW,OAAO;AAAA,EACrC;AAAA,EACA,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,YAAW,IAAK,GAAG,YAAW;AAC3D;AACA,MAAM,eAAe,CAAC,WAAW;AAC/B,QAAM,YAAY,YAAY,MAAM;AACpC,SAAO,UAAU,OAAO,CAAC,EAAE,YAAW,IAAK,UAAU,MAAM,CAAC;AAC9D;AACA,MAAM,eAAe,IAAI,YAAY,QAAQ,OAAO,CAAC,WAAW,OAAO,UAAU;AAC/E,SAAO,QAAQ,SAAS,KAAK,UAAU,KAAI,MAAO,MAAM,MAAM,QAAQ,SAAS,MAAM;AACvF,CAAC,EAAE,KAAK,GAAG,EAAE,KAAI;AACjB,MAAM,cAAc,CAAC,UAAU;AAC7B,aAAW,QAAQ,OAAO;AACxB,QAAI,KAAK,WAAW,OAAO,KAAK,SAAS,UAAU,SAAS,SAAS;AACnE,aAAO;AAAA,IACT;AAAA,EACF;AACF;ACzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,IAAI,oBAAoB;AAAA,EACtB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAClB;ACjBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,OAAO;AAAA,EACX,CAAC;AAAA,IACC,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,cAAc;AAAA,IACd;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACP,GAAK,QAAQ;AAAA,IACT;AAAA,IACA;AAAA,MACE;AAAA,MACA,GAAG;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,aAAa,sBAAsB,OAAO,WAAW,IAAI,KAAK,OAAO,IAAI,IAAI;AAAA,MAC7E,WAAW,aAAa,UAAU,SAAS;AAAA,MAC3C,GAAG,CAAC,YAAY,CAAC,YAAY,IAAI,KAAK,EAAE,eAAe,OAAM;AAAA,MAC7D,GAAG;AAAA,IACT;AAAA,IACI;AAAA,MACE,GAAG,SAAS,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,cAAc,KAAK,KAAK,CAAC;AAAA,MAC3D,GAAG,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ;AAAA,IACvD;AAAA,EACA;AACA;ACvCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,mBAAmB,CAAC,UAAU,aAAa;AAC/C,QAAM,YAAY;AAAA,IAChB,CAAC,EAAE,WAAW,GAAG,MAAK,GAAI,QAAQ,cAAc,MAAM;AAAA,MACpD;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT,UAAU,YAAY,aAAa,QAAQ,CAAC,CAAC;AAAA,QAC7C,UAAU,QAAQ;AAAA,QAClB;AAAA,MACR;AAAA,MACM,GAAG;AAAA,IACT,CAAK;AAAA,EACL;AACE,YAAU,cAAc,aAAa,QAAQ;AAC7C,SAAO;AACT;AC1BA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,eAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,2BAA2B,KAAK,SAAQ,CAAE;AAAA,EACxD,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAAA,EACxC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAAA,EACzC,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,SAAQ,CAAE;AAC3C;AACA,MAAM,WAAW,iBAAiB,aAAaA,YAAU;ACtBzD;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,eAAa;AAAA,EACjB,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,MAAM,GAAG,KAAK,KAAK,UAAU;AAAA,EACxD,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AAAA,EAChE,CAAC,QAAQ,EAAE,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AACpE;AACA,MAAM,sBAAsB,iBAAiB,yBAAyBA,YAAU;ACdhF;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAM,aAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAAA,EAC3C,CAAC,QAAQ,EAAE,GAAG,cAAc,KAAK,SAAQ,CAAE;AAC7C;AACA,MAAM,IAAI,iBAAiB,KAAK,UAAU;ACoB1C,MAAM,cAAc,CAAC,SAAyB;;AAC5C,QAAM,QAAM,UAAK,MAAM,GAAG,EAAE,IAAA,MAAhB,mBAAuB,kBAAiB;AACpD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,KAAK;AAAA,EAAA;AAEP,SAAO,YAAY,GAAG,KAAK;AAC7B;AAKA,MAAM,yBAAyD,CAAC;AAAA,EAC9D;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,aAAa,cAAc,IAAI,SAAiB,EAAE;AACzD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiB,EAAE;AAC7D,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AACtD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,oBAAoB,OAAsB,IAAI;AACpD,QAAM,cAAc,OAAO,KAAK;AAChC,QAAM,aAAa,OAAO,KAAK;AAG/B,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AACrC,QAAM,aAAa,QAAQ,yCAAY,SAAS;AAGhD,QAAM,kBAAkB,QAAQ,SAA0B,aAAa;AAGvE,QAAM,mBAAmB,QAAQ,SAA0B,aAAa;AACxE,QAAM,YAAU,0DAAkB,SAAlB,mBAAwB,YAAW;AAEnD,YAAU,MAAM;AACd,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,OAAO,CAAC;AAEZ,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,eAAW,KAAK;AAChB,gBAAY,KAAK;AACjB,gBAAY,UAAU;AACtB,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAC,QAAQ,CAAC;AAGb,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,sDAAsD,YAAY;AAC9E,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,YAAU,MAAM;;AACd,QAAI,CAAC,kBAAgBC,MAAA,mDAAiB,SAAjB,gBAAAA,IAAuB,OAAM;AAChD,kBAAY,gBAAgB,KAAK,IAAI;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,eAAc,wDAAiB,SAAjB,mBAAuB,IAAI,CAAC;AAG9C,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,aAAa,CAAC,UAAU;AACpD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,oBAAY,QAAQ,IAAI;AAAA,MAC1B;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,QAAM,WAAW,YAAY,YAAY;AACvC,QAAI,CAAC,YAAY,EAAC,yCAAY,WAAU;AACtC,wBAAkB,UAAU;AAC5B,qBAAe,EAAE;AACjB,uBAAiB,EAAE;AACnB,iBAAW,KAAK;AAChB,kBAAY,KAAK;AACjB,mBAAa,IAAI;AACjB;AAAA,IACF;AAEA,sBAAkB,UAAU;AAC5B,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,UAAU,MAAM,WAAW,SAAS,QAAQ;AAElD,UAAI,kBAAkB,YAAY,UAAU;AAC1C;AAAA,MACF;AAEA,UAAI,YAAY,MAAM;AACpB,uBAAe,OAAO;AACtB,qBAAa,IAAI;AACjB,YAAI,CAAC,WAAW,SAAS;AACvB,2BAAiB,OAAO;AACxB,qBAAW,KAAK;AAAA,QAClB;AAAA,MACF,OAAO;AACL,cAAM,IAAI,MAAM,qBAAqB;AAAA,MACvC;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAM,uBAAuB,GAAG;AACxC,UAAI,kBAAkB,YAAY,UAAU;AAC1C,iBAAS,eAAe,QAAQ,IAAI,UAAU,qBAAqB;AACnE,uBAAe,EAAE;AAAA,MACnB;AAAA,IACF,UAAA;AACE,UAAI,kBAAkB,YAAY,UAAU;AAC1C,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,YAAU,MAAM;AACd,aAAA;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,qBAAqB;AAAA,IACzB,CAAC,UAAmB;AAClB,YAAM,YAAY,SAAS;AAC3B,uBAAiB,SAAS;AAC1B,iBAAW,cAAc,WAAW;AACpC,UAAI,WAAW;AACb,qBAAa,IAAI;AAAA,MACnB;AAAA,IACF;AAAA,IACA,CAAC,aAAa,SAAS;AAAA,EAAA;AAGzB,QAAM,mBAAmB;AAAA,IACvB,OAAO,UAAmB;AACxB,UAAI,CAAC,YAAY,EAAC,yCAAY,YAAW;AACvC;AAAA,MACF;AAEA,YAAM,gBAAgB,SAAS;AAE/B,UAAI,CAAC,WAAW,kBAAkB,aAAa;AAC7C;AAAA,MACF;AAEA,kBAAY,UAAU;AACtB,kBAAY,IAAI;AAChB,mBAAa,IAAI;AAEjB,UAAI;AACF,cAAM,WAAW,UAAU,UAAU,aAAa;AAElD,YAAI,kBAAkB,YAAY,UAAU;AAC1C,yBAAe,aAAa;AAC5B,2BAAiB,aAAa;AAC9B,qBAAW,KAAK;AAGhB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,KAAK,IAAA;AAAA,YAChB,SAAS,EAAE,MAAM,SAAA;AAAA,UAAS,CAC3B;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,kBAAkB,YAAY,UAAU;AAC1C;AAAA,YACE,eAAe,QAAQ,IAAI,UAAU;AAAA,UAAA;AAAA,QAEzC;AAAA,MACF,UAAA;AACE,YAAI,kBAAkB,YAAY,UAAU;AAC1C,sBAAY,KAAK;AAAA,QACnB;AACA,oBAAY,UAAU;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,eAAe,aAAa,UAAU,SAAS,YAAY,MAAM;AAAA,EAAA;AAGpE,QAAM,cAAc,YAAY,MAAM;AACpC,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,KAAK,IAAA;AAAA,MAChB,SAAS,EAAE,MAAM,SAAA;AAAA,IAAS,CAC3B;AACD,gBAAY,IAAI;AAAA,EAClB,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,QAAM,YAAW,qCAAU,MAAM,KAAK,UAAS,YAAY;AAC3D,QAAM,WAAW,WAAW,YAAY,QAAQ,IAAI;AAEpD,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,eAAe;AAAA,UACf,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,UACnE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,YAAY;AAAA,gBACZ,cAAc;AAAA,gBACd,OAAO,MAAM,OAAO;AAAA,cAAA;AAAA,cAEvB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,oBAAC,OAAA,EAAI,OAAO,EAAE,UAAU,MAAM,UAAU,CAAC,KAAK,UAAA,gCAAA,CAE9C;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,iBAAiB,MAAM,OAAO;AAAA,MAAA;AAAA,MAIhC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc,aAAa,MAAM,OAAO,MAAM;AAAA,cAC9C,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,iBAAiB,MAAM,OAAO;AAAA,cAC9B,YAAY,MAAM,MAAM;AAAA,cACxB,YAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,kBAAA;AAAA,kBAGZ,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,OAAO,EAAE,OAAO,MAAM,OAAO,SAAS,YAAY,EAAA;AAAA,sBAAE;AAAA,oBAAA;AAAA,oBAEtD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,YAAY;AAAA,0BACZ,OAAO,MAAM,OAAO;AAAA,0BACpB,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,cAAc;AAAA,wBAAA;AAAA,wBAEhB,OAAO;AAAA,wBAEN,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,cACC,qBAAA,UAAA,EACG,UAAA;AAAA,sBAAA,YACC;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,4BAAA;AAAA,4BACe;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA,IAEd,WACF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA,IAGC,UACF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA,IAID;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,MAAM,OAAO;AAAA,4BACpB,UAAU,MAAM,UAAU,CAAC;AAAA,0BAAA;AAAA,0BAE9B,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAIH;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS,MAAM,KAAK,iBAAA;AAAA,0BACpB,UAAU,CAAC,WAAW;AAAA,0BACtB,OAAO;AAAA,4BACL,iBAAiB,MAAM,OAAO;AAAA,4BAC9B,OAAO,MAAM,OAAO;AAAA,4BACpB,QAAQ;AAAA,4BACR,cAAc;AAAA,4BACd,SAAS;AAAA,4BACT,UAAU,MAAM,UAAU,CAAC;AAAA,4BAC3B,QAAQ,CAAC,WAAW,WAAW,gBAAgB;AAAA,4BAC/C,SAAS,CAAC,WAAW,WAAW,MAAM;AAAA,4BACtC,YAAY;AAAA,0BAAA;AAAA,0BAEf,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAED,GACF;AAAA,oBAED,YAAY,mBACX;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,SAAS;AAAA,wBACT,OAAO;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,QAAQ;AAAA,0BACR,OAAO,MAAM,OAAO;AAAA,0BACpB,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,gBAAgB;AAAA,0BAChB,cAAc;AAAA,0BACd,YAAY;AAAA,wBAAA;AAAA,wBAEd,cAAc,CAAC,MAAM;AACnB,4BAAE,cAAc,MAAM,kBACpB,MAAM,OAAO;AAAA,wBACjB;AAAA,wBACA,cAAc,CAAC,MAAM;AACnB,4BAAE,cAAc,MAAM,kBAAkB;AAAA,wBAC1C;AAAA,wBAEA,UAAA,oBAAC,GAAA,EAAE,MAAM,GAAA,CAAI;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACf;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAIF,oBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAA,GAC/B,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,cAAA;AAAA,cACS;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,IAGV;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP;AAAA,YACA,SAAS,aAAa,UAAU;AAAA,YAChC,SAAS;AAAA,cACP,UAAU,CAAC;AAAA,cACX,SAAS,EAAE,SAAS,MAAA;AAAA,cACpB,aAAa;AAAA,cACb,sBAAsB;AAAA,cACtB,UAAU;AAAA,cACV,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,iBAAiB;AAAA,cACjB,SAAS;AAAA,cACT,kBAAkB;AAAA,cAClB,WAAW;AAAA,gBACT,UAAU;AAAA,gBACV,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,uBAAuB;AAAA,gBACvB,yBAAyB;AAAA,cAAA;AAAA,YAC3B;AAAA,YAEF,QAAO;AAAA,YACP,UAAU,aAAa,qBAAqB;AAAA,YAC5C,QAAQ,aAAa,mBAAmB;AAAA,UAAA;AAAA,QAAA,EAC1C,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAWO,MAAM,kBAAkD,CAAC,UAAU;AACxE,SAAO,oBAAC,wBAAA,EAAwB,GAAG,MAAA,CAAO;AAC5C;AAEO,MAAM,yBAAmC,MAAM;AACpD,QAAM,EAAE,MAAA,IAAU,SAAA;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,MAAM,UAAU,CAAC;AAAA,QAC3B,OAAO,MAAM,OAAO;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAA,qBAAC,OAAA,EACC,UAAA;AAAA,UAAA,oBAAC,UAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,UAAM;AAAA,UAAQ;AAAA,8BAChD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,YAAQ;AAAA,UAAQ;AAAA,8BAClD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,SAAK;AAAA,UAAO;AAAA,UAAI;AAAA,QAAA,GACrD;AAAA,6BACC,OAAA,EAAI,OAAO,EAAE,aAAa,UAAU,UAAA;AAAA,UAAA;AAAA,8BAC1B,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,OAAG;AAAA,UAAO;AAAA,8BACpD,QAAA,EAAK,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,WAAO;AAAA,UAAO;AAAA,QAAA,GACnD;AAAA,QACA,oBAAC,SAAK,UAAA,IAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGhB;ACniBA,MAAM,aAGF;AAAA,EACF,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,UAAU;AAAA,IACR,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,WAAW;AAAA,IACT,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB;AAEA,MAAM,mBAAmB,CAAC,aAAoC;;AAC5D,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,QAAM,cAAS,MAAM,GAAG,EAAE,IAAA,MAApB,mBAA2B,kBAAiB;AACxD,QAAM,cAAsC;AAAA,IAC1C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,IACL,GAAG;AAAA,IACH,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAGP,SAAO,YAAY,GAAG,KAAK;AAC7B;AAmCA,MAAM,sBAAmD,CAAC;AAAA,EACxD;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA0B,UAAU;AAChE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAiB,EAAE;AACjE,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAiB,EAAE;AACjE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,QAAM,WAAW,QAAQ,MAAM,iBAAiB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAGrE,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AAGrC,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,mDAAmD,YAAY;AAC3E,kBAAY,YAAY;AACxB,gBAAU,iBAAiB,UAAU;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,cAAc,aAAa,CAAC;AAGhC,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,YAAY,CAAC,UAAU;AACnD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,oBAAY,QAAQ,IAAI;AACxB,kBAAU,QAAQ,UAAU,UAAU;AAEtC,YAAI,QAAQ,aAAa,UAAa,QAAQ,aAAa,QAAW;AACpE,6BAAmB,QAAQ,YAAY,EAAE;AACzC,6BAAmB,QAAQ,YAAY,EAAE;AACzC,uBAAa,KAAK;AAClB,mBAAS,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,QAAQ,YAAY,CAAC;AAGzB,YAAU,MAAM;AACd,QAAI,WAAW;AAEf,UAAM,WAAW,YAAY;AAC3B,UAAI,CAAC,UAAU;AACb,2BAAmB,EAAE;AACrB,2BAAmB,EAAE;AACrB,qBAAa,KAAK;AAClB,iBAAS,IAAI;AACb;AAAA,MACF;AAGA,UAAI,EAAC,yCAAY,WAAU;AAEzB;AAAA,MACF;AAEA,mBAAa,IAAI;AACjB,eAAS,IAAI;AAEb,UAAI;AAGF,cAAM,WAAW,MAAM,WAAW,SAAS,QAAQ;AAEnD,YAAI,CAAC,SAAU;AAEf,2BAAmB,YAAY,EAAE;AAGjC,YAAI,WAAW,aAAa;AAC1B,6BAAmB,EAAE;AAAA,QACvB;AAAA,MACF,SAAS,KAAK;AACZ,YAAI,CAAC,SAAU;AAEf,gBAAQ,MAAM,4BAA4B,GAAG;AAC7C;AAAA,UACE,eAAe,QACX,wBAAwB,IAAI,OAAO,KACnC;AAAA,QAAA;AAEN,2BAAmB,EAAE;AACrB,2BAAmB,EAAE;AAAA,MACvB,UAAA;AACE,YAAI,UAAU;AACZ,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,SAAA;AAEL,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG,CAAC,UAAU,QAAQ,UAAU,CAAC;AAEjC,QAAM,cAAc,MAAM;AACxB,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,WAAW,KAAK,IAAA;AAAA,MAChB,SAAS,EAAE,MAAM,SAAA;AAAA,IAAS,CAC3B;AACD,gBAAY,IAAI;AAAA,EAClB;AAEA,QAAM,aAAa,SAAS,WAAW,MAAM,IAAI;AACjD,QAAM,cAAc,QAAQ,MAAM;AAChC,QAAI,CAAC,OAAQ,QAAO,MAAM,OAAO;AAEjC,YAAQ,QAAA;AAAA,MACN,KAAK;AACH,eAAO,MAAM,OAAO,WAAW;AAAA,MACjC,KAAK;AACH,eAAO,MAAM,OAAO,WAAW;AAAA,MACjC,KAAK;AACH,eAAO,MAAM,OAAO,QAAQ,MAAM,OAAO,WAAW;AAAA,MACtD,KAAK;AACH,eAAO,MAAM,OAAO,SAAS;AAAA,MAC/B;AACE,eAAO,MAAM,OAAO;AAAA,IAAA;AAAA,EAE1B,GAAG,CAAC,QAAQ,MAAM,MAAM,CAAC;AAEzB,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,OAAO,MAAM,OAAO;AAAA,UACpB,iBAAiB,MAAM,OAAO;AAAA,UAC9B,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,iBAAiB,MAAM,OAAO;AAAA,MAAA;AAAA,MAGhC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,cAAc,aAAa,MAAM,OAAO,MAAM;AAAA,cAC9C,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,iBAAiB,MAAM,OAAO;AAAA,cAC9B,YAAY,MAAM,MAAM;AAAA,cACxB,YAAY;AAAA,cACZ,WAAW;AAAA,YAAA;AAAA,YAGb,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,kBAAA;AAAA,kBAGZ,UAAA;AAAA,oBAAA;AAAA,sBAACC;AAAAA,sBAAA;AAAA,wBACC,MAAM;AAAA,wBACN,OAAO,EAAE,OAAO,MAAM,OAAO,SAAS,YAAY,EAAA;AAAA,sBAAE;AAAA,oBAAA;AAAA,oBAEtD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,YAAY;AAAA,0BACZ,OAAO,MAAM,OAAO;AAAA,0BACpB,YAAY;AAAA,0BACZ,UAAU;AAAA,0BACV,cAAc;AAAA,wBAAA;AAAA,wBAEhB,OAAO;AAAA,wBAEN,WAAA,qCAAU,MAAM,KAAK,UAAS;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEhC,cACC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,UAAU,MAAM,UAAU,CAAC;AAAA,0BAC3B,SAAS;AAAA,0BACT,cAAc;AAAA,0BACd,iBAAiB,GAAG,WAAW;AAAA,0BAC/B,OAAO;AAAA,0BACP,QAAQ,aAAa,WAAW;AAAA,0BAChC,YAAY;AAAA,0BACZ,YAAY;AAAA,wBAAA;AAAA,wBAGb,UAAA,WAAW;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACd;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGH,mBACC;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS;AAAA,kBACT,OAAO;AAAA,oBACL,YAAY;AAAA,oBACZ,QAAQ;AAAA,oBACR,SAAS;AAAA,oBACT,QAAQ;AAAA,oBACR,OAAO,MAAM,OAAO;AAAA,oBACpB,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,cAAc;AAAA,oBACd,YAAY;AAAA,oBACZ,YAAY;AAAA,kBAAA;AAAA,kBAEd,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBACpB,MAAM,OAAO;AAAA,kBACjB;AAAA,kBACA,cAAc,CAAC,MAAM;AACnB,sBAAE,cAAc,MAAM,kBAAkB;AAAA,kBAC1C;AAAA,kBAEA,UAAA,oBAAC,GAAA,EAAE,MAAM,GAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YACf;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,oBAAC,SAAI,OAAO,EAAE,MAAM,GAAG,WAAW,EAAA,GAC/B,UAAA,YACC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAE3B,UAAA;AAAA,UAAA;AAAA,QAAA,IAGC,QACF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO,MAAM,OAAO;AAAA,cACpB,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY,MAAM,MAAM;AAAA,YAAA;AAAA,YAGzB,UAAA;AAAA,UAAA;AAAA,QAAA,IAGH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,YACA,QAAO;AAAA,YACP,SAAS;AAAA,cACP,kBAAkB;AAAA,cAClB,UAAU;AAAA,cACV,SAAS,EAAE,SAAS,MAAA;AAAA,cACpB,iBAAiB;AAAA,cACjB,kBAAkB;AAAA,cAClB,wBAAwB;AAAA,cACxB,sBAAsB;AAAA,cACtB,eAAe;AAAA,cACf,WAAW;AAAA,gBACT,YAAY;AAAA,gBACZ,UAAU;AAAA,gBACV,YAAY;AAAA,cAAA;AAAA,YACd;AAAA,YAEF,kBACE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,QAAQ;AAAA,kBACR,SAAS;AAAA,kBACT,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,OAAO,MAAM,OAAO;AAAA,gBAAA;AAAA,gBAEvB,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA,EAEJ,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAUO,MAAM,eAA4C,CAAC,UAAU;AAClE,SAAO,oBAAC,qBAAA,EAAqB,GAAG,MAAA,CAAO;AACzC;AAEO,MAAM,sBAAgC,MAAM;AACjD,QAAM,EAAE,MAAA,IAAU,SAAA;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,UAAU,MAAM,UAAU,CAAC;AAAA,QAC3B,OAAO,MAAM,OAAO;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,KAAK;AAAA,QACL,YAAY,MAAM,MAAM;AAAA,MAAA;AAAA,MAG1B,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,KAAK;AAAA,YAAA;AAAA,YAGP,UAAA,oBAAC,UAAK,OAAO,EAAE,OAAO,MAAM,OAAO,iBAAiB,UAAA,aAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,4BAE/D,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,6BAAyB;AAAA,4BAC1D,OAAA,EAAI,OAAO,EAAE,OAAO,UAAA,GAAa,UAAA,6BAAyB;AAAA,QAC3D,oBAAC,SAAI,OAAO,EAAE,OAAO,MAAM,OAAO,cAAA,GAAiB,UAAA,iBAAA,CAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGvE;ACraA,MAAM,wBAAuD,CAAC;AAAA,EAC5D;AAAA,EACA,SAAS;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,kBAAkB;AACpB,MAAM;;AACJ,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAC3C,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAwB,IAAI;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAwB,IAAI;AAChE,QAAM,CAAC,UAAU,UAAU,IAAI,SAAkB,KAAK;AAGtD,QAAM,cAAa,aAAQ,aAAR,mBAAkB;AACrC,QAAM,aAAa,QAAQ,yCAAY,SAAS;AAGhD,QAAM,kBAAkB,QAAQ,SAA0B,aAAa;AAGvE,QAAM,UAAU;AAAA,IACd,MAAM;AAAA,MACJ,eAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAY;AAAA,QACV,oBAAoB,OAAO,SAAS;AAClC,kBAAQ,KAAK,gCAAgC,KAAK,IAAI;AACtD,iBAAO;AAAA,QACT;AAAA,MAAA,CACD;AAAA,MACD,YAAA;AAAA,MACA,gBAAgB,EAAE,0BAA0B,cAAc;AAAA,MAC1D,iBAAiB;AAAA,QACf,oBAAoB;AAAA,UAClB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,KAAK;AAAA,UACL,GAAG;AAAA,UACH,KAAK;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,UACV,MAAM;AAAA,UACN,OAAO;AAAA,UACP,KAAK;AAAA,QAAA;AAAA,MACP,CACD;AAAA,MACD,kBAAA;AAAA,MACA,iBAAiB;AAAA,QACf,UAAU,aAAa,WAAW;AAAA,MAAA,CACnC;AAAA,MACD,cAAc;AAAA,QACZ,iBAAiB,MACf,oBAAA,UAAA,EACE,UAAA,qBAAC,yBAAA,EACC,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS;AAAA,8BACT,iBAAA,EAAgB;AAAA,8BAChB,4BAAA,EAA2B;AAAA,8BAC3B,YAAA,EAAW;AAAA,8BACX,YAAA,EAAW;AAAA,8BACX,aAAA,EAAY;AAAA,8BACZ,aAAA,EAAY;AAAA,8BACZ,qBAAA,EAAoB;AAAA,8BACpB,aAAA,CAAA,CAAY;AAAA,QAAA,EAAA,CACf,EAAA,CACF;AAAA,MAAA,CAEH;AAAA,IAAA;AAAA,IAEH,CAAC,UAAU;AAAA,EAAA;AAGb,YAAU,MAAM;AACd,iBAAa,IAAI;AAAA,EACnB,GAAG,CAAA,CAAE;AAGL,YAAU,MAAM;AACd,QAAI,cAAc;AAChB,cAAQ,IAAI,qDAAqD,YAAY;AAC7E,kBAAY,YAAY;AAAA,IAC1B;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAGjB,YAAU,MAAM;;AACd,QAAI,CAAC,cAAc;AACjB,YAAM,QAAOD,MAAA,mDAAiB,SAAjB,gBAAAA,IAAuB;AACpC,UAAI,SAAS,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,IAAI;AAC3D,oBAAY,IAAI;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,eAAc,wDAAiB,SAAjB,mBAAuB,IAAI,CAAC;AAG9C,YAAU,MAAM;AACd,QAAI,cAAc;AAEhB,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,OAAO,GAAG,aAAa,CAAC,UAAU;AACpD,YAAM,UAAU,MAAM;AACtB,UAAI,mCAAS,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,GAAG;AACjD,sBAAY,IAAI;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,cAAc,MAAM,CAAC;AAEzB,QAAM,eAAe,YAAY,CAAC,UAAkB;AAClD,gBAAY,KAAK;AACjB,eAAW,IAAI;AACf,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAA,CAAE;AAEL,QAAM,aAAa;AAAA,IACjB,OAAO,YAAqB;AAC1B,YAAM,gBAAgB,WAAW;AAEjC,UAAI,aAAY,yCAAY,YAAW;AACrC,YAAI;AACF,gBAAM,WAAW,UAAU,UAAU,aAAa;AAClD,qBAAW,KAAK;AAGhB,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,WAAW,KAAK,IAAA;AAAA,YAChB,SAAS,EAAE,MAAM,SAAA;AAAA,UAAS,CAC3B;AAAA,QACH,SAAS,OAAO;AACd,kBAAQ,MAAM,sBAAsB,KAAK;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU,UAAU,YAAY,MAAM;AAAA,EAAA;AAIzC,YAAU,MAAM;AACd,UAAM,kBAAkB,YAAY;AAClC,UAAI,CAAC,YAAY,EAAC,yCAAY,WAAU;AACtC,oBAAY,EAAE;AACd;AAAA,MACF;AAEA,mBAAa,IAAI;AACjB,mBAAa,IAAI;AAEjB,UAAI;AACF,cAAM,UAAU,MAAM,WAAW,SAAS,QAAQ;AAElD,YAAI,YAAY,MAAM;AACpB,sBAAY,OAAO;AACnB,wBAAc,IAAI;AAClB,qBAAW,KAAK;AAAA,QAClB,OAAO;AACL,gBAAM,IAAI,MAAM,qBAAqB;AAAA,QACvC;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,uBAAuB,KAAK;AAC1C,qBAAa,wBAAwB,QAAQ,EAAE;AAC/C,oBAAY,EAAE;AACd,sBAAc,IAAI;AAAA,MACpB,UAAA;AACE,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,oBAAA;AAAA,EACF,GAAG,CAAC,UAAU,UAAU,CAAC;AAGzB,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AAEjB,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;AAC7C,UAAE,eAAA;AACF,mBAAA;AAAA,MACF;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,YAAY,UAAU,CAAC;AAE3B,MAAI,CAAC,WAAW;AACd,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAE3B,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIL;AAEA,MAAI,WAAW;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,SAAI,OAAO,EAAE,cAAc,OAAA,GAAU,UAAA,WAAO;AAAA,UAC7C,oBAAC,SAAK,UAAA,UAAA,CAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGtB;AAEA,MAAI,CAAC,UAAU;AACb,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,QAAQ;AAAA,UACR,OAAO,MAAM,OAAO;AAAA,UACpB,SAAS;AAAA,UACT,WAAW;AAAA,UACX,YAAY,MAAM,MAAM;AAAA,QAAA;AAAA,QAG1B,UAAA;AAAA,UAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,UACnE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,YAAY;AAAA,gBACZ,OAAO,MAAM,OAAO;AAAA,cAAA;AAAA,cAEvB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,QAAQ;AAAA,gBACR,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,UAAU;AAAA,cAAA;AAAA,cAEb,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAEA,QAAM,eACJ,OAAO,aAAa,WAAW,WAAW,OAAO,YAAY,EAAE;AAGjE,QAAM,iBAAiB,oBAAoB,KAAK;AAChD,QAAM,qBAAqB;AAAA,IACzB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,GAAG,OAAO;AAAA,MACR,OAAO,QAAQ,cAAc,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,CAAC;AAAA,IAAA;AAAA,EACnE;AAGF,QAAM,gBACJ,oBAAC,OAAA,EAAI,OAAO,oBACV,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU,CAAC;AAAA,MACX,0BAAyB;AAAA,MACzB;AAAA,IAAA;AAAA,IALK,YAAY;AAAA,EAAA,GAOrB;AAGF,MAAI,YAAY;AACd,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,eAAe;AAAA,UACf,QAAQ;AAAA,QAAA;AAAA,QAGV,UAAA;AAAA,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,SAAS;AAAA,gBACT,iBAAiB,MAAM,OAAO,WAAW;AAAA,gBACzC,OAAO,MAAM,OAAO;AAAA,gBACpB,UAAU,MAAM,UAAU,CAAC;AAAA,gBAC3B,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,KAAK;AAAA,cAAA;AAAA,cAGP,UAAA;AAAA,gBAAA,oBAAC,UAAK,UAAA,UAAA,CAAO;AAAA,qCACZ,QAAA,EACE,UAAA;AAAA,kBAAA;AAAA,kBAAW;AAAA,gBAAA,EAAA,CAEd;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,8BAED,OAAA,EAAI,OAAO,EAAE,MAAM,EAAA,GAAM,UAAA,cAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAG9C;AAEA,SAAO;AACT;AAWO,MAAM,iBAAgD,CAAC,UAAU;AACtE,SAAO,oBAAC,uBAAA,EAAuB,GAAG,MAAA,CAAO;AAC3C;AAEO,MAAM,wBAAkC,MAAM;AACnD,QAAM,EAAE,MAAA,IAAU,SAAA;AAClB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,QAAQ,aAAa,MAAM,OAAO,MAAM;AAAA,QACxC,cAAc;AAAA,QACd,SAAS;AAAA,MAAA;AAAA,MAGX,UAAA;AAAA,QAAA,oBAAC,UAAA,EAAS,MAAM,IAAI,OAAO,EAAE,cAAc,QAAQ,SAAS,IAAA,EAAI,CAAG;AAAA,QACnE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,YAAY;AAAA,cACZ,OAAO,MAAM,OAAO;AAAA,cACpB,cAAc;AAAA,YAAA;AAAA,YAEjB,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,UAAU,MAAM,UAAU,CAAC;AAAA,cAC3B,OAAO,MAAM,OAAO;AAAA,cACpB,WAAW;AAAA,YAAA;AAAA,YAEd,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA;AAGN;AClcO,MAAM,eAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,QAAQ,UAAU,MAAM;AAAA,EAC/B,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,eAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,MAAM,CAAC,UAAU,YAAY,aAAa,SAAS;AAAA,QACnD,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,OAAO,QAAQ,MAAM;AAAA,EAC5B,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,mBAA8B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,UAAU;AAAA,QACR,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAEF,UAAU,CAAC,UAAU;AAAA,EAAA;AAAA,EAEvB,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAA;AAAA,MACjB,UAAU,EAAE,MAAM,SAAA;AAAA,IAAS;AAAA,EAC7B;AAAA,EAEF,MAAM,CAAC,YAAY,OAAO,QAAQ;AAAA,EAClC,oBAAoB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA,EAAA;AAEhB;AAKO,MAAM,wBAAqC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AACF;AAKO,MAAM,gCAAoD;AAAA,EAC/D,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,aAAa;AAAA,EACb,OAAO;AACT;ACvHO,MAAM,SAA4B;AAAA,EACvC;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe,UAAU;AAAA,MAClC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,8BAA8B;AAAA,IAC5C;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO,UAAU;AAAA,MAC1B,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,2BAA2B;AAAA,IACzC;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe,UAAU;AAAA,MAClC,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAAA;AAAA,IAAA;AAAA,IAElC,WAAW;AAAA,IAEX,SAAS,OAAO,YAA+B;;AAE7C,cAAQ;AAAA,QACN;AAAA,SACA,aAAQ,aAAa,eAArB,mBAAiC;AAAA,MAAA;AAAA,IAErC;AAAA,IAEA,WAAW,OAAO,aAAgC;AAEhD,cAAQ,IAAI,6BAA6B;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAMO,MAAM,gBAAgB,YAAY;AAEvC,UAAQ,IAAI,4CAA4C;AAC1D;AAMO,MAAM,kBAAkB,YAAY;AAEzC,UAAQ,IAAI,+CAA+C;AAC7D;","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|