@industry-theme/backlogmd-kanban-panel 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useKanbanData.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/hooks/useKanbanData.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,IAAI,EAAwB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtE,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,4CAA4C;AAC5C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;AAEjD,wCAAwC;AACxC,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAG9D,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,8CAA8C;IAC9C,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,kCAAkC;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,mDAAmD;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"useKanbanData.d.ts","sourceRoot":"","sources":["../../../../src/panels/kanban/hooks/useKanbanData.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,KAAK,IAAI,EAAwB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtE,kCAAkC;AAClC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,4CAA4C;AAC5C,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,WAAW,CAAC;AAEjD,wCAAwC;AACxC,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAG9D,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,8CAA8C;IAC9C,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,kCAAkC;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvC,mDAAmD;IACnD,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAED,UAAU,oBAAoB;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,mBAAmB,CAwVrB"}
|
package/dist/panels.bundle.js
CHANGED
|
@@ -1403,8 +1403,9 @@ function useKanbanData(options) {
|
|
|
1403
1403
|
activeFilePathRef.current = null;
|
|
1404
1404
|
}
|
|
1405
1405
|
}, []);
|
|
1406
|
+
const fileTreeVersionRef = useRef(null);
|
|
1406
1407
|
const loadBacklogData = useCallback(async () => {
|
|
1407
|
-
var _a;
|
|
1408
|
+
var _a, _b;
|
|
1408
1409
|
if (!context || !actions) {
|
|
1409
1410
|
console.log("[useKanbanData] No context provided");
|
|
1410
1411
|
setIsBacklogProject(false);
|
|
@@ -1413,21 +1414,29 @@ function useKanbanData(options) {
|
|
|
1413
1414
|
setColumnStates(/* @__PURE__ */ new Map());
|
|
1414
1415
|
setIsLoading(false);
|
|
1415
1416
|
coreRef.current = null;
|
|
1417
|
+
fileTreeVersionRef.current = null;
|
|
1418
|
+
return;
|
|
1419
|
+
}
|
|
1420
|
+
const fileTreeSlice = context.getRepositorySlice("fileTree");
|
|
1421
|
+
if (!((_a = fileTreeSlice == null ? void 0 : fileTreeSlice.data) == null ? void 0 : _a.allFiles)) {
|
|
1422
|
+
console.log("[useKanbanData] FileTree not available");
|
|
1423
|
+
setIsBacklogProject(false);
|
|
1424
|
+
setTasks([]);
|
|
1425
|
+
setTasksBySource(/* @__PURE__ */ new Map());
|
|
1426
|
+
setColumnStates(/* @__PURE__ */ new Map());
|
|
1427
|
+
coreRef.current = null;
|
|
1428
|
+
fileTreeVersionRef.current = null;
|
|
1429
|
+
return;
|
|
1430
|
+
}
|
|
1431
|
+
const currentVersion = fileTreeSlice.data.sha || ((_b = fileTreeSlice.data.metadata) == null ? void 0 : _b.sourceSha) || "unknown";
|
|
1432
|
+
if (coreRef.current && fileTreeVersionRef.current === currentVersion) {
|
|
1433
|
+
console.log("[useKanbanData] Data already loaded for this file tree version, skipping");
|
|
1434
|
+
setIsLoading(false);
|
|
1416
1435
|
return;
|
|
1417
1436
|
}
|
|
1418
1437
|
setIsLoading(true);
|
|
1419
1438
|
setError(null);
|
|
1420
1439
|
try {
|
|
1421
|
-
const fileTreeSlice = context.getRepositorySlice("fileTree");
|
|
1422
|
-
if (!((_a = fileTreeSlice == null ? void 0 : fileTreeSlice.data) == null ? void 0 : _a.allFiles)) {
|
|
1423
|
-
console.log("[useKanbanData] FileTree not available");
|
|
1424
|
-
setIsBacklogProject(false);
|
|
1425
|
-
setTasks([]);
|
|
1426
|
-
setTasksBySource(/* @__PURE__ */ new Map());
|
|
1427
|
-
setColumnStates(/* @__PURE__ */ new Map());
|
|
1428
|
-
coreRef.current = null;
|
|
1429
|
-
return;
|
|
1430
|
-
}
|
|
1431
1440
|
const files = fileTreeSlice.data.allFiles;
|
|
1432
1441
|
const filePaths = files.map((f) => f.path);
|
|
1433
1442
|
const fs = new PanelFileSystemAdapter({
|
|
@@ -1490,6 +1499,7 @@ function useKanbanData(options) {
|
|
|
1490
1499
|
console.log(
|
|
1491
1500
|
`[useKanbanData] Loaded ${allTasks.length}/${totalTasks} tasks (active: ${tasksLimit}, completed: ${completedLimit})`
|
|
1492
1501
|
);
|
|
1502
|
+
fileTreeVersionRef.current = currentVersion;
|
|
1493
1503
|
setTasks(allTasks);
|
|
1494
1504
|
setTasksBySource(newTasksBySource);
|
|
1495
1505
|
setColumnStates(newColumnStates);
|
|
@@ -1501,6 +1511,7 @@ function useKanbanData(options) {
|
|
|
1501
1511
|
setTasksBySource(/* @__PURE__ */ new Map());
|
|
1502
1512
|
setColumnStates(/* @__PURE__ */ new Map());
|
|
1503
1513
|
coreRef.current = null;
|
|
1514
|
+
fileTreeVersionRef.current = null;
|
|
1504
1515
|
} finally {
|
|
1505
1516
|
setIsLoading(false);
|
|
1506
1517
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panels.bundle.js","sources":["../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/folder-plus.js","../node_modules/lucide-react/dist/esm/icons/kanban.js","../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/@backlog-md/core/dist/markdown/index.js","../node_modules/@backlog-md/core/dist/core/config-parser.js","../node_modules/@backlog-md/core/dist/utils/sorting.js","../node_modules/@backlog-md/core/dist/core/Core.js","../src/adapters/PanelFileSystemAdapter.ts","../src/panels/kanban/hooks/useKanbanData.ts","../src/panels/kanban/components/KanbanColumn.tsx","../src/panels/kanban/components/EmptyState.tsx","../src/panels/KanbanPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 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 [\"path\", { d: \"M12 10v6\", key: \"1bos4e\" }],\n [\"path\", { d: \"M9 13h6\", key: \"1uhe8q\" }],\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst FolderPlus = createLucideIcon(\"folder-plus\", __iconNode);\n\nexport { __iconNode, FolderPlus as default };\n//# sourceMappingURL=folder-plus.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 3v14\", key: \"9nsxs2\" }],\n [\"path\", { d: \"M12 3v8\", key: \"1h2ygw\" }],\n [\"path\", { d: \"M19 3v18\", key: \"1sk56x\" }]\n];\nconst Kanban = createLucideIcon(\"kanban\", __iconNode);\n\nexport { __iconNode, Kanban as default };\n//# sourceMappingURL=kanban.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","// 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 * Markdown parsing and serialization for @backlog-md/core\n *\n * This module handles conversion between markdown files and Task objects.\n */\n/**\n * Parse task markdown content into a Task object\n *\n * @param content - Raw markdown content\n * @param filePath - Path to the file (for extracting ID from filename)\n * @returns Parsed task object\n */\nexport function parseTaskMarkdown(content, filePath) {\n const { frontmatter, title, rawContent, acceptanceCriteria, description } = parseMarkdownContent(content);\n const id = extractIdFromPath(filePath);\n return {\n id,\n title: title || `Task ${id}`,\n status: frontmatter.status || \"backlog\",\n priority: frontmatter.priority,\n assignee: frontmatter.assignee || [],\n reporter: frontmatter.reporter,\n createdDate: frontmatter.createdDate || new Date().toISOString().split(\"T\")[0],\n updatedDate: frontmatter.updatedDate,\n labels: frontmatter.labels || [],\n milestone: frontmatter.milestone,\n dependencies: frontmatter.dependencies || [],\n parentTaskId: frontmatter.parentTaskId,\n subtasks: frontmatter.subtasks,\n branch: frontmatter.branch,\n ordinal: frontmatter.ordinal,\n rawContent,\n description,\n acceptanceCriteriaItems: acceptanceCriteria,\n filePath,\n };\n}\n/**\n * Serialize a Task object to markdown content\n *\n * @param task - Task to serialize\n * @returns Markdown string\n */\nexport function serializeTaskMarkdown(task) {\n const lines = [];\n // Frontmatter\n lines.push(\"---\");\n lines.push(`status: ${task.status}`);\n if (task.priority) {\n lines.push(`priority: ${task.priority}`);\n }\n if (task.assignee && task.assignee.length > 0) {\n lines.push(`assignee: [${task.assignee.join(\", \")}]`);\n }\n if (task.reporter) {\n lines.push(`reporter: ${task.reporter}`);\n }\n if (task.labels && task.labels.length > 0) {\n lines.push(`labels: [${task.labels.join(\", \")}]`);\n }\n if (task.milestone) {\n lines.push(`milestone: ${task.milestone}`);\n }\n if (task.dependencies && task.dependencies.length > 0) {\n lines.push(`dependencies: [${task.dependencies.join(\", \")}]`);\n }\n if (task.parentTaskId) {\n lines.push(`parentTaskId: ${task.parentTaskId}`);\n }\n if (task.subtasks && task.subtasks.length > 0) {\n lines.push(`subtasks: [${task.subtasks.join(\", \")}]`);\n }\n if (task.branch) {\n lines.push(`branch: ${task.branch}`);\n }\n if (task.ordinal !== undefined) {\n lines.push(`ordinal: ${task.ordinal}`);\n }\n if (task.createdDate) {\n lines.push(`createdDate: ${task.createdDate}`);\n }\n if (task.updatedDate) {\n lines.push(`updatedDate: ${task.updatedDate}`);\n }\n lines.push(\"---\");\n lines.push(\"\");\n // Title\n lines.push(`# ${task.title}`);\n lines.push(\"\");\n // Description/Body\n if (task.description) {\n lines.push(task.description);\n lines.push(\"\");\n }\n // Acceptance Criteria\n if (task.acceptanceCriteriaItems && task.acceptanceCriteriaItems.length > 0) {\n lines.push(\"## Acceptance Criteria\");\n lines.push(\"\");\n for (const criterion of task.acceptanceCriteriaItems) {\n const checkbox = criterion.checked ? \"[x]\" : \"[ ]\";\n lines.push(`- ${checkbox} ${criterion.text}`);\n }\n lines.push(\"\");\n }\n // Implementation Plan\n if (task.implementationPlan) {\n lines.push(\"## Implementation Plan\");\n lines.push(\"\");\n lines.push(task.implementationPlan);\n lines.push(\"\");\n }\n // Implementation Notes\n if (task.implementationNotes) {\n lines.push(\"## Implementation Notes\");\n lines.push(\"\");\n lines.push(task.implementationNotes);\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n}\n// --- Internal helpers ---\nfunction parseMarkdownContent(content) {\n let frontmatter = {};\n let remaining = content;\n // Extract frontmatter\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n/);\n if (frontmatterMatch) {\n frontmatter = parseFrontmatter(frontmatterMatch[1]);\n remaining = content.slice(frontmatterMatch[0].length);\n }\n // Extract title (first h1)\n let title = \"\";\n const titleMatch = remaining.match(/^#\\s+(.+)$/m);\n if (titleMatch) {\n title = titleMatch[1].trim();\n }\n // Extract acceptance criteria\n const acceptanceCriteria = parseAcceptanceCriteria(remaining);\n // Raw content is everything after frontmatter\n const rawContent = remaining.trim();\n // Description is the body text between title and first section\n const description = extractDescription(remaining, title);\n return { frontmatter, title, rawContent, description, acceptanceCriteria };\n}\nfunction parseFrontmatter(raw) {\n const result = {};\n for (const line of raw.split(\"\\n\")) {\n const match = line.match(/^(\\w+):\\s*(.+)$/);\n if (!match)\n continue;\n const [, key, value] = match;\n switch (key) {\n case \"status\":\n result.status = value.trim();\n break;\n case \"priority\":\n result.priority = value.trim();\n break;\n case \"ordinal\":\n result.ordinal = parseInt(value.trim(), 10);\n break;\n case \"reporter\":\n case \"milestone\":\n case \"parentTaskId\":\n case \"branch\":\n case \"createdDate\":\n case \"updatedDate\":\n result[key] = value.trim();\n break;\n case \"assignee\":\n case \"labels\":\n case \"dependencies\":\n case \"subtasks\":\n result[key] = parseArrayValue(value);\n break;\n }\n }\n return result;\n}\nfunction parseArrayValue(value) {\n // Handle [item1, item2] or item1, item2\n const cleaned = value.replace(/^\\[|\\]$/g, \"\").trim();\n if (!cleaned)\n return [];\n return cleaned\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n}\nfunction parseAcceptanceCriteria(content) {\n const criteria = [];\n // Look for AC section or just checkbox items\n const checkboxPattern = /^-\\s*\\[([ xX])\\]\\s*(.+)$/gm;\n let match;\n let index = 1; // 1-based index as per AcceptanceCriterion\n while ((match = checkboxPattern.exec(content)) !== null) {\n criteria.push({\n index: index++,\n checked: match[1].toLowerCase() === \"x\",\n text: match[2].trim(),\n });\n }\n return criteria;\n}\nfunction extractDescription(content, title) {\n let body = content;\n // Remove title line\n if (title) {\n body = body.replace(new RegExp(`^#\\\\s+${escapeRegex(title)}\\\\s*$`, \"m\"), \"\");\n }\n // Remove known sections\n body = body.replace(/^##\\s+Acceptance Criteria[\\s\\S]*?(?=^##|\\z)/m, \"\");\n body = body.replace(/^##\\s+Implementation Plan[\\s\\S]*?(?=^##|\\z)/m, \"\");\n body = body.replace(/^##\\s+Implementation Notes[\\s\\S]*?(?=^##|\\z)/m, \"\");\n return body.trim();\n}\nfunction extractIdFromPath(filePath) {\n // Extract from pattern: task-{id} - {title}.md or {id} - {title}.md\n const filename = filePath.split(\"/\").pop() || \"\";\n const match = filename.match(/^(?:task-)?(\\d+(?:\\.\\d+)?)\\s*-/);\n if (match) {\n return match[1];\n }\n // Fallback: use filename without extension\n return filename.replace(/\\.md$/, \"\");\n}\n/**\n * Extract title from filename\n * Pattern: \"task-001 - My Task Title.md\" -> \"My Task Title\"\n * Pattern: \"001 - My Task Title.md\" -> \"My Task Title\"\n * Fallback: filename without extension\n */\nfunction extractTitleFromPath(filePath) {\n const filename = filePath.split(\"/\").pop() || \"\";\n // Match: optional \"task-\", id, \" - \", then capture title\n const match = filename.match(/^(?:task-)?\\d+(?:\\.\\d+)?\\s*-\\s*(.+)\\.md$/);\n if (match) {\n return match[1].trim();\n }\n // Fallback: filename without extension\n return filename.replace(/\\.md$/, \"\");\n}\n/**\n * Extract source directory from file path\n * Returns \"tasks\" or \"completed\" based on path\n */\nfunction extractSourceFromPath(filePath) {\n if (filePath.includes(\"/completed/\") || filePath.includes(\"\\\\completed\\\\\")) {\n return \"completed\";\n }\n return \"tasks\";\n}\n/**\n * Extract task index entry from file path only (no file read required)\n *\n * @param filePath - Path to the task file\n * @returns TaskIndexEntry with id, title, filePath, and source\n */\nexport function extractTaskIndexFromPath(filePath) {\n return {\n id: extractIdFromPath(filePath),\n filePath,\n title: extractTitleFromPath(filePath),\n source: extractSourceFromPath(filePath),\n };\n}\nfunction escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n//# sourceMappingURL=index.js.map","/**\n * Backlog.md Config Parser\n *\n * Parses config.yml using a line-by-line approach matching the official Backlog.md\n * implementation. This is more reliable than a generic YAML parser for this format.\n */\nconst DEFAULT_STATUSES = [\"To Do\", \"In Progress\", \"Done\"];\n/**\n * Parse Backlog.md config.yml content\n */\nexport function parseBacklogConfig(content) {\n const config = {};\n const lines = content.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\"))\n continue;\n const colonIndex = trimmed.indexOf(\":\");\n if (colonIndex === -1)\n continue;\n const key = trimmed.substring(0, colonIndex).trim();\n const value = trimmed.substring(colonIndex + 1).trim();\n switch (key) {\n case \"project_name\":\n config.projectName = value.replace(/['\"]/g, \"\");\n break;\n case \"default_assignee\":\n config.defaultAssignee = value.replace(/['\"]/g, \"\");\n break;\n case \"default_reporter\":\n config.defaultReporter = value.replace(/['\"]/g, \"\");\n break;\n case \"default_status\":\n config.defaultStatus = value.replace(/['\"]/g, \"\");\n break;\n case \"statuses\":\n case \"labels\":\n case \"milestones\":\n if (value.startsWith(\"[\") && value.endsWith(\"]\")) {\n const arrayContent = value.slice(1, -1);\n config[key] = arrayContent\n .split(\",\")\n .map((item) => item.trim().replace(/['\"]/g, \"\"))\n .filter(Boolean);\n }\n break;\n case \"date_format\":\n config.dateFormat = value.replace(/['\"]/g, \"\");\n break;\n case \"max_column_width\":\n config.maxColumnWidth = parseInt(value, 10);\n break;\n case \"task_resolution_strategy\":\n config.taskResolutionStrategy = value.replace(/['\"]/g, \"\");\n break;\n case \"default_editor\":\n config.defaultEditor = value.replace(/[\"']/g, \"\");\n break;\n case \"auto_open_browser\":\n config.autoOpenBrowser = value.toLowerCase() === \"true\";\n break;\n case \"default_port\":\n config.defaultPort = parseInt(value, 10);\n break;\n case \"remote_operations\":\n config.remoteOperations = value.toLowerCase() === \"true\";\n break;\n case \"auto_commit\":\n config.autoCommit = value.toLowerCase() === \"true\";\n break;\n case \"zero_padded_ids\":\n config.zeroPaddedIds = parseInt(value, 10);\n break;\n case \"timezone_preference\":\n config.timezonePreference = value.replace(/['\"]/g, \"\");\n break;\n case \"include_date_time_in_dates\":\n config.includeDateTimeInDates = value.toLowerCase() === \"true\";\n break;\n case \"bypass_git_hooks\":\n config.bypassGitHooks = value.toLowerCase() === \"true\";\n break;\n case \"check_active_branches\":\n config.checkActiveBranches = value.toLowerCase() === \"true\";\n break;\n case \"active_branch_days\":\n config.activeBranchDays = parseInt(value, 10);\n break;\n }\n }\n // Apply defaults\n return {\n projectName: config.projectName || \"Backlog\",\n statuses: config.statuses || [...DEFAULT_STATUSES],\n labels: config.labels || [],\n milestones: config.milestones || [],\n defaultStatus: config.defaultStatus || DEFAULT_STATUSES[0],\n dateFormat: config.dateFormat || \"YYYY-MM-DD\",\n defaultAssignee: config.defaultAssignee,\n defaultReporter: config.defaultReporter,\n maxColumnWidth: config.maxColumnWidth,\n taskResolutionStrategy: config.taskResolutionStrategy,\n defaultEditor: config.defaultEditor,\n autoOpenBrowser: config.autoOpenBrowser,\n defaultPort: config.defaultPort,\n remoteOperations: config.remoteOperations,\n autoCommit: config.autoCommit,\n zeroPaddedIds: config.zeroPaddedIds,\n timezonePreference: config.timezonePreference,\n includeDateTimeInDates: config.includeDateTimeInDates,\n bypassGitHooks: config.bypassGitHooks,\n checkActiveBranches: config.checkActiveBranches,\n activeBranchDays: config.activeBranchDays,\n };\n}\n/**\n * Serialize BacklogConfig to config.yml format\n */\nexport function serializeBacklogConfig(config) {\n const lines = [];\n lines.push(`project_name: \"${config.projectName}\"`);\n if (config.defaultStatus) {\n lines.push(`default_status: \"${config.defaultStatus}\"`);\n }\n lines.push(`statuses: [${config.statuses.map((s) => `\"${s}\"`).join(\", \")}]`);\n lines.push(`labels: [${(config.labels || []).map((l) => `\"${l}\"`).join(\", \")}]`);\n lines.push(`milestones: [${(config.milestones || []).map((m) => `\"${m}\"`).join(\", \")}]`);\n if (config.dateFormat) {\n lines.push(`date_format: \"${config.dateFormat}\"`);\n }\n if (config.defaultAssignee) {\n lines.push(`default_assignee: \"${config.defaultAssignee}\"`);\n }\n if (config.defaultReporter) {\n lines.push(`default_reporter: \"${config.defaultReporter}\"`);\n }\n if (config.defaultEditor) {\n lines.push(`default_editor: \"${config.defaultEditor}\"`);\n }\n if (typeof config.autoCommit === \"boolean\") {\n lines.push(`auto_commit: ${config.autoCommit}`);\n }\n if (typeof config.zeroPaddedIds === \"number\") {\n lines.push(`zero_padded_ids: ${config.zeroPaddedIds}`);\n }\n if (typeof config.autoOpenBrowser === \"boolean\") {\n lines.push(`auto_open_browser: ${config.autoOpenBrowser}`);\n }\n if (typeof config.defaultPort === \"number\") {\n lines.push(`default_port: ${config.defaultPort}`);\n }\n if (typeof config.remoteOperations === \"boolean\") {\n lines.push(`remote_operations: ${config.remoteOperations}`);\n }\n if (typeof config.bypassGitHooks === \"boolean\") {\n lines.push(`bypass_git_hooks: ${config.bypassGitHooks}`);\n }\n if (typeof config.checkActiveBranches === \"boolean\") {\n lines.push(`check_active_branches: ${config.checkActiveBranches}`);\n }\n if (typeof config.activeBranchDays === \"number\") {\n lines.push(`active_branch_days: ${config.activeBranchDays}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n//# sourceMappingURL=config-parser.js.map","/**\n * Task sorting utilities\n */\nconst PRIORITY_ORDER = {\n high: 0,\n medium: 1,\n low: 2,\n};\n/**\n * Sort tasks alphabetically by title\n *\n * @param tasks - Tasks to sort\n * @param direction - Sort direction ('asc' or 'desc')\n * @returns New sorted array\n */\nexport function sortTasksByTitle(tasks, direction = \"asc\") {\n return [...tasks].sort((a, b) => {\n const cmp = a.title.localeCompare(b.title);\n return direction === \"asc\" ? cmp : -cmp;\n });\n}\n/**\n * Sort tasks by a specified field\n *\n * @param tasks - Tasks to sort\n * @param sortBy - Field to sort by\n * @param direction - Sort direction\n * @returns New sorted array\n */\nexport function sortTasksBy(tasks, sortBy = \"title\", direction = \"asc\") {\n switch (sortBy) {\n case \"title\":\n return sortTasksByTitle(tasks, direction);\n case \"createdDate\":\n return [...tasks].sort((a, b) => {\n const cmp = a.createdDate.localeCompare(b.createdDate);\n return direction === \"asc\" ? cmp : -cmp;\n });\n case \"priority\":\n case \"ordinal\":\n default:\n // Use existing sortTasks for priority/ordinal\n const sorted = sortTasks(tasks);\n return direction === \"desc\" ? sorted.reverse() : sorted;\n }\n}\n/**\n * Sort tasks by: ordinal → priority → createdDate\n *\n * - Tasks with ordinal are sorted first by ordinal\n * - Then by priority (high → medium → low)\n * - Finally by createdDate (newest first)\n */\nexport function sortTasks(tasks) {\n return [...tasks].sort((a, b) => {\n // 1. Ordinal (if both have it)\n if (a.ordinal !== undefined && b.ordinal !== undefined) {\n return a.ordinal - b.ordinal;\n }\n // Tasks with ordinal come before tasks without\n if (a.ordinal !== undefined)\n return -1;\n if (b.ordinal !== undefined)\n return 1;\n // 2. Priority (high → medium → low → undefined)\n const aPri = a.priority ? PRIORITY_ORDER[a.priority] : 3;\n const bPri = b.priority ? PRIORITY_ORDER[b.priority] : 3;\n if (aPri !== bPri)\n return aPri - bPri;\n // 3. Created date (newest first)\n return b.createdDate.localeCompare(a.createdDate);\n });\n}\n/**\n * Group tasks by status\n *\n * @param tasks - Tasks to group\n * @param statuses - Ordered list of statuses (for column ordering)\n * @returns Map with status as key and sorted tasks as value\n */\nexport function groupTasksByStatus(tasks, statuses) {\n const grouped = new Map();\n // Initialize with all configured statuses (preserves column order)\n for (const status of statuses) {\n grouped.set(status, []);\n }\n // Group tasks\n for (const task of tasks) {\n const list = grouped.get(task.status);\n if (list) {\n list.push(task);\n }\n else {\n // Task has a status not in the config - add it anyway\n grouped.set(task.status, [task]);\n }\n }\n // Sort tasks within each status\n for (const [status, statusTasks] of grouped) {\n grouped.set(status, sortTasks(statusTasks));\n }\n return grouped;\n}\n//# sourceMappingURL=sorting.js.map","/**\n * Core - Main entry point for @backlog-md/core\n *\n * Provides a runtime-agnostic API for managing Backlog.md projects\n * by accepting adapter implementations for I/O operations.\n */\nimport { parseBacklogConfig, serializeBacklogConfig } from \"./config-parser\";\nimport { parseTaskMarkdown, extractTaskIndexFromPath } from \"../markdown\";\nimport { sortTasks, sortTasksBy, groupTasksByStatus } from \"../utils\";\n/**\n * Core class for Backlog.md operations\n *\n * @example\n * ```typescript\n * const core = new Core({\n * projectRoot: '/path/to/project',\n * adapters: { fs: new NodeFileSystemAdapter() }\n * });\n *\n * await core.initialize();\n * const tasks = core.listTasks();\n * const grouped = core.getTasksByStatus();\n * ```\n */\nexport class Core {\n projectRoot;\n fs;\n config = null;\n tasks = new Map();\n initialized = false;\n /** Lightweight task index for lazy loading (no file reads) */\n taskIndex = new Map();\n lazyInitialized = false;\n constructor(options) {\n this.projectRoot = options.projectRoot;\n this.fs = options.adapters.fs;\n }\n /**\n * Check if projectRoot contains a valid Backlog.md project\n */\n async isBacklogProject() {\n const configPath = this.fs.join(this.projectRoot, \"backlog\", \"config.yml\");\n return this.fs.exists(configPath);\n }\n /**\n * Initialize a new Backlog.md project in the projectRoot directory\n *\n * Creates the backlog/ directory and config.yml file.\n * Task directories (tasks/, completed/) are created lazily when needed.\n *\n * @param options - Optional configuration for the new project\n * @throws Error if project already exists\n *\n * @example\n * ```typescript\n * const core = new Core({ projectRoot: '/path/to/project', adapters: { fs } });\n *\n * // Initialize with defaults\n * await core.initProject();\n *\n * // Or with custom options\n * await core.initProject({\n * projectName: 'My Project',\n * statuses: ['Backlog', 'In Progress', 'Review', 'Done'],\n * labels: ['bug', 'feature', 'docs']\n * });\n * ```\n */\n async initProject(options = {}) {\n // Check if already a backlog project\n if (await this.isBacklogProject()) {\n throw new Error(`Already a Backlog.md project: config.yml exists at ${this.fs.join(this.projectRoot, \"backlog\", \"config.yml\")}`);\n }\n // Derive project name from directory if not provided\n const dirName = this.projectRoot.split(\"/\").pop() || \"Backlog\";\n const projectName = options.projectName || dirName;\n // Build config with defaults\n const statuses = options.statuses || [\"To Do\", \"In Progress\", \"Done\"];\n const config = {\n projectName,\n statuses,\n labels: options.labels || [],\n milestones: [],\n defaultStatus: options.defaultStatus || statuses[0],\n dateFormat: \"YYYY-MM-DD\",\n };\n // Create backlog directory\n const backlogDir = this.fs.join(this.projectRoot, \"backlog\");\n await this.fs.createDir(backlogDir, { recursive: true });\n // Write config.yml\n const configPath = this.fs.join(backlogDir, \"config.yml\");\n const configContent = serializeBacklogConfig(config);\n await this.fs.writeFile(configPath, configContent);\n }\n /**\n * Initialize the Core instance\n *\n * Loads configuration and discovers all tasks.\n * Must be called before using other methods.\n */\n async initialize() {\n if (this.initialized)\n return;\n // Load config\n const configPath = this.fs.join(this.projectRoot, \"backlog\", \"config.yml\");\n const configExists = await this.fs.exists(configPath);\n if (!configExists) {\n throw new Error(`Not a Backlog.md project: config.yml not found at ${configPath}`);\n }\n const configContent = await this.fs.readFile(configPath);\n this.config = parseBacklogConfig(configContent);\n // Load tasks from tasks/ directory\n const tasksDir = this.fs.join(this.projectRoot, \"backlog\", \"tasks\");\n if (await this.fs.exists(tasksDir)) {\n await this.loadTasksFromDirectory(tasksDir, \"local\");\n }\n // Load tasks from completed/ directory\n const completedDir = this.fs.join(this.projectRoot, \"backlog\", \"completed\");\n if (await this.fs.exists(completedDir)) {\n await this.loadTasksFromDirectory(completedDir, \"completed\");\n }\n this.initialized = true;\n }\n /**\n * Initialize with lazy loading (no file content reads)\n *\n * Only loads config and builds task index from file paths.\n * Task content is loaded on-demand via loadTask().\n * Use this for web/panel contexts where file reads are expensive.\n *\n * @param filePaths - Array of all file paths in the project\n */\n async initializeLazy(filePaths) {\n if (this.lazyInitialized)\n return;\n // Load config\n const configPath = this.fs.join(this.projectRoot, \"backlog\", \"config.yml\");\n const configExists = await this.fs.exists(configPath);\n if (!configExists) {\n throw new Error(`Not a Backlog.md project: config.yml not found at ${configPath}`);\n }\n const configContent = await this.fs.readFile(configPath);\n this.config = parseBacklogConfig(configContent);\n // Build task index from file paths only (no file reads)\n this.taskIndex.clear();\n for (const filePath of filePaths) {\n if (!filePath.endsWith(\".md\"))\n continue;\n // Check for backlog/tasks or backlog/completed (with or without leading slash)\n const isTaskFile = filePath.includes(\"backlog/tasks/\") || filePath.includes(\"backlog\\\\tasks\\\\\");\n const isCompletedFile = filePath.includes(\"backlog/completed/\") || filePath.includes(\"backlog\\\\completed\\\\\");\n if (!isTaskFile && !isCompletedFile)\n continue;\n // Skip config.yml\n if (filePath.endsWith(\"config.yml\"))\n continue;\n const indexEntry = extractTaskIndexFromPath(filePath);\n this.taskIndex.set(indexEntry.id, indexEntry);\n }\n this.lazyInitialized = true;\n }\n /**\n * Check if lazy initialization is complete\n */\n isLazyInitialized() {\n return this.lazyInitialized;\n }\n /**\n * Get the task index (lightweight entries)\n */\n getTaskIndex() {\n if (!this.lazyInitialized) {\n throw new Error(\"Core not lazy initialized. Call initializeLazy() first.\");\n }\n return this.taskIndex;\n }\n /**\n * Load a single task by ID (on-demand loading)\n *\n * @param id - Task ID\n * @returns Task or undefined if not found\n */\n async loadTask(id) {\n // Return from cache if already loaded\n if (this.tasks.has(id)) {\n return this.tasks.get(id);\n }\n // Get index entry\n const indexEntry = this.taskIndex.get(id);\n if (!indexEntry) {\n return undefined;\n }\n // Load and parse task file\n try {\n const content = await this.fs.readFile(indexEntry.filePath);\n const task = parseTaskMarkdown(content, indexEntry.filePath);\n task.source = indexEntry.source === \"completed\" ? \"completed\" : \"local\";\n this.tasks.set(task.id, task);\n return task;\n }\n catch (error) {\n console.warn(`Failed to load task ${id} from ${indexEntry.filePath}:`, error);\n return undefined;\n }\n }\n /**\n * Load multiple tasks by ID (on-demand loading)\n *\n * @param ids - Array of task IDs to load\n * @returns Array of loaded tasks (undefined entries filtered out)\n */\n async loadTasks(ids) {\n const tasks = await Promise.all(ids.map((id) => this.loadTask(id)));\n return tasks.filter((t) => t !== undefined);\n }\n /**\n * Get tasks by source (tasks/completed) with pagination\n *\n * This is a lazy-loading alternative to getTasksByStatusPaginated().\n * Groups by directory (tasks/ or completed/) instead of status.\n * Only loads task content for items in the requested page.\n *\n * @param options - Per-source pagination options\n * @returns Paginated tasks grouped by source\n */\n async getTasksBySourcePaginated(options) {\n if (!this.lazyInitialized) {\n throw new Error(\"Core not lazy initialized. Call initializeLazy() first.\");\n }\n const tasksLimit = options?.tasksLimit ?? 10;\n const completedLimit = options?.completedLimit ?? 10;\n const offset = options?.offset ?? 0;\n const tasksSortDirection = options?.tasksSortDirection ?? \"asc\";\n const completedSortByIdDesc = options?.completedSortByIdDesc ?? true;\n const sources = [\"tasks\", \"completed\"];\n const bySource = new Map();\n for (const source of sources) {\n // Get index entries for this source\n let entries = Array.from(this.taskIndex.values()).filter((e) => e.source === source);\n // Per-source limit\n const limit = source === \"tasks\" ? tasksLimit : completedLimit;\n // Sort by ID (numeric)\n entries = entries.sort((a, b) => {\n const aNum = parseInt(a.id.replace(/\\D/g, \"\"), 10) || 0;\n const bNum = parseInt(b.id.replace(/\\D/g, \"\"), 10) || 0;\n // Completed: descending (most recent first), Active: ascending\n return source === \"completed\" && completedSortByIdDesc\n ? bNum - aNum\n : aNum - bNum;\n });\n const total = entries.length;\n const pageEntries = entries.slice(offset, offset + limit);\n // Load only the tasks for this page\n const items = await this.loadTasks(pageEntries.map((e) => e.id));\n bySource.set(source, {\n items,\n total,\n hasMore: offset + limit < total,\n offset,\n limit,\n });\n }\n return {\n bySource,\n sources,\n };\n }\n /**\n * Load more tasks for a specific source (lazy loading)\n *\n * @param source - Source to load more from (\"tasks\" or \"completed\")\n * @param currentOffset - Current offset (items already loaded)\n * @param options - Pagination options\n * @returns Paginated result for the source\n */\n async loadMoreForSource(source, currentOffset, options) {\n if (!this.lazyInitialized) {\n throw new Error(\"Core not lazy initialized. Call initializeLazy() first.\");\n }\n const limit = options?.limit ?? 10;\n const sortDirection = options?.sortDirection ?? \"asc\";\n const completedSortByIdDesc = options?.completedSortByIdDesc ?? true;\n // Get index entries for this source\n let entries = Array.from(this.taskIndex.values()).filter((e) => e.source === source);\n // Sort by ID (numeric)\n entries = entries.sort((a, b) => {\n const aNum = parseInt(a.id.replace(/\\D/g, \"\"), 10) || 0;\n const bNum = parseInt(b.id.replace(/\\D/g, \"\"), 10) || 0;\n // Completed: descending (most recent first), Active: ascending\n return source === \"completed\" && completedSortByIdDesc\n ? bNum - aNum\n : aNum - bNum;\n });\n const total = entries.length;\n const pageEntries = entries.slice(currentOffset, currentOffset + limit);\n // Load only the tasks for this page\n const items = await this.loadTasks(pageEntries.map((e) => e.id));\n return {\n items,\n total,\n hasMore: currentOffset + limit < total,\n offset: currentOffset,\n limit,\n };\n }\n /**\n * Get the loaded configuration\n *\n * @throws Error if not initialized\n */\n getConfig() {\n this.ensureInitialized();\n return this.config;\n }\n /**\n * List all tasks, optionally filtered\n *\n * @param filter - Optional filter criteria\n * @returns Sorted array of tasks\n */\n listTasks(filter) {\n this.ensureInitialized();\n let tasks = Array.from(this.tasks.values());\n if (filter?.status) {\n tasks = tasks.filter((t) => t.status === filter.status);\n }\n if (filter?.assignee) {\n tasks = tasks.filter((t) => t.assignee.includes(filter.assignee));\n }\n if (filter?.priority) {\n tasks = tasks.filter((t) => t.priority === filter.priority);\n }\n if (filter?.labels && filter.labels.length > 0) {\n tasks = tasks.filter((t) => filter.labels.some((label) => t.labels.includes(label)));\n }\n if (filter?.parentTaskId) {\n tasks = tasks.filter((t) => t.parentTaskId === filter.parentTaskId);\n }\n return sortTasks(tasks);\n }\n /**\n * Get tasks grouped by status\n *\n * This is the primary method for kanban-style displays.\n * Returns a Map with status as key and sorted tasks as value.\n * The Map preserves the order of statuses from config.\n */\n getTasksByStatus() {\n this.ensureInitialized();\n const tasks = Array.from(this.tasks.values());\n return groupTasksByStatus(tasks, this.config.statuses);\n }\n /**\n * Get a single task by ID\n *\n * @param id - Task ID\n * @returns Task or undefined if not found\n */\n getTask(id) {\n this.ensureInitialized();\n return this.tasks.get(id);\n }\n /**\n * List tasks with pagination\n *\n * @param filter - Filter and pagination options\n * @returns Paginated result with tasks\n */\n listTasksPaginated(filter) {\n this.ensureInitialized();\n // Apply filters\n let tasks = this.applyFilters(Array.from(this.tasks.values()), filter);\n // Sort\n const pagination = filter?.pagination ?? {};\n const sortBy = pagination.sortBy ?? \"title\";\n const sortDirection = pagination.sortDirection ?? \"asc\";\n tasks = sortTasksBy(tasks, sortBy, sortDirection);\n // Paginate\n const limit = pagination.limit ?? 10;\n const offset = pagination.offset ?? 0;\n const total = tasks.length;\n const items = tasks.slice(offset, offset + limit);\n return {\n items,\n total,\n hasMore: offset + limit < total,\n offset,\n limit,\n };\n }\n /**\n * Get tasks by status with pagination per column\n *\n * @param pagination - Pagination options (applied per status)\n * @returns Paginated tasks grouped by status\n */\n getTasksByStatusPaginated(pagination) {\n this.ensureInitialized();\n const limit = pagination?.limit ?? 10;\n const offset = pagination?.offset ?? 0;\n const sortBy = pagination?.sortBy ?? \"title\";\n const sortDirection = pagination?.sortDirection ?? \"asc\";\n const byStatus = new Map();\n // Group all tasks by status first (without sorting)\n const allGrouped = new Map();\n for (const status of this.config.statuses) {\n allGrouped.set(status, []);\n }\n for (const task of this.tasks.values()) {\n const list = allGrouped.get(task.status);\n if (list) {\n list.push(task);\n }\n else {\n allGrouped.set(task.status, [task]);\n }\n }\n // Paginate each status column\n for (const status of this.config.statuses) {\n let tasks = allGrouped.get(status) ?? [];\n tasks = sortTasksBy(tasks, sortBy, sortDirection);\n const total = tasks.length;\n const items = tasks.slice(offset, offset + limit);\n byStatus.set(status, {\n items,\n total,\n hasMore: offset + limit < total,\n offset,\n limit,\n });\n }\n return {\n byStatus,\n statuses: this.config.statuses,\n };\n }\n /**\n * Load more tasks for a specific status\n *\n * @param status - Status column to load more from\n * @param currentOffset - Current offset (items already loaded)\n * @param pagination - Pagination options (limit, sortBy, sortDirection)\n * @returns Paginated result for the status\n */\n loadMoreForStatus(status, currentOffset, pagination) {\n this.ensureInitialized();\n const limit = pagination?.limit ?? 10;\n const sortBy = pagination?.sortBy ?? \"title\";\n const sortDirection = pagination?.sortDirection ?? \"asc\";\n let tasks = Array.from(this.tasks.values()).filter((t) => t.status === status);\n tasks = sortTasksBy(tasks, sortBy, sortDirection);\n const total = tasks.length;\n const items = tasks.slice(currentOffset, currentOffset + limit);\n return {\n items,\n total,\n hasMore: currentOffset + limit < total,\n offset: currentOffset,\n limit,\n };\n }\n /**\n * Reload all tasks from disk\n *\n * Useful after external changes to task files.\n */\n async reload() {\n this.tasks.clear();\n this.initialized = false;\n await this.initialize();\n }\n // --- Private methods ---\n ensureInitialized() {\n if (!this.initialized) {\n throw new Error(\"Core not initialized. Call initialize() first.\");\n }\n }\n applyFilters(tasks, filter) {\n if (!filter)\n return tasks;\n let result = tasks;\n if (filter.status) {\n result = result.filter((t) => t.status === filter.status);\n }\n if (filter.assignee) {\n result = result.filter((t) => t.assignee.includes(filter.assignee));\n }\n if (filter.priority) {\n result = result.filter((t) => t.priority === filter.priority);\n }\n if (filter.labels && filter.labels.length > 0) {\n result = result.filter((t) => filter.labels.some((label) => t.labels.includes(label)));\n }\n if (filter.parentTaskId) {\n result = result.filter((t) => t.parentTaskId === filter.parentTaskId);\n }\n return result;\n }\n async loadTasksFromDirectory(dir, source) {\n const entries = await this.fs.readDir(dir);\n for (const entry of entries) {\n const fullPath = this.fs.join(dir, entry);\n // Skip directories\n if (await this.fs.isDirectory(fullPath)) {\n continue;\n }\n // Only process markdown files\n if (!entry.endsWith(\".md\")) {\n continue;\n }\n try {\n const content = await this.fs.readFile(fullPath);\n const task = parseTaskMarkdown(content, fullPath);\n // Set source based on directory\n task.source = source;\n this.tasks.set(task.id, task);\n }\n catch (error) {\n // Log but don't fail on individual task parse errors\n console.warn(`Failed to parse task file ${fullPath}:`, error);\n }\n }\n }\n}\n//# sourceMappingURL=Core.js.map","/**\n * PanelFileSystemAdapter\n *\n * Implements FileSystemAdapter interface by wrapping the panel framework's\n * file access APIs (fileTree slice and openFile action).\n */\n\nimport type { FileSystemAdapter } from '@backlog-md/core';\n\nexport interface PanelFileAccess {\n /** Function to fetch file content by path */\n fetchFile: (path: string) => Promise<string>;\n /** List of all file paths in the repository */\n filePaths: string[];\n}\n\n/**\n * FileSystemAdapter implementation for the panel framework\n *\n * This adapter wraps the panel's file access mechanisms to provide\n * a standard FileSystemAdapter interface for @backlog-md/core.\n */\nexport class PanelFileSystemAdapter implements FileSystemAdapter {\n private readonly filePaths: Set<string>;\n private readonly directories: Set<string>;\n private readonly fetchFile: (path: string) => Promise<string>;\n\n constructor(access: PanelFileAccess) {\n this.fetchFile = access.fetchFile;\n this.filePaths = new Set(access.filePaths);\n\n // Build directory set from file paths\n this.directories = new Set<string>();\n for (const filePath of access.filePaths) {\n const parts = filePath.split('/');\n // Add all parent directories\n for (let i = 1; i < parts.length; i++) {\n this.directories.add(parts.slice(0, i).join('/'));\n }\n }\n // Root directory\n this.directories.add('');\n }\n\n async exists(path: string): Promise<boolean> {\n const normalized = this.normalizePath(path);\n return this.filePaths.has(normalized) || this.directories.has(normalized);\n }\n\n async readFile(path: string): Promise<string> {\n const normalized = this.normalizePath(path);\n if (!this.filePaths.has(normalized)) {\n throw new Error(`File not found: ${path}`);\n }\n return this.fetchFile(normalized);\n }\n\n async writeFile(_path: string, _content: string): Promise<void> {\n throw new Error('Write operations not supported in panel context');\n }\n\n async deleteFile(_path: string): Promise<void> {\n throw new Error('Delete operations not supported in panel context');\n }\n\n async createDir(_path: string, _options?: { recursive?: boolean }): Promise<void> {\n throw new Error('Directory creation not supported in panel context');\n }\n\n async readDir(path: string): Promise<string[]> {\n const normalized = this.normalizePath(path);\n const prefix = normalized ? `${normalized}/` : '';\n const entries = new Set<string>();\n\n for (const filePath of this.filePaths) {\n if (filePath.startsWith(prefix)) {\n // Get the next path segment after the prefix\n const remaining = filePath.slice(prefix.length);\n const nextSlash = remaining.indexOf('/');\n const entry = nextSlash === -1 ? remaining : remaining.slice(0, nextSlash);\n if (entry) {\n entries.add(entry);\n }\n }\n }\n\n return Array.from(entries);\n }\n\n async isDirectory(path: string): Promise<boolean> {\n const normalized = this.normalizePath(path);\n return this.directories.has(normalized) && !this.filePaths.has(normalized);\n }\n\n async rename(_from: string, _to: string): Promise<void> {\n throw new Error('Rename operations not supported in panel context');\n }\n\n async stat(path: string): Promise<{ mtime: Date; isDirectory: boolean; size: number }> {\n const normalized = this.normalizePath(path);\n const isDir = await this.isDirectory(normalized);\n const exists = await this.exists(normalized);\n\n if (!exists) {\n throw new Error(`Path not found: ${path}`);\n }\n\n return {\n mtime: new Date(),\n isDirectory: isDir,\n size: 0, // Size not available from fileTree\n };\n }\n\n // Path utilities (synchronous, pure string manipulation)\n\n join(...paths: string[]): string {\n return paths\n .filter(Boolean)\n .join('/')\n .replace(/\\/+/g, '/')\n .replace(/^\\//, '');\n }\n\n dirname(path: string): string {\n const parts = path.split('/');\n parts.pop();\n return parts.join('/');\n }\n\n basename(path: string, ext?: string): string {\n const base = path.split('/').pop() || '';\n if (ext && base.endsWith(ext)) {\n return base.slice(0, -ext.length);\n }\n return base;\n }\n\n extname(path: string): string {\n const base = this.basename(path);\n const dotIndex = base.lastIndexOf('.');\n return dotIndex === -1 ? '' : base.slice(dotIndex);\n }\n\n relative(from: string, to: string): string {\n const fromParts = from.split('/').filter(Boolean);\n const toParts = to.split('/').filter(Boolean);\n\n // Find common prefix\n let commonLength = 0;\n while (\n commonLength < fromParts.length &&\n commonLength < toParts.length &&\n fromParts[commonLength] === toParts[commonLength]\n ) {\n commonLength++;\n }\n\n // Build relative path\n const upCount = fromParts.length - commonLength;\n const relativeParts = [\n ...Array(upCount).fill('..'),\n ...toParts.slice(commonLength),\n ];\n\n return relativeParts.join('/') || '.';\n }\n\n isAbsolute(path: string): boolean {\n return path.startsWith('/');\n }\n\n normalize(path: string): string {\n return this.normalizePath(path);\n }\n\n homedir(): string {\n return '';\n }\n\n // Private helpers\n\n private normalizePath(path: string): string {\n return path\n .replace(/^\\/+/, '') // Remove leading slashes\n .replace(/\\/+$/, '') // Remove trailing slashes\n .replace(/\\/+/g, '/'); // Collapse multiple slashes\n }\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { Core, type Task, type PaginatedResult } from '@backlog-md/core';\nimport { PanelFileSystemAdapter } from '../../../adapters/PanelFileSystemAdapter';\nimport type { PanelContextValue, PanelActions } from '../../../types';\n\n/** Per-column pagination state */\nexport interface ColumnState {\n tasks: Task[];\n total: number;\n hasMore: boolean;\n isLoadingMore: boolean;\n}\n\n/** Source column names (directory-based) */\nexport type SourceColumn = 'tasks' | 'completed';\n\n/** Display labels for source columns */\nexport const SOURCE_DISPLAY_LABELS: Record<SourceColumn, string> = {\n tasks: 'Active',\n completed: 'Completed',\n};\n\nexport interface UseKanbanDataResult {\n tasks: Task[];\n /** Source columns: \"tasks\" and \"completed\" */\n sources: SourceColumn[];\n isLoading: boolean;\n error: string | null;\n isBacklogProject: boolean;\n tasksBySource: Map<string, Task[]>;\n /** Per-column pagination state */\n columnStates: Map<string, ColumnState>;\n /** Load more tasks for a specific source column */\n loadMore: (source: SourceColumn) => Promise<void>;\n refreshData: () => Promise<void>;\n updateTaskStatus: (taskId: string, newStatus: string) => Promise<void>;\n}\n\ninterface UseKanbanDataOptions {\n context?: PanelContextValue;\n actions?: PanelActions;\n /** Number of active tasks to load (default: 20) */\n tasksLimit?: number;\n /** Number of completed tasks to load (default: 5) */\n completedLimit?: number;\n}\n\nconst DEFAULT_SOURCES: SourceColumn[] = ['tasks', 'completed'];\nconst DEFAULT_TASKS_LIMIT = 20;\nconst DEFAULT_COMPLETED_LIMIT = 5;\n\n/**\n * Hook for managing kanban board data with lazy loading\n *\n * Uses 2-column view (Active/Completed) based on directory structure.\n * Only loads task content for displayed items (no file reads on init).\n * Completed tasks are sorted by ID descending (most recent first).\n */\nexport function useKanbanData(\n options?: UseKanbanDataOptions\n): UseKanbanDataResult {\n const {\n context,\n actions,\n tasksLimit = DEFAULT_TASKS_LIMIT,\n completedLimit = DEFAULT_COMPLETED_LIMIT,\n } = options || {};\n\n const [tasks, setTasks] = useState<Task[]>([]);\n const [sources] = useState<SourceColumn[]>(DEFAULT_SOURCES);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [isBacklogProject, setIsBacklogProject] = useState(false);\n const [tasksBySource, setTasksBySource] = useState<Map<string, Task[]>>(\n new Map()\n );\n const [columnStates, setColumnStates] = useState<Map<string, ColumnState>>(\n new Map()\n );\n\n // Keep reference to Core instance for loadMore\n const coreRef = useRef<Core | null>(null);\n\n // Keep track of active file fetches to avoid duplicate fetches\n const activeFilePathRef = useRef<string | null>(null);\n\n // Store stable references to context and actions\n const contextRef = useRef(context);\n const actionsRef = useRef(actions);\n\n useEffect(() => {\n contextRef.current = context;\n actionsRef.current = actions;\n }, [context, actions]);\n\n // Helper function to fetch file content (used for on-demand loading)\n const fetchFileContent = useCallback(async (path: string): Promise<string> => {\n const currentContext = contextRef.current;\n const currentActions = actionsRef.current;\n\n if (!currentActions || !currentContext) {\n throw new Error('PanelContext not available');\n }\n\n // Avoid duplicate fetches for the same file\n if (activeFilePathRef.current === path) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n activeFilePathRef.current = path;\n\n try {\n if (currentActions.openFile) {\n const result = await currentActions.openFile(path);\n if (typeof result === 'string') {\n return result;\n }\n } else {\n throw new Error('openFile action not available');\n }\n\n // Get the active file data from the slice\n const activeFileSlice = currentContext.getRepositorySlice('active-file');\n const fileData = activeFileSlice?.data as { content?: string };\n\n if (!fileData?.content) {\n throw new Error(`Failed to fetch content for ${path}`);\n }\n\n return fileData.content;\n } finally {\n activeFilePathRef.current = null;\n }\n }, []);\n\n // Load Backlog.md data using Core with lazy loading\n const loadBacklogData = useCallback(async () => {\n if (!context || !actions) {\n console.log('[useKanbanData] No context provided');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n setIsLoading(false);\n coreRef.current = null;\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n // Get fileTree slice - FileTree uses allFiles (not files)\n const fileTreeSlice = context.getRepositorySlice('fileTree') as\n | { data?: { allFiles?: Array<{ path: string }> } }\n | undefined;\n\n if (!fileTreeSlice?.data?.allFiles) {\n console.log('[useKanbanData] FileTree not available');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n coreRef.current = null;\n return;\n }\n\n const files = fileTreeSlice.data.allFiles;\n const filePaths = files.map((f: { path: string }) => f.path);\n\n // Create FileSystemAdapter for the panel\n const fs = new PanelFileSystemAdapter({\n fetchFile: fetchFileContent,\n filePaths,\n });\n\n // Create Core instance\n const core = new Core({\n projectRoot: '',\n adapters: { fs },\n });\n\n // Check if this is a Backlog.md project\n const isProject = await core.isBacklogProject();\n if (!isProject) {\n console.log('[useKanbanData] Not a Backlog.md project');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n coreRef.current = null;\n return;\n }\n\n console.log('[useKanbanData] Loading Backlog.md data with lazy loading...');\n setIsBacklogProject(true);\n\n // Initialize with lazy loading - only reads config, builds index from paths\n await core.initializeLazy(filePaths);\n\n // Store Core reference for loadMore\n coreRef.current = core;\n\n // Use lazy paginated API - only loads task content for first page\n // Active: sorted by title, Completed: sorted by ID desc (most recent)\n const paginatedResult = await core.getTasksBySourcePaginated({\n tasksLimit,\n completedLimit,\n offset: 0,\n tasksSortDirection: 'asc',\n completedSortByIdDesc: true,\n });\n\n // Build tasksBySource map and columnStates from paginated results\n const newTasksBySource = new Map<string, Task[]>();\n const newColumnStates = new Map<string, ColumnState>();\n let allTasks: Task[] = [];\n\n for (const source of paginatedResult.sources) {\n const columnResult = paginatedResult.bySource.get(source);\n if (columnResult) {\n newTasksBySource.set(source, columnResult.items);\n newColumnStates.set(source, {\n tasks: columnResult.items,\n total: columnResult.total,\n hasMore: columnResult.hasMore,\n isLoadingMore: false,\n });\n allTasks = allTasks.concat(columnResult.items);\n } else {\n newTasksBySource.set(source, []);\n newColumnStates.set(source, {\n tasks: [],\n total: 0,\n hasMore: false,\n isLoadingMore: false,\n });\n }\n }\n\n const totalTasks = Array.from(paginatedResult.bySource.values()).reduce(\n (sum, col) => sum + col.total,\n 0\n );\n\n console.log(\n `[useKanbanData] Loaded ${allTasks.length}/${totalTasks} tasks (active: ${tasksLimit}, completed: ${completedLimit})`\n );\n\n setTasks(allTasks);\n setTasksBySource(newTasksBySource);\n setColumnStates(newColumnStates);\n } catch (err) {\n console.error('[useKanbanData] Failed to load Backlog.md data:', err);\n setError(err instanceof Error ? err.message : 'Failed to load backlog data');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n coreRef.current = null;\n } finally {\n setIsLoading(false);\n }\n }, [context, actions, fetchFileContent, tasksLimit, completedLimit]);\n\n // Load data on mount or when context changes\n useEffect(() => {\n loadBacklogData();\n }, [loadBacklogData]);\n\n // Load more tasks for a specific source column\n const loadMore = useCallback(\n async (source: SourceColumn) => {\n const core = coreRef.current;\n if (!core) {\n console.warn('[useKanbanData] Core not available for loadMore');\n return;\n }\n\n const currentState = columnStates.get(source);\n if (!currentState || !currentState.hasMore || currentState.isLoadingMore) {\n return;\n }\n\n // Set loading state for this column\n setColumnStates((prev) => {\n const newStates = new Map(prev);\n const state = newStates.get(source);\n if (state) {\n newStates.set(source, { ...state, isLoadingMore: true });\n }\n return newStates;\n });\n\n try {\n const currentOffset = currentState.tasks.length;\n const limit = source === 'tasks' ? tasksLimit : completedLimit;\n const result: PaginatedResult<Task> = await core.loadMoreForSource(\n source,\n currentOffset,\n {\n limit,\n sortDirection: 'asc',\n completedSortByIdDesc: source === 'completed',\n }\n );\n\n console.log(\n `[useKanbanData] Loaded ${result.items.length} more tasks for \"${source}\" (${currentOffset + result.items.length}/${result.total})`\n );\n\n // Update column state with new tasks\n setColumnStates((prev) => {\n const newStates = new Map(prev);\n const state = newStates.get(source);\n if (state) {\n const newTasks = [...state.tasks, ...result.items];\n newStates.set(source, {\n tasks: newTasks,\n total: result.total,\n hasMore: result.hasMore,\n isLoadingMore: false,\n });\n }\n return newStates;\n });\n\n // Update tasksBySource\n setTasksBySource((prev) => {\n const newMap = new Map(prev);\n const currentTasks = newMap.get(source) || [];\n newMap.set(source, [...currentTasks, ...result.items]);\n return newMap;\n });\n\n // Update all tasks\n setTasks((prev) => [...prev, ...result.items]);\n } catch (err) {\n console.error(`[useKanbanData] Failed to load more for \"${source}\":`, err);\n setError(err instanceof Error ? err.message : 'Failed to load more tasks');\n\n // Reset loading state\n setColumnStates((prev) => {\n const newStates = new Map(prev);\n const state = newStates.get(source);\n if (state) {\n newStates.set(source, { ...state, isLoadingMore: false });\n }\n return newStates;\n });\n }\n },\n [columnStates, tasksLimit, completedLimit]\n );\n\n // Refresh data\n const refreshData = useCallback(async () => {\n await loadBacklogData();\n }, [loadBacklogData]);\n\n // Update task status (not yet implemented)\n const updateTaskStatus = useCallback(\n async (_taskId: string, _newStatus: string) => {\n setError(null);\n console.warn(\n '[useKanbanData] Task status updates not yet implemented for Backlog.md'\n );\n setError('Task editing is not yet supported');\n },\n []\n );\n\n return {\n tasks,\n sources,\n isLoading,\n error,\n isBacklogProject,\n tasksBySource,\n columnStates,\n loadMore,\n refreshData,\n updateTaskStatus,\n };\n}\n","import React from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { Task } from '@backlog-md/core';\n\ninterface KanbanColumnProps {\n status: string;\n tasks: Task[];\n /** Total number of tasks in this column (for pagination) */\n total?: number;\n /** Whether more tasks are available to load */\n hasMore?: boolean;\n /** Whether more tasks are currently being loaded */\n isLoadingMore?: boolean;\n /** Callback to load more tasks */\n onLoadMore?: () => void;\n onTaskClick?: (task: Task) => void;\n}\n\nexport const KanbanColumn: React.FC<KanbanColumnProps> = ({\n status,\n tasks,\n total,\n hasMore = false,\n isLoadingMore = false,\n onLoadMore,\n onTaskClick,\n}) => {\n const { theme } = useTheme();\n\n const getPriorityColor = (priority?: string) => {\n switch (priority) {\n case 'high':\n return theme.colors.error;\n case 'medium':\n return theme.colors.warning;\n case 'low':\n return theme.colors.info;\n default:\n return theme.colors.border;\n }\n };\n\n const remaining = total !== undefined ? total - tasks.length : 0;\n\n return (\n <div\n style={{\n flex: '1 1 0', // Grow to fill available width equally\n minWidth: '280px',\n maxWidth: '500px', // Cap max width for readability\n height: '100%', // Fill parent height\n minHeight: 0, // Allow shrinking\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n background: theme.colors.backgroundSecondary,\n borderRadius: theme.radii[2],\n padding: 'clamp(12px, 3vw, 16px)', // Responsive padding for mobile\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Column Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h3\n style={{\n margin: 0,\n fontSize: theme.fontSizes[3],\n color: theme.colors.text,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n {status}\n </h3>\n <span\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n background: theme.colors.background,\n padding: '2px 8px',\n borderRadius: theme.radii[1],\n }}\n >\n {total !== undefined ? `${tasks.length}/${total}` : tasks.length}\n </span>\n </div>\n\n {/* Task Cards */}\n <div\n style={{\n flex: 1,\n minHeight: 0, // Critical: allows flex child to shrink and scroll\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n }}\n >\n {tasks.map((task) => (\n <div\n key={task.id}\n onClick={() => onTaskClick?.(task)}\n style={{\n flexShrink: 0, // Prevent card from shrinking\n background: theme.colors.surface,\n borderRadius: theme.radii[2],\n padding: '12px',\n border: `1px solid ${theme.colors.border}`,\n borderLeft: `4px solid ${getPriorityColor(task.priority)}`,\n cursor: onTaskClick ? 'pointer' : 'default',\n transition: 'all 0.2s ease',\n minHeight: '44px', // Minimum touch target size for mobile\n }}\n onMouseEnter={(e) => {\n if (onTaskClick) {\n e.currentTarget.style.transform = 'translateY(-2px)';\n e.currentTarget.style.boxShadow = `0 4px 8px ${theme.colors.border}`;\n }\n }}\n onMouseLeave={(e) => {\n if (onTaskClick) {\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {/* Task Title */}\n <h4\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[2],\n color: theme.colors.text,\n fontWeight: theme.fontWeights.medium,\n }}\n >\n {task.title}\n </h4>\n\n {/* Task Description */}\n {task.description && (\n <p\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n lineHeight: '1.4',\n }}\n >\n {task.description}\n </p>\n )}\n\n {/* Task Labels */}\n {task.labels && task.labels.length > 0 && (\n <div\n style={{\n display: 'flex',\n gap: '4px',\n flexWrap: 'wrap',\n marginBottom: '8px',\n }}\n >\n {task.labels.map((label) => (\n <span\n key={label}\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.primary,\n background: `${theme.colors.primary}20`,\n padding: '2px 8px',\n borderRadius: theme.radii[1],\n fontWeight: theme.fontWeights.medium,\n }}\n >\n {label}\n </span>\n ))}\n </div>\n )}\n\n {/* Task Footer */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: theme.fontSizes[0],\n color: theme.colors.textMuted,\n }}\n >\n <span\n style={{\n fontFamily: theme.fonts.monospace,\n }}\n >\n {task.id}\n </span>\n {task.assignee && task.assignee.length > 0 && (\n <span\n style={{\n color: theme.colors.textSecondary,\n }}\n >\n {task.assignee.length} assignee\n {task.assignee.length !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n </div>\n ))}\n\n {/* Load More Button */}\n {hasMore && onLoadMore && (\n <button\n onClick={onLoadMore}\n disabled={isLoadingMore}\n style={{\n background: theme.colors.background,\n border: `1px dashed ${theme.colors.border}`,\n borderRadius: theme.radii[2],\n padding: '12px',\n cursor: isLoadingMore ? 'wait' : 'pointer',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n fontWeight: theme.fontWeights.medium,\n transition: 'all 0.2s ease',\n minHeight: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n }}\n onMouseEnter={(e) => {\n if (!isLoadingMore) {\n e.currentTarget.style.background = theme.colors.backgroundSecondary;\n e.currentTarget.style.borderColor = theme.colors.primary;\n e.currentTarget.style.color = theme.colors.primary;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = theme.colors.background;\n e.currentTarget.style.borderColor = theme.colors.border;\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n {isLoadingMore ? (\n <>\n <span\n style={{\n display: 'inline-block',\n width: '14px',\n height: '14px',\n border: `2px solid ${theme.colors.border}`,\n borderTopColor: theme.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n Loading...\n </>\n ) : (\n `Load more (${remaining} remaining)`\n )}\n </button>\n )}\n </div>\n\n {/* Inline keyframes for spinner animation */}\n <style>\n {`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}\n </style>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { ExternalLink, FileText, FolderPlus, Loader2, CheckCircle2 } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\n\ninterface EmptyStateProps {\n message?: string;\n description?: string;\n showBacklogLink?: boolean;\n onInitialize?: () => Promise<void>;\n canInitialize?: boolean;\n}\n\n/**\n * EmptyState component displayed when no tasks are found\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n message = 'No Backlog.md project detected',\n description = 'This repository does not appear to use Backlog.md for task management.',\n showBacklogLink = true,\n onInitialize,\n canInitialize = false,\n}) => {\n const { theme } = useTheme();\n const [isInitializing, setIsInitializing] = useState(false);\n const [initError, setInitError] = useState<string | null>(null);\n const [initSuccess, setInitSuccess] = useState(false);\n\n const handleInitialize = async () => {\n if (!onInitialize) return;\n setIsInitializing(true);\n setInitError(null);\n try {\n await onInitialize();\n setInitSuccess(true);\n } catch (err) {\n setInitError(err instanceof Error ? err.message : 'Failed to initialize');\n } finally {\n setIsInitializing(false);\n }\n };\n\n return (\n <>\n {/* Keyframe animation for spinner */}\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n padding: '48px 24px',\n textAlign: 'center',\n color: theme.colors.textMuted,\n }}\n >\n <FileText\n size={64}\n color={theme.colors.textMuted}\n style={{ marginBottom: '24px', opacity: 0.5 }}\n />\n\n <h3\n style={{\n fontSize: theme.fontSizes[4],\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: '12px',\n }}\n >\n {message}\n </h3>\n\n <p\n style={{\n fontSize: theme.fontSizes[2],\n color: theme.colors.textMuted,\n marginBottom: '32px',\n maxWidth: '480px',\n lineHeight: 1.6,\n }}\n >\n {description}\n </p>\n\n {/* Action buttons */}\n <div\n style={{\n display: 'flex',\n gap: '12px',\n flexWrap: 'wrap',\n justifyContent: 'center',\n }}\n >\n {canInitialize && onInitialize && (\n <button\n onClick={handleInitialize}\n disabled={isInitializing}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 24px',\n backgroundColor: theme.colors.primary,\n color: '#fff',\n borderRadius: theme.radii[2],\n border: 'none',\n fontSize: theme.fontSizes[2],\n fontWeight: 500,\n cursor: isInitializing ? 'wait' : 'pointer',\n opacity: isInitializing ? 0.7 : 1,\n transition: 'opacity 0.2s',\n }}\n onMouseEnter={(e) => {\n if (!isInitializing) e.currentTarget.style.opacity = '0.9';\n }}\n onMouseLeave={(e) => {\n if (!isInitializing) e.currentTarget.style.opacity = '1';\n }}\n >\n {isInitializing ? (\n <>\n <Loader2 size={16} style={{ animation: 'spin 1s linear infinite' }} />\n <span>Initializing...</span>\n </>\n ) : (\n <>\n <FolderPlus size={16} />\n <span>Initialize Backlog.md</span>\n </>\n )}\n </button>\n )}\n\n {showBacklogLink && (\n <a\n href=\"https://github.com/MrLesk/Backlog.md\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 24px',\n backgroundColor: canInitialize ? 'transparent' : theme.colors.primary,\n color: canInitialize ? theme.colors.primary : '#fff',\n border: canInitialize ? `1px solid ${theme.colors.primary}` : 'none',\n borderRadius: theme.radii[2],\n textDecoration: 'none',\n fontSize: theme.fontSizes[2],\n fontWeight: 500,\n transition: 'opacity 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = '0.9';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = '1';\n }}\n >\n <span>Learn about Backlog.md</span>\n <ExternalLink size={16} />\n </a>\n )}\n </div>\n\n {/* Success message */}\n {initSuccess && (\n <div\n style={{\n marginTop: '16px',\n padding: '16px 20px',\n backgroundColor: `${theme.colors.success || '#22c55e'}15`,\n border: `1px solid ${theme.colors.success || '#22c55e'}`,\n borderRadius: theme.radii[2],\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n maxWidth: '480px',\n }}\n >\n <CheckCircle2 size={20} color={theme.colors.success || '#22c55e'} style={{ flexShrink: 0, marginTop: '2px' }} />\n <div style={{ textAlign: 'left' }}>\n <p style={{ margin: 0, fontWeight: 600, color: theme.colors.text, fontSize: theme.fontSizes[2] }}>\n Backlog.md initialized!\n </p>\n <p style={{ margin: '8px 0 0', color: theme.colors.textSecondary, fontSize: theme.fontSizes[1], lineHeight: 1.5 }}>\n Created <code style={{ padding: '2px 6px', backgroundColor: theme.colors.surface, borderRadius: '4px', fontFamily: theme.fonts.monospace, fontSize: '0.9em' }}>backlog/config.yml</code>.\n Refresh the panel or reopen the repository to see your kanban board.\n </p>\n </div>\n </div>\n )}\n\n {/* Error message */}\n {initError && (\n <div\n style={{\n marginTop: '16px',\n padding: '12px 16px',\n backgroundColor: `${theme.colors.error}15`,\n border: `1px solid ${theme.colors.error}`,\n borderRadius: theme.radii[2],\n color: theme.colors.error,\n fontSize: theme.fontSizes[1],\n }}\n >\n {initError}\n </div>\n )}\n\n {!initSuccess && <div\n style={{\n marginTop: '48px',\n padding: '16px',\n backgroundColor: `${theme.colors.primary}10`,\n borderRadius: theme.radii[2],\n maxWidth: '560px',\n }}\n >\n <p\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n <strong style={{ color: theme.colors.text }}>\n Want to use this panel?\n </strong>{' '}\n Initialize Backlog.md in your repository by running{' '}\n <code\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.surface,\n borderRadius: '4px',\n fontFamily: theme.fonts.monospace,\n fontSize: '0.9em',\n }}\n >\n backlog init\n </code>{' '}\n in your project directory.\n </p>\n </div>}\n </div>\n </>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { Kanban, AlertCircle } from 'lucide-react';\nimport { ThemeProvider, useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../types';\nimport { useKanbanData, SOURCE_DISPLAY_LABELS, type SourceColumn } from './kanban/hooks/useKanbanData';\nimport { KanbanColumn } from './kanban/components/KanbanColumn';\nimport { EmptyState } from './kanban/components/EmptyState';\nimport { Core, type Task } from '@backlog-md/core';\n\n/**\n * KanbanPanelContent - Internal component that uses theme\n */\nconst KanbanPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n}) => {\n const { theme } = useTheme();\n const [_selectedTask, setSelectedTask] = useState<Task | null>(null);\n const { sources, tasksBySource, columnStates, loadMore, error, isBacklogProject, refreshData } = useKanbanData({\n context,\n actions,\n tasksLimit: 20,\n completedLimit: 5,\n });\n\n const handleTaskClick = (task: Task) => {\n setSelectedTask(task);\n // In the future, this will open a task detail modal\n // Task click logged for development\n };\n\n // Check if we can initialize (need file system adapter with write capability)\n const fileSystem = context.adapters?.fileSystem;\n const canInitialize = Boolean(\n fileSystem?.writeFile && fileSystem?.createDir && context.currentScope.repository?.path\n );\n\n // Initialize Backlog.md project\n const handleInitialize = useCallback(async () => {\n if (!fileSystem?.writeFile || !fileSystem?.createDir) {\n throw new Error('File system adapter not available');\n }\n\n const repoPath = context.currentScope.repository?.path;\n if (!repoPath) {\n throw new Error('Repository path not available');\n }\n\n // Create a minimal adapter for Core that wraps the panel's fileSystem\n // Only the methods used by initProject need real implementations\n const notImplemented = () => { throw new Error('Not implemented'); };\n const fsAdapter = {\n // Used by initProject\n exists: async (path: string) => {\n try {\n await fileSystem.readFile(path);\n return true;\n } catch {\n return false;\n }\n },\n writeFile: async (path: string, content: string) => { await fileSystem.writeFile(path, content); },\n createDir: async (path: string, _options?: { recursive?: boolean }) => { await fileSystem.createDir!(path); },\n join: (...paths: string[]) => paths.join('/').replace(/\\/+/g, '/'),\n // Not used by initProject - stubs\n readFile: async (path: string) => fileSystem.readFile(path) as Promise<string>,\n deleteFile: async () => notImplemented(),\n readDir: async () => [] as string[],\n isDirectory: async () => false,\n rename: async () => notImplemented(),\n stat: async () => ({ mtime: new Date(), isDirectory: false, size: 0 }),\n dirname: (path: string) => path.split('/').slice(0, -1).join('/') || '/',\n basename: (path: string) => path.split('/').pop() || '',\n extname: (path: string) => {\n const base = path.split('/').pop() || '';\n const dot = base.lastIndexOf('.');\n return dot > 0 ? base.slice(dot) : '';\n },\n relative: (_from: string, to: string) => to,\n isAbsolute: (path: string) => path.startsWith('/'),\n normalize: (path: string) => path.replace(/\\/+/g, '/'),\n homedir: () => '/',\n };\n\n const core = new Core({\n projectRoot: repoPath,\n adapters: { fs: fsAdapter },\n });\n\n // Get project name from repo\n const projectName = context.currentScope.repository?.name || 'Backlog';\n\n await core.initProject({ projectName });\n\n // Refresh to pick up the new project\n await refreshData();\n }, [fileSystem, context.currentScope.repository, refreshData]);\n\n return (\n <div\n style={{\n padding: 'clamp(12px, 3vw, 20px)', // Responsive padding for mobile\n fontFamily: theme.fonts.body,\n height: '100%',\n boxSizing: 'border-box', // Include padding in height calculation\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n overflow: 'hidden', // Prevent outer scrolling\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n }}\n >\n {/* Header */}\n <div\n style={{\n flexShrink: 0, // Don't shrink header\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n flexWrap: 'wrap',\n }}\n >\n <Kanban size={24} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: theme.fontSizes[4],\n color: theme.colors.text,\n }}\n >\n Kanban Board\n </h2>\n </div>\n\n {/* Error Message */}\n {error && (\n <div\n style={{\n flexShrink: 0, // Don't shrink error message\n padding: '12px',\n background: `${theme.colors.error}20`,\n border: `1px solid ${theme.colors.error}`,\n borderRadius: theme.radii[2],\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.error,\n fontSize: theme.fontSizes[1],\n }}\n >\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n {/* Board Container or Empty State */}\n {!isBacklogProject ? (\n <EmptyState\n canInitialize={canInitialize}\n onInitialize={handleInitialize}\n />\n ) : (\n <div\n style={{\n flex: 1,\n display: 'flex',\n gap: '16px',\n justifyContent: 'center', // Center columns when they hit max-width\n overflowX: 'auto',\n overflowY: 'hidden',\n paddingBottom: '8px',\n minHeight: 0, // Allow flex child to shrink below content size\n WebkitOverflowScrolling: 'touch', // Smooth scrolling on iOS\n }}\n >\n {sources.map((source) => {\n const columnTasks = tasksBySource.get(source) || [];\n const columnState = columnStates.get(source);\n return (\n <KanbanColumn\n key={source}\n status={SOURCE_DISPLAY_LABELS[source as SourceColumn]}\n tasks={columnTasks}\n total={columnState?.total}\n hasMore={columnState?.hasMore}\n isLoadingMore={columnState?.isLoadingMore}\n onLoadMore={() => loadMore(source as SourceColumn)}\n onTaskClick={handleTaskClick}\n />\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * KanbanPanel - A kanban board panel for visualizing Backlog.md tasks.\n *\n * This panel shows:\n * - Kanban board with configurable status columns\n * - Task cards with priority indicators\n * - Labels and assignee information\n * - Mock data for testing (to be replaced with real data)\n */\nexport const KanbanPanel: React.FC<PanelComponentProps> = (props) => {\n return (\n <ThemeProvider>\n <KanbanPanelContent {...props} />\n </ThemeProvider>\n );\n};\n","/**\n * Kanban Panel Tools\n *\n * UTCP-compatible tools for the Kanban panel extension.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type {\n PanelTool,\n PanelToolsMetadata,\n} from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Move Task\n */\nexport const moveTaskTool: PanelTool = {\n name: 'move_task',\n description: 'Moves a task to a different status column on the kanban board',\n inputs: {\n type: 'object',\n properties: {\n taskId: {\n type: 'string',\n description: 'The ID of the task to move',\n },\n targetStatus: {\n type: 'string',\n description:\n 'The target status column (e.g., \"To Do\", \"In Progress\", \"Done\")',\n },\n },\n required: ['taskId', 'targetStatus'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['kanban', 'task', 'move', 'status'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:move-task',\n },\n};\n\n/**\n * Tool: Select Task\n */\nexport const selectTaskTool: PanelTool = {\n name: 'select_task',\n description: 'Selects a task to view its details',\n inputs: {\n type: 'object',\n properties: {\n taskId: {\n type: 'string',\n description: 'The ID of the task to select',\n },\n },\n required: ['taskId'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n task: { type: 'object' },\n },\n },\n tags: ['kanban', 'task', 'select', 'view'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:select-task',\n },\n};\n\n/**\n * Tool: Refresh Board\n */\nexport const refreshBoardTool: PanelTool = {\n name: 'refresh_board',\n description: 'Refreshes the kanban board to reload tasks from the backlog',\n inputs: {\n type: 'object',\n properties: {},\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['kanban', 'board', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:refresh-board',\n },\n};\n\n/**\n * Tool: Filter Tasks\n */\nexport const filterTasksTool: PanelTool = {\n name: 'filter_tasks',\n description:\n 'Filters tasks on the kanban board by labels, assignee, or priority',\n inputs: {\n type: 'object',\n properties: {\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Filter by task labels',\n },\n assignee: {\n type: 'string',\n description: 'Filter by assignee name',\n },\n priority: {\n type: 'string',\n description: 'Filter by priority level',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n count: { type: 'number' },\n },\n },\n tags: ['kanban', 'task', 'filter', 'search'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:filter-tasks',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const kanbanPanelTools: PanelTool[] = [\n moveTaskTool,\n selectTaskTool,\n refreshBoardTool,\n filterTasksTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const kanbanPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.kanban-panel',\n name: 'Kanban Panel',\n description: 'Tools provided by the backlogmd kanban panel extension',\n tools: kanbanPanelTools,\n};\n","import { KanbanPanel } from './panels/KanbanPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { kanbanPanelTools, kanbanPanelToolsMetadata } 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: 'principal-ade.kanban-panel',\n name: 'Kanban Board',\n icon: '📋',\n version: '0.1.0',\n author: 'Principal ADE',\n description: 'Kanban board for visualizing Backlog.md tasks',\n slices: ['fileTree'], // Data slices this panel depends on\n tools: kanbanPanelTools,\n },\n component: KanbanPanel,\n\n // Optional: Called when this specific panel is mounted\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'Kanban Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n // Optional: Called when this specific panel is unmounted\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Kanban 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 - Kanban Panel Extension');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - Kanban Panel Extension');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/backlogmd-kanban-panel/tools' to import without React dependencies.\n */\nexport {\n kanbanPanelTools,\n kanbanPanelToolsMetadata,\n moveTaskTool,\n selectTaskTool,\n refreshBoardTool,\n filterTasksTool,\n} from './tools';\n"],"names":["__iconNode","theme","React","Loader2","CheckCircle2","_a","_b","AlertCircle"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}
|
|
1
|
+
{"version":3,"file":"panels.bundle.js","sources":["../node_modules/lucide-react/dist/esm/shared/src/utils.js","../node_modules/lucide-react/dist/esm/defaultAttributes.js","../node_modules/lucide-react/dist/esm/Icon.js","../node_modules/lucide-react/dist/esm/createLucideIcon.js","../node_modules/lucide-react/dist/esm/icons/circle-alert.js","../node_modules/lucide-react/dist/esm/icons/circle-check.js","../node_modules/lucide-react/dist/esm/icons/external-link.js","../node_modules/lucide-react/dist/esm/icons/file-text.js","../node_modules/lucide-react/dist/esm/icons/folder-plus.js","../node_modules/lucide-react/dist/esm/icons/kanban.js","../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../node_modules/@principal-ade/industry-theme/dist/esm/index.js","../node_modules/@backlog-md/core/dist/markdown/index.js","../node_modules/@backlog-md/core/dist/core/config-parser.js","../node_modules/@backlog-md/core/dist/utils/sorting.js","../node_modules/@backlog-md/core/dist/core/Core.js","../src/adapters/PanelFileSystemAdapter.ts","../src/panels/kanban/hooks/useKanbanData.ts","../src/panels/kanban/components/KanbanColumn.tsx","../src/panels/kanban/components/EmptyState.tsx","../src/panels/KanbanPanel.tsx","../src/tools/index.ts","../src/index.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"8\", y2: \"12\", key: \"1pkeuh\" }],\n [\"line\", { x1: \"12\", x2: \"12.01\", y1: \"16\", y2: \"16\", key: \"4dfq90\" }]\n];\nconst CircleAlert = createLucideIcon(\"circle-alert\", __iconNode);\n\nexport { __iconNode, CircleAlert as default };\n//# sourceMappingURL=circle-alert.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m9 12 2 2 4-4\", key: \"dzmm74\" }]\n];\nconst CircleCheck = createLucideIcon(\"circle-check\", __iconNode);\n\nexport { __iconNode, CircleCheck as default };\n//# sourceMappingURL=circle-check.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n];\nconst ExternalLink = createLucideIcon(\"external-link\", __iconNode);\n\nexport { __iconNode, ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 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 [\"path\", { d: \"M12 10v6\", key: \"1bos4e\" }],\n [\"path\", { d: \"M9 13h6\", key: \"1uhe8q\" }],\n [\n \"path\",\n {\n d: \"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\",\n key: \"1kt360\"\n }\n ]\n];\nconst FolderPlus = createLucideIcon(\"folder-plus\", __iconNode);\n\nexport { __iconNode, FolderPlus as default };\n//# sourceMappingURL=folder-plus.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 3v14\", key: \"9nsxs2\" }],\n [\"path\", { d: \"M12 3v8\", key: \"1h2ygw\" }],\n [\"path\", { d: \"M19 3v18\", key: \"1sk56x\" }]\n];\nconst Kanban = createLucideIcon(\"kanban\", __iconNode);\n\nexport { __iconNode, Kanban as default };\n//# sourceMappingURL=kanban.js.map\n","/**\n * @license lucide-react v0.552.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]];\nconst LoaderCircle = createLucideIcon(\"loader-circle\", __iconNode);\n\nexport { __iconNode, LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","// 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 * Markdown parsing and serialization for @backlog-md/core\n *\n * This module handles conversion between markdown files and Task objects.\n */\n/**\n * Parse task markdown content into a Task object\n *\n * @param content - Raw markdown content\n * @param filePath - Path to the file (for extracting ID from filename)\n * @returns Parsed task object\n */\nexport function parseTaskMarkdown(content, filePath) {\n const { frontmatter, title, rawContent, acceptanceCriteria, description } = parseMarkdownContent(content);\n const id = extractIdFromPath(filePath);\n return {\n id,\n title: title || `Task ${id}`,\n status: frontmatter.status || \"backlog\",\n priority: frontmatter.priority,\n assignee: frontmatter.assignee || [],\n reporter: frontmatter.reporter,\n createdDate: frontmatter.createdDate || new Date().toISOString().split(\"T\")[0],\n updatedDate: frontmatter.updatedDate,\n labels: frontmatter.labels || [],\n milestone: frontmatter.milestone,\n dependencies: frontmatter.dependencies || [],\n parentTaskId: frontmatter.parentTaskId,\n subtasks: frontmatter.subtasks,\n branch: frontmatter.branch,\n ordinal: frontmatter.ordinal,\n rawContent,\n description,\n acceptanceCriteriaItems: acceptanceCriteria,\n filePath,\n };\n}\n/**\n * Serialize a Task object to markdown content\n *\n * @param task - Task to serialize\n * @returns Markdown string\n */\nexport function serializeTaskMarkdown(task) {\n const lines = [];\n // Frontmatter\n lines.push(\"---\");\n lines.push(`status: ${task.status}`);\n if (task.priority) {\n lines.push(`priority: ${task.priority}`);\n }\n if (task.assignee && task.assignee.length > 0) {\n lines.push(`assignee: [${task.assignee.join(\", \")}]`);\n }\n if (task.reporter) {\n lines.push(`reporter: ${task.reporter}`);\n }\n if (task.labels && task.labels.length > 0) {\n lines.push(`labels: [${task.labels.join(\", \")}]`);\n }\n if (task.milestone) {\n lines.push(`milestone: ${task.milestone}`);\n }\n if (task.dependencies && task.dependencies.length > 0) {\n lines.push(`dependencies: [${task.dependencies.join(\", \")}]`);\n }\n if (task.parentTaskId) {\n lines.push(`parentTaskId: ${task.parentTaskId}`);\n }\n if (task.subtasks && task.subtasks.length > 0) {\n lines.push(`subtasks: [${task.subtasks.join(\", \")}]`);\n }\n if (task.branch) {\n lines.push(`branch: ${task.branch}`);\n }\n if (task.ordinal !== undefined) {\n lines.push(`ordinal: ${task.ordinal}`);\n }\n if (task.createdDate) {\n lines.push(`createdDate: ${task.createdDate}`);\n }\n if (task.updatedDate) {\n lines.push(`updatedDate: ${task.updatedDate}`);\n }\n lines.push(\"---\");\n lines.push(\"\");\n // Title\n lines.push(`# ${task.title}`);\n lines.push(\"\");\n // Description/Body\n if (task.description) {\n lines.push(task.description);\n lines.push(\"\");\n }\n // Acceptance Criteria\n if (task.acceptanceCriteriaItems && task.acceptanceCriteriaItems.length > 0) {\n lines.push(\"## Acceptance Criteria\");\n lines.push(\"\");\n for (const criterion of task.acceptanceCriteriaItems) {\n const checkbox = criterion.checked ? \"[x]\" : \"[ ]\";\n lines.push(`- ${checkbox} ${criterion.text}`);\n }\n lines.push(\"\");\n }\n // Implementation Plan\n if (task.implementationPlan) {\n lines.push(\"## Implementation Plan\");\n lines.push(\"\");\n lines.push(task.implementationPlan);\n lines.push(\"\");\n }\n // Implementation Notes\n if (task.implementationNotes) {\n lines.push(\"## Implementation Notes\");\n lines.push(\"\");\n lines.push(task.implementationNotes);\n lines.push(\"\");\n }\n return lines.join(\"\\n\");\n}\n// --- Internal helpers ---\nfunction parseMarkdownContent(content) {\n let frontmatter = {};\n let remaining = content;\n // Extract frontmatter\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n/);\n if (frontmatterMatch) {\n frontmatter = parseFrontmatter(frontmatterMatch[1]);\n remaining = content.slice(frontmatterMatch[0].length);\n }\n // Extract title (first h1)\n let title = \"\";\n const titleMatch = remaining.match(/^#\\s+(.+)$/m);\n if (titleMatch) {\n title = titleMatch[1].trim();\n }\n // Extract acceptance criteria\n const acceptanceCriteria = parseAcceptanceCriteria(remaining);\n // Raw content is everything after frontmatter\n const rawContent = remaining.trim();\n // Description is the body text between title and first section\n const description = extractDescription(remaining, title);\n return { frontmatter, title, rawContent, description, acceptanceCriteria };\n}\nfunction parseFrontmatter(raw) {\n const result = {};\n for (const line of raw.split(\"\\n\")) {\n const match = line.match(/^(\\w+):\\s*(.+)$/);\n if (!match)\n continue;\n const [, key, value] = match;\n switch (key) {\n case \"status\":\n result.status = value.trim();\n break;\n case \"priority\":\n result.priority = value.trim();\n break;\n case \"ordinal\":\n result.ordinal = parseInt(value.trim(), 10);\n break;\n case \"reporter\":\n case \"milestone\":\n case \"parentTaskId\":\n case \"branch\":\n case \"createdDate\":\n case \"updatedDate\":\n result[key] = value.trim();\n break;\n case \"assignee\":\n case \"labels\":\n case \"dependencies\":\n case \"subtasks\":\n result[key] = parseArrayValue(value);\n break;\n }\n }\n return result;\n}\nfunction parseArrayValue(value) {\n // Handle [item1, item2] or item1, item2\n const cleaned = value.replace(/^\\[|\\]$/g, \"\").trim();\n if (!cleaned)\n return [];\n return cleaned\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n}\nfunction parseAcceptanceCriteria(content) {\n const criteria = [];\n // Look for AC section or just checkbox items\n const checkboxPattern = /^-\\s*\\[([ xX])\\]\\s*(.+)$/gm;\n let match;\n let index = 1; // 1-based index as per AcceptanceCriterion\n while ((match = checkboxPattern.exec(content)) !== null) {\n criteria.push({\n index: index++,\n checked: match[1].toLowerCase() === \"x\",\n text: match[2].trim(),\n });\n }\n return criteria;\n}\nfunction extractDescription(content, title) {\n let body = content;\n // Remove title line\n if (title) {\n body = body.replace(new RegExp(`^#\\\\s+${escapeRegex(title)}\\\\s*$`, \"m\"), \"\");\n }\n // Remove known sections\n body = body.replace(/^##\\s+Acceptance Criteria[\\s\\S]*?(?=^##|\\z)/m, \"\");\n body = body.replace(/^##\\s+Implementation Plan[\\s\\S]*?(?=^##|\\z)/m, \"\");\n body = body.replace(/^##\\s+Implementation Notes[\\s\\S]*?(?=^##|\\z)/m, \"\");\n return body.trim();\n}\nfunction extractIdFromPath(filePath) {\n // Extract from pattern: task-{id} - {title}.md or {id} - {title}.md\n const filename = filePath.split(\"/\").pop() || \"\";\n const match = filename.match(/^(?:task-)?(\\d+(?:\\.\\d+)?)\\s*-/);\n if (match) {\n return match[1];\n }\n // Fallback: use filename without extension\n return filename.replace(/\\.md$/, \"\");\n}\n/**\n * Extract title from filename\n * Pattern: \"task-001 - My Task Title.md\" -> \"My Task Title\"\n * Pattern: \"001 - My Task Title.md\" -> \"My Task Title\"\n * Fallback: filename without extension\n */\nfunction extractTitleFromPath(filePath) {\n const filename = filePath.split(\"/\").pop() || \"\";\n // Match: optional \"task-\", id, \" - \", then capture title\n const match = filename.match(/^(?:task-)?\\d+(?:\\.\\d+)?\\s*-\\s*(.+)\\.md$/);\n if (match) {\n return match[1].trim();\n }\n // Fallback: filename without extension\n return filename.replace(/\\.md$/, \"\");\n}\n/**\n * Extract source directory from file path\n * Returns \"tasks\" or \"completed\" based on path\n */\nfunction extractSourceFromPath(filePath) {\n if (filePath.includes(\"/completed/\") || filePath.includes(\"\\\\completed\\\\\")) {\n return \"completed\";\n }\n return \"tasks\";\n}\n/**\n * Extract task index entry from file path only (no file read required)\n *\n * @param filePath - Path to the task file\n * @returns TaskIndexEntry with id, title, filePath, and source\n */\nexport function extractTaskIndexFromPath(filePath) {\n return {\n id: extractIdFromPath(filePath),\n filePath,\n title: extractTitleFromPath(filePath),\n source: extractSourceFromPath(filePath),\n };\n}\nfunction escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n//# sourceMappingURL=index.js.map","/**\n * Backlog.md Config Parser\n *\n * Parses config.yml using a line-by-line approach matching the official Backlog.md\n * implementation. This is more reliable than a generic YAML parser for this format.\n */\nconst DEFAULT_STATUSES = [\"To Do\", \"In Progress\", \"Done\"];\n/**\n * Parse Backlog.md config.yml content\n */\nexport function parseBacklogConfig(content) {\n const config = {};\n const lines = content.split(\"\\n\");\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\"))\n continue;\n const colonIndex = trimmed.indexOf(\":\");\n if (colonIndex === -1)\n continue;\n const key = trimmed.substring(0, colonIndex).trim();\n const value = trimmed.substring(colonIndex + 1).trim();\n switch (key) {\n case \"project_name\":\n config.projectName = value.replace(/['\"]/g, \"\");\n break;\n case \"default_assignee\":\n config.defaultAssignee = value.replace(/['\"]/g, \"\");\n break;\n case \"default_reporter\":\n config.defaultReporter = value.replace(/['\"]/g, \"\");\n break;\n case \"default_status\":\n config.defaultStatus = value.replace(/['\"]/g, \"\");\n break;\n case \"statuses\":\n case \"labels\":\n case \"milestones\":\n if (value.startsWith(\"[\") && value.endsWith(\"]\")) {\n const arrayContent = value.slice(1, -1);\n config[key] = arrayContent\n .split(\",\")\n .map((item) => item.trim().replace(/['\"]/g, \"\"))\n .filter(Boolean);\n }\n break;\n case \"date_format\":\n config.dateFormat = value.replace(/['\"]/g, \"\");\n break;\n case \"max_column_width\":\n config.maxColumnWidth = parseInt(value, 10);\n break;\n case \"task_resolution_strategy\":\n config.taskResolutionStrategy = value.replace(/['\"]/g, \"\");\n break;\n case \"default_editor\":\n config.defaultEditor = value.replace(/[\"']/g, \"\");\n break;\n case \"auto_open_browser\":\n config.autoOpenBrowser = value.toLowerCase() === \"true\";\n break;\n case \"default_port\":\n config.defaultPort = parseInt(value, 10);\n break;\n case \"remote_operations\":\n config.remoteOperations = value.toLowerCase() === \"true\";\n break;\n case \"auto_commit\":\n config.autoCommit = value.toLowerCase() === \"true\";\n break;\n case \"zero_padded_ids\":\n config.zeroPaddedIds = parseInt(value, 10);\n break;\n case \"timezone_preference\":\n config.timezonePreference = value.replace(/['\"]/g, \"\");\n break;\n case \"include_date_time_in_dates\":\n config.includeDateTimeInDates = value.toLowerCase() === \"true\";\n break;\n case \"bypass_git_hooks\":\n config.bypassGitHooks = value.toLowerCase() === \"true\";\n break;\n case \"check_active_branches\":\n config.checkActiveBranches = value.toLowerCase() === \"true\";\n break;\n case \"active_branch_days\":\n config.activeBranchDays = parseInt(value, 10);\n break;\n }\n }\n // Apply defaults\n return {\n projectName: config.projectName || \"Backlog\",\n statuses: config.statuses || [...DEFAULT_STATUSES],\n labels: config.labels || [],\n milestones: config.milestones || [],\n defaultStatus: config.defaultStatus || DEFAULT_STATUSES[0],\n dateFormat: config.dateFormat || \"YYYY-MM-DD\",\n defaultAssignee: config.defaultAssignee,\n defaultReporter: config.defaultReporter,\n maxColumnWidth: config.maxColumnWidth,\n taskResolutionStrategy: config.taskResolutionStrategy,\n defaultEditor: config.defaultEditor,\n autoOpenBrowser: config.autoOpenBrowser,\n defaultPort: config.defaultPort,\n remoteOperations: config.remoteOperations,\n autoCommit: config.autoCommit,\n zeroPaddedIds: config.zeroPaddedIds,\n timezonePreference: config.timezonePreference,\n includeDateTimeInDates: config.includeDateTimeInDates,\n bypassGitHooks: config.bypassGitHooks,\n checkActiveBranches: config.checkActiveBranches,\n activeBranchDays: config.activeBranchDays,\n };\n}\n/**\n * Serialize BacklogConfig to config.yml format\n */\nexport function serializeBacklogConfig(config) {\n const lines = [];\n lines.push(`project_name: \"${config.projectName}\"`);\n if (config.defaultStatus) {\n lines.push(`default_status: \"${config.defaultStatus}\"`);\n }\n lines.push(`statuses: [${config.statuses.map((s) => `\"${s}\"`).join(\", \")}]`);\n lines.push(`labels: [${(config.labels || []).map((l) => `\"${l}\"`).join(\", \")}]`);\n lines.push(`milestones: [${(config.milestones || []).map((m) => `\"${m}\"`).join(\", \")}]`);\n if (config.dateFormat) {\n lines.push(`date_format: \"${config.dateFormat}\"`);\n }\n if (config.defaultAssignee) {\n lines.push(`default_assignee: \"${config.defaultAssignee}\"`);\n }\n if (config.defaultReporter) {\n lines.push(`default_reporter: \"${config.defaultReporter}\"`);\n }\n if (config.defaultEditor) {\n lines.push(`default_editor: \"${config.defaultEditor}\"`);\n }\n if (typeof config.autoCommit === \"boolean\") {\n lines.push(`auto_commit: ${config.autoCommit}`);\n }\n if (typeof config.zeroPaddedIds === \"number\") {\n lines.push(`zero_padded_ids: ${config.zeroPaddedIds}`);\n }\n if (typeof config.autoOpenBrowser === \"boolean\") {\n lines.push(`auto_open_browser: ${config.autoOpenBrowser}`);\n }\n if (typeof config.defaultPort === \"number\") {\n lines.push(`default_port: ${config.defaultPort}`);\n }\n if (typeof config.remoteOperations === \"boolean\") {\n lines.push(`remote_operations: ${config.remoteOperations}`);\n }\n if (typeof config.bypassGitHooks === \"boolean\") {\n lines.push(`bypass_git_hooks: ${config.bypassGitHooks}`);\n }\n if (typeof config.checkActiveBranches === \"boolean\") {\n lines.push(`check_active_branches: ${config.checkActiveBranches}`);\n }\n if (typeof config.activeBranchDays === \"number\") {\n lines.push(`active_branch_days: ${config.activeBranchDays}`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n//# sourceMappingURL=config-parser.js.map","/**\n * Task sorting utilities\n */\nconst PRIORITY_ORDER = {\n high: 0,\n medium: 1,\n low: 2,\n};\n/**\n * Sort tasks alphabetically by title\n *\n * @param tasks - Tasks to sort\n * @param direction - Sort direction ('asc' or 'desc')\n * @returns New sorted array\n */\nexport function sortTasksByTitle(tasks, direction = \"asc\") {\n return [...tasks].sort((a, b) => {\n const cmp = a.title.localeCompare(b.title);\n return direction === \"asc\" ? cmp : -cmp;\n });\n}\n/**\n * Sort tasks by a specified field\n *\n * @param tasks - Tasks to sort\n * @param sortBy - Field to sort by\n * @param direction - Sort direction\n * @returns New sorted array\n */\nexport function sortTasksBy(tasks, sortBy = \"title\", direction = \"asc\") {\n switch (sortBy) {\n case \"title\":\n return sortTasksByTitle(tasks, direction);\n case \"createdDate\":\n return [...tasks].sort((a, b) => {\n const cmp = a.createdDate.localeCompare(b.createdDate);\n return direction === \"asc\" ? cmp : -cmp;\n });\n case \"priority\":\n case \"ordinal\":\n default:\n // Use existing sortTasks for priority/ordinal\n const sorted = sortTasks(tasks);\n return direction === \"desc\" ? sorted.reverse() : sorted;\n }\n}\n/**\n * Sort tasks by: ordinal → priority → createdDate\n *\n * - Tasks with ordinal are sorted first by ordinal\n * - Then by priority (high → medium → low)\n * - Finally by createdDate (newest first)\n */\nexport function sortTasks(tasks) {\n return [...tasks].sort((a, b) => {\n // 1. Ordinal (if both have it)\n if (a.ordinal !== undefined && b.ordinal !== undefined) {\n return a.ordinal - b.ordinal;\n }\n // Tasks with ordinal come before tasks without\n if (a.ordinal !== undefined)\n return -1;\n if (b.ordinal !== undefined)\n return 1;\n // 2. Priority (high → medium → low → undefined)\n const aPri = a.priority ? PRIORITY_ORDER[a.priority] : 3;\n const bPri = b.priority ? PRIORITY_ORDER[b.priority] : 3;\n if (aPri !== bPri)\n return aPri - bPri;\n // 3. Created date (newest first)\n return b.createdDate.localeCompare(a.createdDate);\n });\n}\n/**\n * Group tasks by status\n *\n * @param tasks - Tasks to group\n * @param statuses - Ordered list of statuses (for column ordering)\n * @returns Map with status as key and sorted tasks as value\n */\nexport function groupTasksByStatus(tasks, statuses) {\n const grouped = new Map();\n // Initialize with all configured statuses (preserves column order)\n for (const status of statuses) {\n grouped.set(status, []);\n }\n // Group tasks\n for (const task of tasks) {\n const list = grouped.get(task.status);\n if (list) {\n list.push(task);\n }\n else {\n // Task has a status not in the config - add it anyway\n grouped.set(task.status, [task]);\n }\n }\n // Sort tasks within each status\n for (const [status, statusTasks] of grouped) {\n grouped.set(status, sortTasks(statusTasks));\n }\n return grouped;\n}\n//# sourceMappingURL=sorting.js.map","/**\n * Core - Main entry point for @backlog-md/core\n *\n * Provides a runtime-agnostic API for managing Backlog.md projects\n * by accepting adapter implementations for I/O operations.\n */\nimport { parseBacklogConfig, serializeBacklogConfig } from \"./config-parser\";\nimport { parseTaskMarkdown, extractTaskIndexFromPath } from \"../markdown\";\nimport { sortTasks, sortTasksBy, groupTasksByStatus } from \"../utils\";\n/**\n * Core class for Backlog.md operations\n *\n * @example\n * ```typescript\n * const core = new Core({\n * projectRoot: '/path/to/project',\n * adapters: { fs: new NodeFileSystemAdapter() }\n * });\n *\n * await core.initialize();\n * const tasks = core.listTasks();\n * const grouped = core.getTasksByStatus();\n * ```\n */\nexport class Core {\n projectRoot;\n fs;\n config = null;\n tasks = new Map();\n initialized = false;\n /** Lightweight task index for lazy loading (no file reads) */\n taskIndex = new Map();\n lazyInitialized = false;\n constructor(options) {\n this.projectRoot = options.projectRoot;\n this.fs = options.adapters.fs;\n }\n /**\n * Check if projectRoot contains a valid Backlog.md project\n */\n async isBacklogProject() {\n const configPath = this.fs.join(this.projectRoot, \"backlog\", \"config.yml\");\n return this.fs.exists(configPath);\n }\n /**\n * Initialize a new Backlog.md project in the projectRoot directory\n *\n * Creates the backlog/ directory and config.yml file.\n * Task directories (tasks/, completed/) are created lazily when needed.\n *\n * @param options - Optional configuration for the new project\n * @throws Error if project already exists\n *\n * @example\n * ```typescript\n * const core = new Core({ projectRoot: '/path/to/project', adapters: { fs } });\n *\n * // Initialize with defaults\n * await core.initProject();\n *\n * // Or with custom options\n * await core.initProject({\n * projectName: 'My Project',\n * statuses: ['Backlog', 'In Progress', 'Review', 'Done'],\n * labels: ['bug', 'feature', 'docs']\n * });\n * ```\n */\n async initProject(options = {}) {\n // Check if already a backlog project\n if (await this.isBacklogProject()) {\n throw new Error(`Already a Backlog.md project: config.yml exists at ${this.fs.join(this.projectRoot, \"backlog\", \"config.yml\")}`);\n }\n // Derive project name from directory if not provided\n const dirName = this.projectRoot.split(\"/\").pop() || \"Backlog\";\n const projectName = options.projectName || dirName;\n // Build config with defaults\n const statuses = options.statuses || [\"To Do\", \"In Progress\", \"Done\"];\n const config = {\n projectName,\n statuses,\n labels: options.labels || [],\n milestones: [],\n defaultStatus: options.defaultStatus || statuses[0],\n dateFormat: \"YYYY-MM-DD\",\n };\n // Create backlog directory\n const backlogDir = this.fs.join(this.projectRoot, \"backlog\");\n await this.fs.createDir(backlogDir, { recursive: true });\n // Write config.yml\n const configPath = this.fs.join(backlogDir, \"config.yml\");\n const configContent = serializeBacklogConfig(config);\n await this.fs.writeFile(configPath, configContent);\n }\n /**\n * Initialize the Core instance\n *\n * Loads configuration and discovers all tasks.\n * Must be called before using other methods.\n */\n async initialize() {\n if (this.initialized)\n return;\n // Load config\n const configPath = this.fs.join(this.projectRoot, \"backlog\", \"config.yml\");\n const configExists = await this.fs.exists(configPath);\n if (!configExists) {\n throw new Error(`Not a Backlog.md project: config.yml not found at ${configPath}`);\n }\n const configContent = await this.fs.readFile(configPath);\n this.config = parseBacklogConfig(configContent);\n // Load tasks from tasks/ directory\n const tasksDir = this.fs.join(this.projectRoot, \"backlog\", \"tasks\");\n if (await this.fs.exists(tasksDir)) {\n await this.loadTasksFromDirectory(tasksDir, \"local\");\n }\n // Load tasks from completed/ directory\n const completedDir = this.fs.join(this.projectRoot, \"backlog\", \"completed\");\n if (await this.fs.exists(completedDir)) {\n await this.loadTasksFromDirectory(completedDir, \"completed\");\n }\n this.initialized = true;\n }\n /**\n * Initialize with lazy loading (no file content reads)\n *\n * Only loads config and builds task index from file paths.\n * Task content is loaded on-demand via loadTask().\n * Use this for web/panel contexts where file reads are expensive.\n *\n * @param filePaths - Array of all file paths in the project\n */\n async initializeLazy(filePaths) {\n if (this.lazyInitialized)\n return;\n // Load config\n const configPath = this.fs.join(this.projectRoot, \"backlog\", \"config.yml\");\n const configExists = await this.fs.exists(configPath);\n if (!configExists) {\n throw new Error(`Not a Backlog.md project: config.yml not found at ${configPath}`);\n }\n const configContent = await this.fs.readFile(configPath);\n this.config = parseBacklogConfig(configContent);\n // Build task index from file paths only (no file reads)\n this.taskIndex.clear();\n for (const filePath of filePaths) {\n if (!filePath.endsWith(\".md\"))\n continue;\n // Check for backlog/tasks or backlog/completed (with or without leading slash)\n const isTaskFile = filePath.includes(\"backlog/tasks/\") || filePath.includes(\"backlog\\\\tasks\\\\\");\n const isCompletedFile = filePath.includes(\"backlog/completed/\") || filePath.includes(\"backlog\\\\completed\\\\\");\n if (!isTaskFile && !isCompletedFile)\n continue;\n // Skip config.yml\n if (filePath.endsWith(\"config.yml\"))\n continue;\n const indexEntry = extractTaskIndexFromPath(filePath);\n this.taskIndex.set(indexEntry.id, indexEntry);\n }\n this.lazyInitialized = true;\n }\n /**\n * Check if lazy initialization is complete\n */\n isLazyInitialized() {\n return this.lazyInitialized;\n }\n /**\n * Get the task index (lightweight entries)\n */\n getTaskIndex() {\n if (!this.lazyInitialized) {\n throw new Error(\"Core not lazy initialized. Call initializeLazy() first.\");\n }\n return this.taskIndex;\n }\n /**\n * Load a single task by ID (on-demand loading)\n *\n * @param id - Task ID\n * @returns Task or undefined if not found\n */\n async loadTask(id) {\n // Return from cache if already loaded\n if (this.tasks.has(id)) {\n return this.tasks.get(id);\n }\n // Get index entry\n const indexEntry = this.taskIndex.get(id);\n if (!indexEntry) {\n return undefined;\n }\n // Load and parse task file\n try {\n const content = await this.fs.readFile(indexEntry.filePath);\n const task = parseTaskMarkdown(content, indexEntry.filePath);\n task.source = indexEntry.source === \"completed\" ? \"completed\" : \"local\";\n this.tasks.set(task.id, task);\n return task;\n }\n catch (error) {\n console.warn(`Failed to load task ${id} from ${indexEntry.filePath}:`, error);\n return undefined;\n }\n }\n /**\n * Load multiple tasks by ID (on-demand loading)\n *\n * @param ids - Array of task IDs to load\n * @returns Array of loaded tasks (undefined entries filtered out)\n */\n async loadTasks(ids) {\n const tasks = await Promise.all(ids.map((id) => this.loadTask(id)));\n return tasks.filter((t) => t !== undefined);\n }\n /**\n * Get tasks by source (tasks/completed) with pagination\n *\n * This is a lazy-loading alternative to getTasksByStatusPaginated().\n * Groups by directory (tasks/ or completed/) instead of status.\n * Only loads task content for items in the requested page.\n *\n * @param options - Per-source pagination options\n * @returns Paginated tasks grouped by source\n */\n async getTasksBySourcePaginated(options) {\n if (!this.lazyInitialized) {\n throw new Error(\"Core not lazy initialized. Call initializeLazy() first.\");\n }\n const tasksLimit = options?.tasksLimit ?? 10;\n const completedLimit = options?.completedLimit ?? 10;\n const offset = options?.offset ?? 0;\n const tasksSortDirection = options?.tasksSortDirection ?? \"asc\";\n const completedSortByIdDesc = options?.completedSortByIdDesc ?? true;\n const sources = [\"tasks\", \"completed\"];\n const bySource = new Map();\n for (const source of sources) {\n // Get index entries for this source\n let entries = Array.from(this.taskIndex.values()).filter((e) => e.source === source);\n // Per-source limit\n const limit = source === \"tasks\" ? tasksLimit : completedLimit;\n // Sort by ID (numeric)\n entries = entries.sort((a, b) => {\n const aNum = parseInt(a.id.replace(/\\D/g, \"\"), 10) || 0;\n const bNum = parseInt(b.id.replace(/\\D/g, \"\"), 10) || 0;\n // Completed: descending (most recent first), Active: ascending\n return source === \"completed\" && completedSortByIdDesc\n ? bNum - aNum\n : aNum - bNum;\n });\n const total = entries.length;\n const pageEntries = entries.slice(offset, offset + limit);\n // Load only the tasks for this page\n const items = await this.loadTasks(pageEntries.map((e) => e.id));\n bySource.set(source, {\n items,\n total,\n hasMore: offset + limit < total,\n offset,\n limit,\n });\n }\n return {\n bySource,\n sources,\n };\n }\n /**\n * Load more tasks for a specific source (lazy loading)\n *\n * @param source - Source to load more from (\"tasks\" or \"completed\")\n * @param currentOffset - Current offset (items already loaded)\n * @param options - Pagination options\n * @returns Paginated result for the source\n */\n async loadMoreForSource(source, currentOffset, options) {\n if (!this.lazyInitialized) {\n throw new Error(\"Core not lazy initialized. Call initializeLazy() first.\");\n }\n const limit = options?.limit ?? 10;\n const sortDirection = options?.sortDirection ?? \"asc\";\n const completedSortByIdDesc = options?.completedSortByIdDesc ?? true;\n // Get index entries for this source\n let entries = Array.from(this.taskIndex.values()).filter((e) => e.source === source);\n // Sort by ID (numeric)\n entries = entries.sort((a, b) => {\n const aNum = parseInt(a.id.replace(/\\D/g, \"\"), 10) || 0;\n const bNum = parseInt(b.id.replace(/\\D/g, \"\"), 10) || 0;\n // Completed: descending (most recent first), Active: ascending\n return source === \"completed\" && completedSortByIdDesc\n ? bNum - aNum\n : aNum - bNum;\n });\n const total = entries.length;\n const pageEntries = entries.slice(currentOffset, currentOffset + limit);\n // Load only the tasks for this page\n const items = await this.loadTasks(pageEntries.map((e) => e.id));\n return {\n items,\n total,\n hasMore: currentOffset + limit < total,\n offset: currentOffset,\n limit,\n };\n }\n /**\n * Get the loaded configuration\n *\n * @throws Error if not initialized\n */\n getConfig() {\n this.ensureInitialized();\n return this.config;\n }\n /**\n * List all tasks, optionally filtered\n *\n * @param filter - Optional filter criteria\n * @returns Sorted array of tasks\n */\n listTasks(filter) {\n this.ensureInitialized();\n let tasks = Array.from(this.tasks.values());\n if (filter?.status) {\n tasks = tasks.filter((t) => t.status === filter.status);\n }\n if (filter?.assignee) {\n tasks = tasks.filter((t) => t.assignee.includes(filter.assignee));\n }\n if (filter?.priority) {\n tasks = tasks.filter((t) => t.priority === filter.priority);\n }\n if (filter?.labels && filter.labels.length > 0) {\n tasks = tasks.filter((t) => filter.labels.some((label) => t.labels.includes(label)));\n }\n if (filter?.parentTaskId) {\n tasks = tasks.filter((t) => t.parentTaskId === filter.parentTaskId);\n }\n return sortTasks(tasks);\n }\n /**\n * Get tasks grouped by status\n *\n * This is the primary method for kanban-style displays.\n * Returns a Map with status as key and sorted tasks as value.\n * The Map preserves the order of statuses from config.\n */\n getTasksByStatus() {\n this.ensureInitialized();\n const tasks = Array.from(this.tasks.values());\n return groupTasksByStatus(tasks, this.config.statuses);\n }\n /**\n * Get a single task by ID\n *\n * @param id - Task ID\n * @returns Task or undefined if not found\n */\n getTask(id) {\n this.ensureInitialized();\n return this.tasks.get(id);\n }\n /**\n * List tasks with pagination\n *\n * @param filter - Filter and pagination options\n * @returns Paginated result with tasks\n */\n listTasksPaginated(filter) {\n this.ensureInitialized();\n // Apply filters\n let tasks = this.applyFilters(Array.from(this.tasks.values()), filter);\n // Sort\n const pagination = filter?.pagination ?? {};\n const sortBy = pagination.sortBy ?? \"title\";\n const sortDirection = pagination.sortDirection ?? \"asc\";\n tasks = sortTasksBy(tasks, sortBy, sortDirection);\n // Paginate\n const limit = pagination.limit ?? 10;\n const offset = pagination.offset ?? 0;\n const total = tasks.length;\n const items = tasks.slice(offset, offset + limit);\n return {\n items,\n total,\n hasMore: offset + limit < total,\n offset,\n limit,\n };\n }\n /**\n * Get tasks by status with pagination per column\n *\n * @param pagination - Pagination options (applied per status)\n * @returns Paginated tasks grouped by status\n */\n getTasksByStatusPaginated(pagination) {\n this.ensureInitialized();\n const limit = pagination?.limit ?? 10;\n const offset = pagination?.offset ?? 0;\n const sortBy = pagination?.sortBy ?? \"title\";\n const sortDirection = pagination?.sortDirection ?? \"asc\";\n const byStatus = new Map();\n // Group all tasks by status first (without sorting)\n const allGrouped = new Map();\n for (const status of this.config.statuses) {\n allGrouped.set(status, []);\n }\n for (const task of this.tasks.values()) {\n const list = allGrouped.get(task.status);\n if (list) {\n list.push(task);\n }\n else {\n allGrouped.set(task.status, [task]);\n }\n }\n // Paginate each status column\n for (const status of this.config.statuses) {\n let tasks = allGrouped.get(status) ?? [];\n tasks = sortTasksBy(tasks, sortBy, sortDirection);\n const total = tasks.length;\n const items = tasks.slice(offset, offset + limit);\n byStatus.set(status, {\n items,\n total,\n hasMore: offset + limit < total,\n offset,\n limit,\n });\n }\n return {\n byStatus,\n statuses: this.config.statuses,\n };\n }\n /**\n * Load more tasks for a specific status\n *\n * @param status - Status column to load more from\n * @param currentOffset - Current offset (items already loaded)\n * @param pagination - Pagination options (limit, sortBy, sortDirection)\n * @returns Paginated result for the status\n */\n loadMoreForStatus(status, currentOffset, pagination) {\n this.ensureInitialized();\n const limit = pagination?.limit ?? 10;\n const sortBy = pagination?.sortBy ?? \"title\";\n const sortDirection = pagination?.sortDirection ?? \"asc\";\n let tasks = Array.from(this.tasks.values()).filter((t) => t.status === status);\n tasks = sortTasksBy(tasks, sortBy, sortDirection);\n const total = tasks.length;\n const items = tasks.slice(currentOffset, currentOffset + limit);\n return {\n items,\n total,\n hasMore: currentOffset + limit < total,\n offset: currentOffset,\n limit,\n };\n }\n /**\n * Reload all tasks from disk\n *\n * Useful after external changes to task files.\n */\n async reload() {\n this.tasks.clear();\n this.initialized = false;\n await this.initialize();\n }\n // --- Private methods ---\n ensureInitialized() {\n if (!this.initialized) {\n throw new Error(\"Core not initialized. Call initialize() first.\");\n }\n }\n applyFilters(tasks, filter) {\n if (!filter)\n return tasks;\n let result = tasks;\n if (filter.status) {\n result = result.filter((t) => t.status === filter.status);\n }\n if (filter.assignee) {\n result = result.filter((t) => t.assignee.includes(filter.assignee));\n }\n if (filter.priority) {\n result = result.filter((t) => t.priority === filter.priority);\n }\n if (filter.labels && filter.labels.length > 0) {\n result = result.filter((t) => filter.labels.some((label) => t.labels.includes(label)));\n }\n if (filter.parentTaskId) {\n result = result.filter((t) => t.parentTaskId === filter.parentTaskId);\n }\n return result;\n }\n async loadTasksFromDirectory(dir, source) {\n const entries = await this.fs.readDir(dir);\n for (const entry of entries) {\n const fullPath = this.fs.join(dir, entry);\n // Skip directories\n if (await this.fs.isDirectory(fullPath)) {\n continue;\n }\n // Only process markdown files\n if (!entry.endsWith(\".md\")) {\n continue;\n }\n try {\n const content = await this.fs.readFile(fullPath);\n const task = parseTaskMarkdown(content, fullPath);\n // Set source based on directory\n task.source = source;\n this.tasks.set(task.id, task);\n }\n catch (error) {\n // Log but don't fail on individual task parse errors\n console.warn(`Failed to parse task file ${fullPath}:`, error);\n }\n }\n }\n}\n//# sourceMappingURL=Core.js.map","/**\n * PanelFileSystemAdapter\n *\n * Implements FileSystemAdapter interface by wrapping the panel framework's\n * file access APIs (fileTree slice and openFile action).\n */\n\nimport type { FileSystemAdapter } from '@backlog-md/core';\n\nexport interface PanelFileAccess {\n /** Function to fetch file content by path */\n fetchFile: (path: string) => Promise<string>;\n /** List of all file paths in the repository */\n filePaths: string[];\n}\n\n/**\n * FileSystemAdapter implementation for the panel framework\n *\n * This adapter wraps the panel's file access mechanisms to provide\n * a standard FileSystemAdapter interface for @backlog-md/core.\n */\nexport class PanelFileSystemAdapter implements FileSystemAdapter {\n private readonly filePaths: Set<string>;\n private readonly directories: Set<string>;\n private readonly fetchFile: (path: string) => Promise<string>;\n\n constructor(access: PanelFileAccess) {\n this.fetchFile = access.fetchFile;\n this.filePaths = new Set(access.filePaths);\n\n // Build directory set from file paths\n this.directories = new Set<string>();\n for (const filePath of access.filePaths) {\n const parts = filePath.split('/');\n // Add all parent directories\n for (let i = 1; i < parts.length; i++) {\n this.directories.add(parts.slice(0, i).join('/'));\n }\n }\n // Root directory\n this.directories.add('');\n }\n\n async exists(path: string): Promise<boolean> {\n const normalized = this.normalizePath(path);\n return this.filePaths.has(normalized) || this.directories.has(normalized);\n }\n\n async readFile(path: string): Promise<string> {\n const normalized = this.normalizePath(path);\n if (!this.filePaths.has(normalized)) {\n throw new Error(`File not found: ${path}`);\n }\n return this.fetchFile(normalized);\n }\n\n async writeFile(_path: string, _content: string): Promise<void> {\n throw new Error('Write operations not supported in panel context');\n }\n\n async deleteFile(_path: string): Promise<void> {\n throw new Error('Delete operations not supported in panel context');\n }\n\n async createDir(_path: string, _options?: { recursive?: boolean }): Promise<void> {\n throw new Error('Directory creation not supported in panel context');\n }\n\n async readDir(path: string): Promise<string[]> {\n const normalized = this.normalizePath(path);\n const prefix = normalized ? `${normalized}/` : '';\n const entries = new Set<string>();\n\n for (const filePath of this.filePaths) {\n if (filePath.startsWith(prefix)) {\n // Get the next path segment after the prefix\n const remaining = filePath.slice(prefix.length);\n const nextSlash = remaining.indexOf('/');\n const entry = nextSlash === -1 ? remaining : remaining.slice(0, nextSlash);\n if (entry) {\n entries.add(entry);\n }\n }\n }\n\n return Array.from(entries);\n }\n\n async isDirectory(path: string): Promise<boolean> {\n const normalized = this.normalizePath(path);\n return this.directories.has(normalized) && !this.filePaths.has(normalized);\n }\n\n async rename(_from: string, _to: string): Promise<void> {\n throw new Error('Rename operations not supported in panel context');\n }\n\n async stat(path: string): Promise<{ mtime: Date; isDirectory: boolean; size: number }> {\n const normalized = this.normalizePath(path);\n const isDir = await this.isDirectory(normalized);\n const exists = await this.exists(normalized);\n\n if (!exists) {\n throw new Error(`Path not found: ${path}`);\n }\n\n return {\n mtime: new Date(),\n isDirectory: isDir,\n size: 0, // Size not available from fileTree\n };\n }\n\n // Path utilities (synchronous, pure string manipulation)\n\n join(...paths: string[]): string {\n return paths\n .filter(Boolean)\n .join('/')\n .replace(/\\/+/g, '/')\n .replace(/^\\//, '');\n }\n\n dirname(path: string): string {\n const parts = path.split('/');\n parts.pop();\n return parts.join('/');\n }\n\n basename(path: string, ext?: string): string {\n const base = path.split('/').pop() || '';\n if (ext && base.endsWith(ext)) {\n return base.slice(0, -ext.length);\n }\n return base;\n }\n\n extname(path: string): string {\n const base = this.basename(path);\n const dotIndex = base.lastIndexOf('.');\n return dotIndex === -1 ? '' : base.slice(dotIndex);\n }\n\n relative(from: string, to: string): string {\n const fromParts = from.split('/').filter(Boolean);\n const toParts = to.split('/').filter(Boolean);\n\n // Find common prefix\n let commonLength = 0;\n while (\n commonLength < fromParts.length &&\n commonLength < toParts.length &&\n fromParts[commonLength] === toParts[commonLength]\n ) {\n commonLength++;\n }\n\n // Build relative path\n const upCount = fromParts.length - commonLength;\n const relativeParts = [\n ...Array(upCount).fill('..'),\n ...toParts.slice(commonLength),\n ];\n\n return relativeParts.join('/') || '.';\n }\n\n isAbsolute(path: string): boolean {\n return path.startsWith('/');\n }\n\n normalize(path: string): string {\n return this.normalizePath(path);\n }\n\n homedir(): string {\n return '';\n }\n\n // Private helpers\n\n private normalizePath(path: string): string {\n return path\n .replace(/^\\/+/, '') // Remove leading slashes\n .replace(/\\/+$/, '') // Remove trailing slashes\n .replace(/\\/+/g, '/'); // Collapse multiple slashes\n }\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { Core, type Task, type PaginatedResult } from '@backlog-md/core';\nimport { PanelFileSystemAdapter } from '../../../adapters/PanelFileSystemAdapter';\nimport type { PanelContextValue, PanelActions } from '../../../types';\n\n/** Per-column pagination state */\nexport interface ColumnState {\n tasks: Task[];\n total: number;\n hasMore: boolean;\n isLoadingMore: boolean;\n}\n\n/** Source column names (directory-based) */\nexport type SourceColumn = 'tasks' | 'completed';\n\n/** Display labels for source columns */\nexport const SOURCE_DISPLAY_LABELS: Record<SourceColumn, string> = {\n tasks: 'Active',\n completed: 'Completed',\n};\n\nexport interface UseKanbanDataResult {\n tasks: Task[];\n /** Source columns: \"tasks\" and \"completed\" */\n sources: SourceColumn[];\n isLoading: boolean;\n error: string | null;\n isBacklogProject: boolean;\n tasksBySource: Map<string, Task[]>;\n /** Per-column pagination state */\n columnStates: Map<string, ColumnState>;\n /** Load more tasks for a specific source column */\n loadMore: (source: SourceColumn) => Promise<void>;\n refreshData: () => Promise<void>;\n updateTaskStatus: (taskId: string, newStatus: string) => Promise<void>;\n}\n\ninterface UseKanbanDataOptions {\n context?: PanelContextValue;\n actions?: PanelActions;\n /** Number of active tasks to load (default: 20) */\n tasksLimit?: number;\n /** Number of completed tasks to load (default: 5) */\n completedLimit?: number;\n}\n\nconst DEFAULT_SOURCES: SourceColumn[] = ['tasks', 'completed'];\nconst DEFAULT_TASKS_LIMIT = 20;\nconst DEFAULT_COMPLETED_LIMIT = 5;\n\n/**\n * Hook for managing kanban board data with lazy loading\n *\n * Uses 2-column view (Active/Completed) based on directory structure.\n * Only loads task content for displayed items (no file reads on init).\n * Completed tasks are sorted by ID descending (most recent first).\n */\nexport function useKanbanData(\n options?: UseKanbanDataOptions\n): UseKanbanDataResult {\n const {\n context,\n actions,\n tasksLimit = DEFAULT_TASKS_LIMIT,\n completedLimit = DEFAULT_COMPLETED_LIMIT,\n } = options || {};\n\n const [tasks, setTasks] = useState<Task[]>([]);\n const [sources] = useState<SourceColumn[]>(DEFAULT_SOURCES);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [isBacklogProject, setIsBacklogProject] = useState(false);\n const [tasksBySource, setTasksBySource] = useState<Map<string, Task[]>>(\n new Map()\n );\n const [columnStates, setColumnStates] = useState<Map<string, ColumnState>>(\n new Map()\n );\n\n // Keep reference to Core instance for loadMore\n const coreRef = useRef<Core | null>(null);\n\n // Keep track of active file fetches to avoid duplicate fetches\n const activeFilePathRef = useRef<string | null>(null);\n\n // Store stable references to context and actions\n const contextRef = useRef(context);\n const actionsRef = useRef(actions);\n\n useEffect(() => {\n contextRef.current = context;\n actionsRef.current = actions;\n }, [context, actions]);\n\n // Helper function to fetch file content (used for on-demand loading)\n const fetchFileContent = useCallback(async (path: string): Promise<string> => {\n const currentContext = contextRef.current;\n const currentActions = actionsRef.current;\n\n if (!currentActions || !currentContext) {\n throw new Error('PanelContext not available');\n }\n\n // Avoid duplicate fetches for the same file\n if (activeFilePathRef.current === path) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n activeFilePathRef.current = path;\n\n try {\n if (currentActions.openFile) {\n const result = await currentActions.openFile(path);\n if (typeof result === 'string') {\n return result;\n }\n } else {\n throw new Error('openFile action not available');\n }\n\n // Get the active file data from the slice\n const activeFileSlice = currentContext.getRepositorySlice('active-file');\n const fileData = activeFileSlice?.data as { content?: string };\n\n if (!fileData?.content) {\n throw new Error(`Failed to fetch content for ${path}`);\n }\n\n return fileData.content;\n } finally {\n activeFilePathRef.current = null;\n }\n }, []);\n\n // Track the file tree version to detect when we need to reload\n const fileTreeVersionRef = useRef<string | null>(null);\n\n // Load Backlog.md data using Core with lazy loading\n const loadBacklogData = useCallback(async () => {\n if (!context || !actions) {\n console.log('[useKanbanData] No context provided');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n setIsLoading(false);\n coreRef.current = null;\n fileTreeVersionRef.current = null;\n return;\n }\n\n // Get fileTree slice - FileTree uses allFiles (not files)\n const fileTreeSlice = context.getRepositorySlice('fileTree') as\n | { data?: { allFiles?: Array<{ path: string }>; sha?: string; metadata?: { sourceSha?: string } } }\n | undefined;\n\n if (!fileTreeSlice?.data?.allFiles) {\n console.log('[useKanbanData] FileTree not available');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n coreRef.current = null;\n fileTreeVersionRef.current = null;\n return;\n }\n\n // Get file tree version (SHA) to detect changes\n const currentVersion = fileTreeSlice.data.sha || fileTreeSlice.data.metadata?.sourceSha || 'unknown';\n\n // Skip if we already have data for this file tree version\n // Use ref to track version to avoid triggering reloads when context changes for unrelated reasons\n if (coreRef.current && fileTreeVersionRef.current === currentVersion) {\n console.log('[useKanbanData] Data already loaded for this file tree version, skipping');\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const files = fileTreeSlice.data.allFiles;\n const filePaths = files.map((f: { path: string }) => f.path);\n\n // Create FileSystemAdapter for the panel\n const fs = new PanelFileSystemAdapter({\n fetchFile: fetchFileContent,\n filePaths,\n });\n\n // Create Core instance\n const core = new Core({\n projectRoot: '',\n adapters: { fs },\n });\n\n // Check if this is a Backlog.md project\n const isProject = await core.isBacklogProject();\n if (!isProject) {\n console.log('[useKanbanData] Not a Backlog.md project');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n coreRef.current = null;\n return;\n }\n\n console.log('[useKanbanData] Loading Backlog.md data with lazy loading...');\n setIsBacklogProject(true);\n\n // Initialize with lazy loading - only reads config, builds index from paths\n await core.initializeLazy(filePaths);\n\n // Store Core reference for loadMore\n coreRef.current = core;\n\n // Use lazy paginated API - only loads task content for first page\n // Active: sorted by title, Completed: sorted by ID desc (most recent)\n const paginatedResult = await core.getTasksBySourcePaginated({\n tasksLimit,\n completedLimit,\n offset: 0,\n tasksSortDirection: 'asc',\n completedSortByIdDesc: true,\n });\n\n // Build tasksBySource map and columnStates from paginated results\n const newTasksBySource = new Map<string, Task[]>();\n const newColumnStates = new Map<string, ColumnState>();\n let allTasks: Task[] = [];\n\n for (const source of paginatedResult.sources) {\n const columnResult = paginatedResult.bySource.get(source);\n if (columnResult) {\n newTasksBySource.set(source, columnResult.items);\n newColumnStates.set(source, {\n tasks: columnResult.items,\n total: columnResult.total,\n hasMore: columnResult.hasMore,\n isLoadingMore: false,\n });\n allTasks = allTasks.concat(columnResult.items);\n } else {\n newTasksBySource.set(source, []);\n newColumnStates.set(source, {\n tasks: [],\n total: 0,\n hasMore: false,\n isLoadingMore: false,\n });\n }\n }\n\n const totalTasks = Array.from(paginatedResult.bySource.values()).reduce(\n (sum, col) => sum + col.total,\n 0\n );\n\n console.log(\n `[useKanbanData] Loaded ${allTasks.length}/${totalTasks} tasks (active: ${tasksLimit}, completed: ${completedLimit})`\n );\n\n // Store the file tree version to prevent redundant reloads\n fileTreeVersionRef.current = currentVersion;\n\n setTasks(allTasks);\n setTasksBySource(newTasksBySource);\n setColumnStates(newColumnStates);\n } catch (err) {\n console.error('[useKanbanData] Failed to load Backlog.md data:', err);\n setError(err instanceof Error ? err.message : 'Failed to load backlog data');\n setIsBacklogProject(false);\n setTasks([]);\n setTasksBySource(new Map());\n setColumnStates(new Map());\n coreRef.current = null;\n fileTreeVersionRef.current = null;\n } finally {\n setIsLoading(false);\n }\n }, [context, actions, fetchFileContent, tasksLimit, completedLimit]);\n\n // Load data on mount or when context changes\n useEffect(() => {\n loadBacklogData();\n }, [loadBacklogData]);\n\n // Load more tasks for a specific source column\n const loadMore = useCallback(\n async (source: SourceColumn) => {\n const core = coreRef.current;\n if (!core) {\n console.warn('[useKanbanData] Core not available for loadMore');\n return;\n }\n\n const currentState = columnStates.get(source);\n if (!currentState || !currentState.hasMore || currentState.isLoadingMore) {\n return;\n }\n\n // Set loading state for this column\n setColumnStates((prev) => {\n const newStates = new Map(prev);\n const state = newStates.get(source);\n if (state) {\n newStates.set(source, { ...state, isLoadingMore: true });\n }\n return newStates;\n });\n\n try {\n const currentOffset = currentState.tasks.length;\n const limit = source === 'tasks' ? tasksLimit : completedLimit;\n const result: PaginatedResult<Task> = await core.loadMoreForSource(\n source,\n currentOffset,\n {\n limit,\n sortDirection: 'asc',\n completedSortByIdDesc: source === 'completed',\n }\n );\n\n console.log(\n `[useKanbanData] Loaded ${result.items.length} more tasks for \"${source}\" (${currentOffset + result.items.length}/${result.total})`\n );\n\n // Update column state with new tasks\n setColumnStates((prev) => {\n const newStates = new Map(prev);\n const state = newStates.get(source);\n if (state) {\n const newTasks = [...state.tasks, ...result.items];\n newStates.set(source, {\n tasks: newTasks,\n total: result.total,\n hasMore: result.hasMore,\n isLoadingMore: false,\n });\n }\n return newStates;\n });\n\n // Update tasksBySource\n setTasksBySource((prev) => {\n const newMap = new Map(prev);\n const currentTasks = newMap.get(source) || [];\n newMap.set(source, [...currentTasks, ...result.items]);\n return newMap;\n });\n\n // Update all tasks\n setTasks((prev) => [...prev, ...result.items]);\n } catch (err) {\n console.error(`[useKanbanData] Failed to load more for \"${source}\":`, err);\n setError(err instanceof Error ? err.message : 'Failed to load more tasks');\n\n // Reset loading state\n setColumnStates((prev) => {\n const newStates = new Map(prev);\n const state = newStates.get(source);\n if (state) {\n newStates.set(source, { ...state, isLoadingMore: false });\n }\n return newStates;\n });\n }\n },\n [columnStates, tasksLimit, completedLimit]\n );\n\n // Refresh data\n const refreshData = useCallback(async () => {\n await loadBacklogData();\n }, [loadBacklogData]);\n\n // Update task status (not yet implemented)\n const updateTaskStatus = useCallback(\n async (_taskId: string, _newStatus: string) => {\n setError(null);\n console.warn(\n '[useKanbanData] Task status updates not yet implemented for Backlog.md'\n );\n setError('Task editing is not yet supported');\n },\n []\n );\n\n return {\n tasks,\n sources,\n isLoading,\n error,\n isBacklogProject,\n tasksBySource,\n columnStates,\n loadMore,\n refreshData,\n updateTaskStatus,\n };\n}\n","import React from 'react';\nimport { useTheme } from '@principal-ade/industry-theme';\nimport type { Task } from '@backlog-md/core';\n\ninterface KanbanColumnProps {\n status: string;\n tasks: Task[];\n /** Total number of tasks in this column (for pagination) */\n total?: number;\n /** Whether more tasks are available to load */\n hasMore?: boolean;\n /** Whether more tasks are currently being loaded */\n isLoadingMore?: boolean;\n /** Callback to load more tasks */\n onLoadMore?: () => void;\n onTaskClick?: (task: Task) => void;\n}\n\nexport const KanbanColumn: React.FC<KanbanColumnProps> = ({\n status,\n tasks,\n total,\n hasMore = false,\n isLoadingMore = false,\n onLoadMore,\n onTaskClick,\n}) => {\n const { theme } = useTheme();\n\n const getPriorityColor = (priority?: string) => {\n switch (priority) {\n case 'high':\n return theme.colors.error;\n case 'medium':\n return theme.colors.warning;\n case 'low':\n return theme.colors.info;\n default:\n return theme.colors.border;\n }\n };\n\n const remaining = total !== undefined ? total - tasks.length : 0;\n\n return (\n <div\n style={{\n flex: '1 1 0', // Grow to fill available width equally\n minWidth: '280px',\n maxWidth: '500px', // Cap max width for readability\n height: '100%', // Fill parent height\n minHeight: 0, // Allow shrinking\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n background: theme.colors.backgroundSecondary,\n borderRadius: theme.radii[2],\n padding: 'clamp(12px, 3vw, 16px)', // Responsive padding for mobile\n border: `1px solid ${theme.colors.border}`,\n }}\n >\n {/* Column Header */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h3\n style={{\n margin: 0,\n fontSize: theme.fontSizes[3],\n color: theme.colors.text,\n fontWeight: theme.fontWeights.semibold,\n }}\n >\n {status}\n </h3>\n <span\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n background: theme.colors.background,\n padding: '2px 8px',\n borderRadius: theme.radii[1],\n }}\n >\n {total !== undefined ? `${tasks.length}/${total}` : tasks.length}\n </span>\n </div>\n\n {/* Task Cards */}\n <div\n style={{\n flex: 1,\n minHeight: 0, // Critical: allows flex child to shrink and scroll\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n overflowY: 'auto',\n WebkitOverflowScrolling: 'touch',\n }}\n >\n {tasks.map((task) => (\n <div\n key={task.id}\n onClick={() => onTaskClick?.(task)}\n style={{\n flexShrink: 0, // Prevent card from shrinking\n background: theme.colors.surface,\n borderRadius: theme.radii[2],\n padding: '12px',\n border: `1px solid ${theme.colors.border}`,\n borderLeft: `4px solid ${getPriorityColor(task.priority)}`,\n cursor: onTaskClick ? 'pointer' : 'default',\n transition: 'all 0.2s ease',\n minHeight: '44px', // Minimum touch target size for mobile\n }}\n onMouseEnter={(e) => {\n if (onTaskClick) {\n e.currentTarget.style.transform = 'translateY(-2px)';\n e.currentTarget.style.boxShadow = `0 4px 8px ${theme.colors.border}`;\n }\n }}\n onMouseLeave={(e) => {\n if (onTaskClick) {\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {/* Task Title */}\n <h4\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[2],\n color: theme.colors.text,\n fontWeight: theme.fontWeights.medium,\n }}\n >\n {task.title}\n </h4>\n\n {/* Task Description */}\n {task.description && (\n <p\n style={{\n margin: '0 0 8px 0',\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n lineHeight: '1.4',\n }}\n >\n {task.description}\n </p>\n )}\n\n {/* Task Labels */}\n {task.labels && task.labels.length > 0 && (\n <div\n style={{\n display: 'flex',\n gap: '4px',\n flexWrap: 'wrap',\n marginBottom: '8px',\n }}\n >\n {task.labels.map((label) => (\n <span\n key={label}\n style={{\n fontSize: theme.fontSizes[0],\n color: theme.colors.primary,\n background: `${theme.colors.primary}20`,\n padding: '2px 8px',\n borderRadius: theme.radii[1],\n fontWeight: theme.fontWeights.medium,\n }}\n >\n {label}\n </span>\n ))}\n </div>\n )}\n\n {/* Task Footer */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n fontSize: theme.fontSizes[0],\n color: theme.colors.textMuted,\n }}\n >\n <span\n style={{\n fontFamily: theme.fonts.monospace,\n }}\n >\n {task.id}\n </span>\n {task.assignee && task.assignee.length > 0 && (\n <span\n style={{\n color: theme.colors.textSecondary,\n }}\n >\n {task.assignee.length} assignee\n {task.assignee.length !== 1 ? 's' : ''}\n </span>\n )}\n </div>\n </div>\n ))}\n\n {/* Load More Button */}\n {hasMore && onLoadMore && (\n <button\n onClick={onLoadMore}\n disabled={isLoadingMore}\n style={{\n background: theme.colors.background,\n border: `1px dashed ${theme.colors.border}`,\n borderRadius: theme.radii[2],\n padding: '12px',\n cursor: isLoadingMore ? 'wait' : 'pointer',\n color: theme.colors.textSecondary,\n fontSize: theme.fontSizes[1],\n fontWeight: theme.fontWeights.medium,\n transition: 'all 0.2s ease',\n minHeight: '44px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n }}\n onMouseEnter={(e) => {\n if (!isLoadingMore) {\n e.currentTarget.style.background = theme.colors.backgroundSecondary;\n e.currentTarget.style.borderColor = theme.colors.primary;\n e.currentTarget.style.color = theme.colors.primary;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = theme.colors.background;\n e.currentTarget.style.borderColor = theme.colors.border;\n e.currentTarget.style.color = theme.colors.textSecondary;\n }}\n >\n {isLoadingMore ? (\n <>\n <span\n style={{\n display: 'inline-block',\n width: '14px',\n height: '14px',\n border: `2px solid ${theme.colors.border}`,\n borderTopColor: theme.colors.primary,\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }}\n />\n Loading...\n </>\n ) : (\n `Load more (${remaining} remaining)`\n )}\n </button>\n )}\n </div>\n\n {/* Inline keyframes for spinner animation */}\n <style>\n {`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}\n </style>\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport { ExternalLink, FileText, FolderPlus, Loader2, CheckCircle2 } from 'lucide-react';\nimport { useTheme } from '@principal-ade/industry-theme';\n\ninterface EmptyStateProps {\n message?: string;\n description?: string;\n showBacklogLink?: boolean;\n onInitialize?: () => Promise<void>;\n canInitialize?: boolean;\n}\n\n/**\n * EmptyState component displayed when no tasks are found\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n message = 'No Backlog.md project detected',\n description = 'This repository does not appear to use Backlog.md for task management.',\n showBacklogLink = true,\n onInitialize,\n canInitialize = false,\n}) => {\n const { theme } = useTheme();\n const [isInitializing, setIsInitializing] = useState(false);\n const [initError, setInitError] = useState<string | null>(null);\n const [initSuccess, setInitSuccess] = useState(false);\n\n const handleInitialize = async () => {\n if (!onInitialize) return;\n setIsInitializing(true);\n setInitError(null);\n try {\n await onInitialize();\n setInitSuccess(true);\n } catch (err) {\n setInitError(err instanceof Error ? err.message : 'Failed to initialize');\n } finally {\n setIsInitializing(false);\n }\n };\n\n return (\n <>\n {/* Keyframe animation for spinner */}\n <style>{`\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n `}</style>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n padding: '48px 24px',\n textAlign: 'center',\n color: theme.colors.textMuted,\n }}\n >\n <FileText\n size={64}\n color={theme.colors.textMuted}\n style={{ marginBottom: '24px', opacity: 0.5 }}\n />\n\n <h3\n style={{\n fontSize: theme.fontSizes[4],\n fontWeight: 600,\n color: theme.colors.text,\n marginBottom: '12px',\n }}\n >\n {message}\n </h3>\n\n <p\n style={{\n fontSize: theme.fontSizes[2],\n color: theme.colors.textMuted,\n marginBottom: '32px',\n maxWidth: '480px',\n lineHeight: 1.6,\n }}\n >\n {description}\n </p>\n\n {/* Action buttons */}\n <div\n style={{\n display: 'flex',\n gap: '12px',\n flexWrap: 'wrap',\n justifyContent: 'center',\n }}\n >\n {canInitialize && onInitialize && (\n <button\n onClick={handleInitialize}\n disabled={isInitializing}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 24px',\n backgroundColor: theme.colors.primary,\n color: '#fff',\n borderRadius: theme.radii[2],\n border: 'none',\n fontSize: theme.fontSizes[2],\n fontWeight: 500,\n cursor: isInitializing ? 'wait' : 'pointer',\n opacity: isInitializing ? 0.7 : 1,\n transition: 'opacity 0.2s',\n }}\n onMouseEnter={(e) => {\n if (!isInitializing) e.currentTarget.style.opacity = '0.9';\n }}\n onMouseLeave={(e) => {\n if (!isInitializing) e.currentTarget.style.opacity = '1';\n }}\n >\n {isInitializing ? (\n <>\n <Loader2 size={16} style={{ animation: 'spin 1s linear infinite' }} />\n <span>Initializing...</span>\n </>\n ) : (\n <>\n <FolderPlus size={16} />\n <span>Initialize Backlog.md</span>\n </>\n )}\n </button>\n )}\n\n {showBacklogLink && (\n <a\n href=\"https://github.com/MrLesk/Backlog.md\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 24px',\n backgroundColor: canInitialize ? 'transparent' : theme.colors.primary,\n color: canInitialize ? theme.colors.primary : '#fff',\n border: canInitialize ? `1px solid ${theme.colors.primary}` : 'none',\n borderRadius: theme.radii[2],\n textDecoration: 'none',\n fontSize: theme.fontSizes[2],\n fontWeight: 500,\n transition: 'opacity 0.2s',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.opacity = '0.9';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.opacity = '1';\n }}\n >\n <span>Learn about Backlog.md</span>\n <ExternalLink size={16} />\n </a>\n )}\n </div>\n\n {/* Success message */}\n {initSuccess && (\n <div\n style={{\n marginTop: '16px',\n padding: '16px 20px',\n backgroundColor: `${theme.colors.success || '#22c55e'}15`,\n border: `1px solid ${theme.colors.success || '#22c55e'}`,\n borderRadius: theme.radii[2],\n display: 'flex',\n alignItems: 'flex-start',\n gap: '12px',\n maxWidth: '480px',\n }}\n >\n <CheckCircle2 size={20} color={theme.colors.success || '#22c55e'} style={{ flexShrink: 0, marginTop: '2px' }} />\n <div style={{ textAlign: 'left' }}>\n <p style={{ margin: 0, fontWeight: 600, color: theme.colors.text, fontSize: theme.fontSizes[2] }}>\n Backlog.md initialized!\n </p>\n <p style={{ margin: '8px 0 0', color: theme.colors.textSecondary, fontSize: theme.fontSizes[1], lineHeight: 1.5 }}>\n Created <code style={{ padding: '2px 6px', backgroundColor: theme.colors.surface, borderRadius: '4px', fontFamily: theme.fonts.monospace, fontSize: '0.9em' }}>backlog/config.yml</code>.\n Refresh the panel or reopen the repository to see your kanban board.\n </p>\n </div>\n </div>\n )}\n\n {/* Error message */}\n {initError && (\n <div\n style={{\n marginTop: '16px',\n padding: '12px 16px',\n backgroundColor: `${theme.colors.error}15`,\n border: `1px solid ${theme.colors.error}`,\n borderRadius: theme.radii[2],\n color: theme.colors.error,\n fontSize: theme.fontSizes[1],\n }}\n >\n {initError}\n </div>\n )}\n\n {!initSuccess && <div\n style={{\n marginTop: '48px',\n padding: '16px',\n backgroundColor: `${theme.colors.primary}10`,\n borderRadius: theme.radii[2],\n maxWidth: '560px',\n }}\n >\n <p\n style={{\n fontSize: theme.fontSizes[1],\n color: theme.colors.textSecondary,\n margin: 0,\n lineHeight: 1.5,\n }}\n >\n <strong style={{ color: theme.colors.text }}>\n Want to use this panel?\n </strong>{' '}\n Initialize Backlog.md in your repository by running{' '}\n <code\n style={{\n padding: '2px 6px',\n backgroundColor: theme.colors.surface,\n borderRadius: '4px',\n fontFamily: theme.fonts.monospace,\n fontSize: '0.9em',\n }}\n >\n backlog init\n </code>{' '}\n in your project directory.\n </p>\n </div>}\n </div>\n </>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { Kanban, AlertCircle } from 'lucide-react';\nimport { ThemeProvider, useTheme } from '@principal-ade/industry-theme';\nimport type { PanelComponentProps } from '../types';\nimport { useKanbanData, SOURCE_DISPLAY_LABELS, type SourceColumn } from './kanban/hooks/useKanbanData';\nimport { KanbanColumn } from './kanban/components/KanbanColumn';\nimport { EmptyState } from './kanban/components/EmptyState';\nimport { Core, type Task } from '@backlog-md/core';\n\n/**\n * KanbanPanelContent - Internal component that uses theme\n */\nconst KanbanPanelContent: React.FC<PanelComponentProps> = ({\n context,\n actions,\n}) => {\n const { theme } = useTheme();\n const [_selectedTask, setSelectedTask] = useState<Task | null>(null);\n const { sources, tasksBySource, columnStates, loadMore, error, isBacklogProject, refreshData } = useKanbanData({\n context,\n actions,\n tasksLimit: 20,\n completedLimit: 5,\n });\n\n const handleTaskClick = (task: Task) => {\n setSelectedTask(task);\n // In the future, this will open a task detail modal\n // Task click logged for development\n };\n\n // Check if we can initialize (need file system adapter with write capability)\n const fileSystem = context.adapters?.fileSystem;\n const canInitialize = Boolean(\n fileSystem?.writeFile && fileSystem?.createDir && context.currentScope.repository?.path\n );\n\n // Initialize Backlog.md project\n const handleInitialize = useCallback(async () => {\n if (!fileSystem?.writeFile || !fileSystem?.createDir) {\n throw new Error('File system adapter not available');\n }\n\n const repoPath = context.currentScope.repository?.path;\n if (!repoPath) {\n throw new Error('Repository path not available');\n }\n\n // Create a minimal adapter for Core that wraps the panel's fileSystem\n // Only the methods used by initProject need real implementations\n const notImplemented = () => { throw new Error('Not implemented'); };\n const fsAdapter = {\n // Used by initProject\n exists: async (path: string) => {\n try {\n await fileSystem.readFile(path);\n return true;\n } catch {\n return false;\n }\n },\n writeFile: async (path: string, content: string) => { await fileSystem.writeFile(path, content); },\n createDir: async (path: string, _options?: { recursive?: boolean }) => { await fileSystem.createDir!(path); },\n join: (...paths: string[]) => paths.join('/').replace(/\\/+/g, '/'),\n // Not used by initProject - stubs\n readFile: async (path: string) => fileSystem.readFile(path) as Promise<string>,\n deleteFile: async () => notImplemented(),\n readDir: async () => [] as string[],\n isDirectory: async () => false,\n rename: async () => notImplemented(),\n stat: async () => ({ mtime: new Date(), isDirectory: false, size: 0 }),\n dirname: (path: string) => path.split('/').slice(0, -1).join('/') || '/',\n basename: (path: string) => path.split('/').pop() || '',\n extname: (path: string) => {\n const base = path.split('/').pop() || '';\n const dot = base.lastIndexOf('.');\n return dot > 0 ? base.slice(dot) : '';\n },\n relative: (_from: string, to: string) => to,\n isAbsolute: (path: string) => path.startsWith('/'),\n normalize: (path: string) => path.replace(/\\/+/g, '/'),\n homedir: () => '/',\n };\n\n const core = new Core({\n projectRoot: repoPath,\n adapters: { fs: fsAdapter },\n });\n\n // Get project name from repo\n const projectName = context.currentScope.repository?.name || 'Backlog';\n\n await core.initProject({ projectName });\n\n // Refresh to pick up the new project\n await refreshData();\n }, [fileSystem, context.currentScope.repository, refreshData]);\n\n return (\n <div\n style={{\n padding: 'clamp(12px, 3vw, 20px)', // Responsive padding for mobile\n fontFamily: theme.fonts.body,\n height: '100%',\n boxSizing: 'border-box', // Include padding in height calculation\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n overflow: 'hidden', // Prevent outer scrolling\n backgroundColor: theme.colors.background,\n color: theme.colors.text,\n }}\n >\n {/* Header */}\n <div\n style={{\n flexShrink: 0, // Don't shrink header\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n flexWrap: 'wrap',\n }}\n >\n <Kanban size={24} color={theme.colors.primary} />\n <h2\n style={{\n margin: 0,\n fontSize: theme.fontSizes[4],\n color: theme.colors.text,\n }}\n >\n Kanban Board\n </h2>\n </div>\n\n {/* Error Message */}\n {error && (\n <div\n style={{\n flexShrink: 0, // Don't shrink error message\n padding: '12px',\n background: `${theme.colors.error}20`,\n border: `1px solid ${theme.colors.error}`,\n borderRadius: theme.radii[2],\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n color: theme.colors.error,\n fontSize: theme.fontSizes[1],\n }}\n >\n <AlertCircle size={16} />\n <span>{error}</span>\n </div>\n )}\n\n {/* Board Container or Empty State */}\n {!isBacklogProject ? (\n <EmptyState\n canInitialize={canInitialize}\n onInitialize={handleInitialize}\n />\n ) : (\n <div\n style={{\n flex: 1,\n display: 'flex',\n gap: '16px',\n justifyContent: 'center', // Center columns when they hit max-width\n overflowX: 'auto',\n overflowY: 'hidden',\n paddingBottom: '8px',\n minHeight: 0, // Allow flex child to shrink below content size\n WebkitOverflowScrolling: 'touch', // Smooth scrolling on iOS\n }}\n >\n {sources.map((source) => {\n const columnTasks = tasksBySource.get(source) || [];\n const columnState = columnStates.get(source);\n return (\n <KanbanColumn\n key={source}\n status={SOURCE_DISPLAY_LABELS[source as SourceColumn]}\n tasks={columnTasks}\n total={columnState?.total}\n hasMore={columnState?.hasMore}\n isLoadingMore={columnState?.isLoadingMore}\n onLoadMore={() => loadMore(source as SourceColumn)}\n onTaskClick={handleTaskClick}\n />\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * KanbanPanel - A kanban board panel for visualizing Backlog.md tasks.\n *\n * This panel shows:\n * - Kanban board with configurable status columns\n * - Task cards with priority indicators\n * - Labels and assignee information\n * - Mock data for testing (to be replaced with real data)\n */\nexport const KanbanPanel: React.FC<PanelComponentProps> = (props) => {\n return (\n <ThemeProvider>\n <KanbanPanelContent {...props} />\n </ThemeProvider>\n );\n};\n","/**\n * Kanban Panel Tools\n *\n * UTCP-compatible tools for the Kanban panel extension.\n * These tools can be invoked by AI agents and emit events that panels listen for.\n *\n * IMPORTANT: This file should NOT import any React components to ensure\n * it can be imported server-side without pulling in React dependencies.\n * Use the './tools' subpath export for server-safe imports.\n */\n\nimport type {\n PanelTool,\n PanelToolsMetadata,\n} from '@principal-ade/utcp-panel-event';\n\n/**\n * Tool: Move Task\n */\nexport const moveTaskTool: PanelTool = {\n name: 'move_task',\n description: 'Moves a task to a different status column on the kanban board',\n inputs: {\n type: 'object',\n properties: {\n taskId: {\n type: 'string',\n description: 'The ID of the task to move',\n },\n targetStatus: {\n type: 'string',\n description:\n 'The target status column (e.g., \"To Do\", \"In Progress\", \"Done\")',\n },\n },\n required: ['taskId', 'targetStatus'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n message: { type: 'string' },\n },\n },\n tags: ['kanban', 'task', 'move', 'status'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:move-task',\n },\n};\n\n/**\n * Tool: Select Task\n */\nexport const selectTaskTool: PanelTool = {\n name: 'select_task',\n description: 'Selects a task to view its details',\n inputs: {\n type: 'object',\n properties: {\n taskId: {\n type: 'string',\n description: 'The ID of the task to select',\n },\n },\n required: ['taskId'],\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n task: { type: 'object' },\n },\n },\n tags: ['kanban', 'task', 'select', 'view'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:select-task',\n },\n};\n\n/**\n * Tool: Refresh Board\n */\nexport const refreshBoardTool: PanelTool = {\n name: 'refresh_board',\n description: 'Refreshes the kanban board to reload tasks from the backlog',\n inputs: {\n type: 'object',\n properties: {},\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n },\n },\n tags: ['kanban', 'board', 'refresh'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:refresh-board',\n },\n};\n\n/**\n * Tool: Filter Tasks\n */\nexport const filterTasksTool: PanelTool = {\n name: 'filter_tasks',\n description:\n 'Filters tasks on the kanban board by labels, assignee, or priority',\n inputs: {\n type: 'object',\n properties: {\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Filter by task labels',\n },\n assignee: {\n type: 'string',\n description: 'Filter by assignee name',\n },\n priority: {\n type: 'string',\n description: 'Filter by priority level',\n },\n },\n },\n outputs: {\n type: 'object',\n properties: {\n success: { type: 'boolean' },\n count: { type: 'number' },\n },\n },\n tags: ['kanban', 'task', 'filter', 'search'],\n tool_call_template: {\n call_template_type: 'panel_event',\n event_type: 'industry-theme.kanban-panel:filter-tasks',\n },\n};\n\n/**\n * All tools exported as an array.\n */\nexport const kanbanPanelTools: PanelTool[] = [\n moveTaskTool,\n selectTaskTool,\n refreshBoardTool,\n filterTasksTool,\n];\n\n/**\n * Panel tools metadata for registration with PanelToolRegistry.\n */\nexport const kanbanPanelToolsMetadata: PanelToolsMetadata = {\n id: 'industry-theme.kanban-panel',\n name: 'Kanban Panel',\n description: 'Tools provided by the backlogmd kanban panel extension',\n tools: kanbanPanelTools,\n};\n","import { KanbanPanel } from './panels/KanbanPanel';\nimport type { PanelDefinition, PanelContextValue } from './types';\nimport { kanbanPanelTools, kanbanPanelToolsMetadata } 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: 'principal-ade.kanban-panel',\n name: 'Kanban Board',\n icon: '📋',\n version: '0.1.0',\n author: 'Principal ADE',\n description: 'Kanban board for visualizing Backlog.md tasks',\n slices: ['fileTree'], // Data slices this panel depends on\n tools: kanbanPanelTools,\n },\n component: KanbanPanel,\n\n // Optional: Called when this specific panel is mounted\n onMount: async (context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log(\n 'Kanban Panel mounted',\n context.currentScope.repository?.path\n );\n },\n\n // Optional: Called when this specific panel is unmounted\n onUnmount: async (_context: PanelContextValue) => {\n // eslint-disable-next-line no-console\n console.log('Kanban 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 - Kanban Panel Extension');\n};\n\n/**\n * Optional: Called once when the package is unloaded.\n * Use this for package-level cleanup.\n */\nexport const onPackageUnload = async () => {\n // eslint-disable-next-line no-console\n console.log('Panel package unloading - Kanban Panel Extension');\n};\n\n/**\n * Export tools for server-safe imports.\n * Use '@industry-theme/backlogmd-kanban-panel/tools' to import without React dependencies.\n */\nexport {\n kanbanPanelTools,\n kanbanPanelToolsMetadata,\n moveTaskTool,\n selectTaskTool,\n refreshBoardTool,\n filterTasksTool,\n} from './tools';\n"],"names":["__iconNode","theme","React","Loader2","CheckCircle2","_a","_b","AlertCircle"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]}
|
package/package.json
CHANGED