mindpm 1.1.2 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -201
- package/README.md +168 -168
- package/dist/index.js +345 -2
- package/dist/ui/assets/index-CLK3PAFj.js +2 -0
- package/dist/ui/assets/index-D3uZo-NO.css +1 -0
- package/dist/ui/index.html +13 -0
- package/package.json +51 -49
package/dist/index.js
CHANGED
|
@@ -705,6 +705,341 @@ function registerNoteTools(server2) {
|
|
|
705
705
|
|
|
706
706
|
// src/tools/sessions.ts
|
|
707
707
|
import { z as z5 } from "zod/v4";
|
|
708
|
+
|
|
709
|
+
// src/server/http.ts
|
|
710
|
+
import { createServer } from "http";
|
|
711
|
+
import { readFile } from "fs/promises";
|
|
712
|
+
import { join, extname } from "path";
|
|
713
|
+
import { fileURLToPath } from "url";
|
|
714
|
+
import { dirname as dirname2 } from "path";
|
|
715
|
+
import { spawn } from "child_process";
|
|
716
|
+
|
|
717
|
+
// src/server/routes.ts
|
|
718
|
+
var listProjects = async (_req, res) => {
|
|
719
|
+
const db2 = getDb();
|
|
720
|
+
const url = new URL(_req.url || "/", "http://localhost");
|
|
721
|
+
const status = url.searchParams.get("status");
|
|
722
|
+
let rows;
|
|
723
|
+
if (status) {
|
|
724
|
+
rows = db2.prepare("SELECT * FROM projects WHERE status = ? ORDER BY updated_at DESC").all(status);
|
|
725
|
+
} else {
|
|
726
|
+
rows = db2.prepare("SELECT * FROM projects ORDER BY updated_at DESC").all();
|
|
727
|
+
}
|
|
728
|
+
sendJson(res, 200, rows);
|
|
729
|
+
};
|
|
730
|
+
var getProject = async (_req, res, params) => {
|
|
731
|
+
const db2 = getDb();
|
|
732
|
+
const project = db2.prepare("SELECT * FROM projects WHERE id = ?").get(params.id);
|
|
733
|
+
if (!project) {
|
|
734
|
+
sendJson(res, 404, { error: "Project not found" });
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
const taskCounts = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(params.id);
|
|
738
|
+
sendJson(res, 200, { ...project, task_counts: taskCounts });
|
|
739
|
+
};
|
|
740
|
+
var updateProject = async (req, res, params) => {
|
|
741
|
+
const db2 = getDb();
|
|
742
|
+
const body = await parseBody(req);
|
|
743
|
+
const existing = db2.prepare("SELECT * FROM projects WHERE id = ?").get(params.id);
|
|
744
|
+
if (!existing) {
|
|
745
|
+
sendJson(res, 404, { error: "Project not found" });
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
const updates = [];
|
|
749
|
+
const sqlParams = [];
|
|
750
|
+
if (body.name !== void 0) {
|
|
751
|
+
updates.push("name = ?");
|
|
752
|
+
sqlParams.push(body.name);
|
|
753
|
+
}
|
|
754
|
+
if (body.description !== void 0) {
|
|
755
|
+
updates.push("description = ?");
|
|
756
|
+
sqlParams.push(body.description);
|
|
757
|
+
}
|
|
758
|
+
if (body.status !== void 0) {
|
|
759
|
+
updates.push("status = ?");
|
|
760
|
+
sqlParams.push(body.status);
|
|
761
|
+
}
|
|
762
|
+
if (updates.length === 0) {
|
|
763
|
+
sendJson(res, 400, { error: "No updates provided" });
|
|
764
|
+
return;
|
|
765
|
+
}
|
|
766
|
+
sqlParams.push(params.id);
|
|
767
|
+
try {
|
|
768
|
+
db2.prepare(`UPDATE projects SET ${updates.join(", ")} WHERE id = ?`).run(...sqlParams);
|
|
769
|
+
} catch (e) {
|
|
770
|
+
if (e.message?.includes("UNIQUE constraint failed")) {
|
|
771
|
+
sendJson(res, 409, { error: "A project with that name already exists" });
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
throw e;
|
|
775
|
+
}
|
|
776
|
+
const updated = db2.prepare("SELECT * FROM projects WHERE id = ?").get(params.id);
|
|
777
|
+
sendJson(res, 200, updated);
|
|
778
|
+
};
|
|
779
|
+
var listTasks = async (req, res, params) => {
|
|
780
|
+
const db2 = getDb();
|
|
781
|
+
const url = new URL(req.url || "/", "http://localhost");
|
|
782
|
+
const includeDone = url.searchParams.get("include_done") === "true";
|
|
783
|
+
let sql = "SELECT * FROM tasks WHERE project_id = ?";
|
|
784
|
+
if (!includeDone) {
|
|
785
|
+
sql += " AND status NOT IN ('done', 'cancelled')";
|
|
786
|
+
}
|
|
787
|
+
sql += " ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END, created_at DESC";
|
|
788
|
+
const rows = db2.prepare(sql).all(params.pid);
|
|
789
|
+
sendJson(res, 200, rows);
|
|
790
|
+
};
|
|
791
|
+
var createTask = async (req, res, params) => {
|
|
792
|
+
const db2 = getDb();
|
|
793
|
+
const body = await parseBody(req);
|
|
794
|
+
if (!body.title || typeof body.title !== "string") {
|
|
795
|
+
sendJson(res, 400, { error: "title is required" });
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
const project = db2.prepare("SELECT id FROM projects WHERE id = ?").get(params.pid);
|
|
799
|
+
if (!project) {
|
|
800
|
+
sendJson(res, 404, { error: "Project not found" });
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
const id = generateId();
|
|
804
|
+
const priority = body.priority || "medium";
|
|
805
|
+
const tags = Array.isArray(body.tags) ? JSON.stringify(body.tags) : null;
|
|
806
|
+
db2.prepare(
|
|
807
|
+
"INSERT INTO tasks (id, project_id, title, description, priority, tags, parent_task_id) VALUES (?, ?, ?, ?, ?, ?, ?)"
|
|
808
|
+
).run(
|
|
809
|
+
id,
|
|
810
|
+
params.pid,
|
|
811
|
+
body.title,
|
|
812
|
+
body.description ?? null,
|
|
813
|
+
priority,
|
|
814
|
+
tags,
|
|
815
|
+
body.parent_task_id ?? null
|
|
816
|
+
);
|
|
817
|
+
const task = db2.prepare("SELECT * FROM tasks WHERE id = ?").get(id);
|
|
818
|
+
sendJson(res, 201, task);
|
|
819
|
+
};
|
|
820
|
+
var updateTask = async (req, res, params) => {
|
|
821
|
+
const db2 = getDb();
|
|
822
|
+
const body = await parseBody(req);
|
|
823
|
+
const existing = db2.prepare("SELECT * FROM tasks WHERE id = ?").get(params.id);
|
|
824
|
+
if (!existing) {
|
|
825
|
+
sendJson(res, 404, { error: "Task not found" });
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
const updates = [];
|
|
829
|
+
const sqlParams = [];
|
|
830
|
+
if (body.title !== void 0) {
|
|
831
|
+
updates.push("title = ?");
|
|
832
|
+
sqlParams.push(body.title);
|
|
833
|
+
}
|
|
834
|
+
if (body.description !== void 0) {
|
|
835
|
+
updates.push("description = ?");
|
|
836
|
+
sqlParams.push(body.description);
|
|
837
|
+
}
|
|
838
|
+
if (body.status !== void 0) {
|
|
839
|
+
updates.push("status = ?");
|
|
840
|
+
sqlParams.push(body.status);
|
|
841
|
+
if (body.status === "done") {
|
|
842
|
+
updates.push("completed_at = CURRENT_TIMESTAMP");
|
|
843
|
+
} else {
|
|
844
|
+
updates.push("completed_at = NULL");
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
if (body.priority !== void 0) {
|
|
848
|
+
updates.push("priority = ?");
|
|
849
|
+
sqlParams.push(body.priority);
|
|
850
|
+
}
|
|
851
|
+
if (body.tags !== void 0) {
|
|
852
|
+
updates.push("tags = ?");
|
|
853
|
+
sqlParams.push(Array.isArray(body.tags) ? JSON.stringify(body.tags) : null);
|
|
854
|
+
}
|
|
855
|
+
if (body.blocked_by !== void 0) {
|
|
856
|
+
updates.push("blocked_by = ?");
|
|
857
|
+
sqlParams.push(Array.isArray(body.blocked_by) ? JSON.stringify(body.blocked_by) : null);
|
|
858
|
+
if (Array.isArray(body.blocked_by) && body.blocked_by.length > 0 && body.status === void 0) {
|
|
859
|
+
updates.push("status = 'blocked'");
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
if (updates.length === 0) {
|
|
863
|
+
sendJson(res, 400, { error: "No updates provided" });
|
|
864
|
+
return;
|
|
865
|
+
}
|
|
866
|
+
sqlParams.push(params.id);
|
|
867
|
+
db2.prepare(`UPDATE tasks SET ${updates.join(", ")} WHERE id = ?`).run(...sqlParams);
|
|
868
|
+
const updated = db2.prepare("SELECT * FROM tasks WHERE id = ?").get(params.id);
|
|
869
|
+
sendJson(res, 200, updated);
|
|
870
|
+
};
|
|
871
|
+
var deleteTask = async (_req, res, params) => {
|
|
872
|
+
const db2 = getDb();
|
|
873
|
+
const existing = db2.prepare("SELECT * FROM tasks WHERE id = ?").get(params.id);
|
|
874
|
+
if (!existing) {
|
|
875
|
+
sendJson(res, 404, { error: "Task not found" });
|
|
876
|
+
return;
|
|
877
|
+
}
|
|
878
|
+
const deleteTransaction = db2.transaction((taskId) => {
|
|
879
|
+
const subtasks = db2.prepare("SELECT id FROM tasks WHERE parent_task_id = ?").all(taskId);
|
|
880
|
+
for (const sub of subtasks) {
|
|
881
|
+
db2.prepare("DELETE FROM notes WHERE task_id = ?").run(sub.id);
|
|
882
|
+
db2.prepare("DELETE FROM tasks WHERE id = ?").run(sub.id);
|
|
883
|
+
}
|
|
884
|
+
db2.prepare("DELETE FROM notes WHERE task_id = ?").run(taskId);
|
|
885
|
+
db2.prepare("DELETE FROM tasks WHERE id = ?").run(taskId);
|
|
886
|
+
});
|
|
887
|
+
deleteTransaction(params.id);
|
|
888
|
+
sendJson(res, 200, { message: "Task deleted" });
|
|
889
|
+
};
|
|
890
|
+
var routes = [
|
|
891
|
+
{ method: "GET", pattern: "/api/projects", handler: listProjects },
|
|
892
|
+
{ method: "GET", pattern: "/api/projects/:id", handler: getProject },
|
|
893
|
+
{ method: "PATCH", pattern: "/api/projects/:id", handler: updateProject },
|
|
894
|
+
{ method: "GET", pattern: "/api/projects/:pid/tasks", handler: listTasks },
|
|
895
|
+
{ method: "POST", pattern: "/api/projects/:pid/tasks", handler: createTask },
|
|
896
|
+
{ method: "PATCH", pattern: "/api/tasks/:id", handler: updateTask },
|
|
897
|
+
{ method: "DELETE", pattern: "/api/tasks/:id", handler: deleteTask }
|
|
898
|
+
];
|
|
899
|
+
async function handleApiRequest(req, res) {
|
|
900
|
+
const url = new URL(req.url || "/", "http://localhost");
|
|
901
|
+
const method = req.method || "GET";
|
|
902
|
+
for (const route of routes) {
|
|
903
|
+
if (route.method !== method) continue;
|
|
904
|
+
const params = matchRoute(route.pattern, url.pathname);
|
|
905
|
+
if (params) {
|
|
906
|
+
await route.handler(req, res, params);
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
sendJson(res, 404, { error: "Not found" });
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
// src/server/http.ts
|
|
914
|
+
function openBrowser(url) {
|
|
915
|
+
const platform = process.platform;
|
|
916
|
+
const cmd = platform === "win32" ? "cmd" : platform === "darwin" ? "open" : "xdg-open";
|
|
917
|
+
const args = platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
918
|
+
spawn(cmd, args, { detached: true, stdio: "ignore" }).unref();
|
|
919
|
+
}
|
|
920
|
+
var __filename = fileURLToPath(import.meta.url);
|
|
921
|
+
var __dirname = dirname2(__filename);
|
|
922
|
+
function resolveStaticDir() {
|
|
923
|
+
const scriptDir = dirname2(process.argv[1] || __filename);
|
|
924
|
+
return join(scriptDir, "ui");
|
|
925
|
+
}
|
|
926
|
+
var MIME_TYPES = {
|
|
927
|
+
".html": "text/html; charset=utf-8",
|
|
928
|
+
".js": "application/javascript; charset=utf-8",
|
|
929
|
+
".css": "text/css; charset=utf-8",
|
|
930
|
+
".json": "application/json; charset=utf-8",
|
|
931
|
+
".svg": "image/svg+xml",
|
|
932
|
+
".png": "image/png",
|
|
933
|
+
".jpg": "image/jpeg",
|
|
934
|
+
".ico": "image/x-icon",
|
|
935
|
+
".woff": "font/woff",
|
|
936
|
+
".woff2": "font/woff2",
|
|
937
|
+
".ttf": "font/ttf"
|
|
938
|
+
};
|
|
939
|
+
function parseBody(req) {
|
|
940
|
+
return new Promise((resolve2, reject) => {
|
|
941
|
+
const chunks = [];
|
|
942
|
+
req.on("data", (chunk) => chunks.push(chunk));
|
|
943
|
+
req.on("end", () => {
|
|
944
|
+
if (chunks.length === 0) {
|
|
945
|
+
resolve2({});
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
948
|
+
try {
|
|
949
|
+
resolve2(JSON.parse(Buffer.concat(chunks).toString()));
|
|
950
|
+
} catch {
|
|
951
|
+
resolve2({});
|
|
952
|
+
}
|
|
953
|
+
});
|
|
954
|
+
req.on("error", reject);
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
function matchRoute(pattern, pathname) {
|
|
958
|
+
const patternParts = pattern.split("/").filter(Boolean);
|
|
959
|
+
const pathParts = pathname.split("/").filter(Boolean);
|
|
960
|
+
if (patternParts.length !== pathParts.length) return null;
|
|
961
|
+
const params = {};
|
|
962
|
+
for (let i = 0; i < patternParts.length; i++) {
|
|
963
|
+
if (patternParts[i].startsWith(":")) {
|
|
964
|
+
params[patternParts[i].slice(1)] = decodeURIComponent(pathParts[i]);
|
|
965
|
+
} else if (patternParts[i] !== pathParts[i]) {
|
|
966
|
+
return null;
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
return params;
|
|
970
|
+
}
|
|
971
|
+
function sendJson(res, status, data) {
|
|
972
|
+
res.writeHead(status, { "Content-Type": "application/json; charset=utf-8" });
|
|
973
|
+
res.end(JSON.stringify(data));
|
|
974
|
+
}
|
|
975
|
+
async function serveStatic(req, res) {
|
|
976
|
+
const staticDir = resolveStaticDir();
|
|
977
|
+
const url = new URL(req.url || "/", "http://localhost");
|
|
978
|
+
let filePath = join(staticDir, url.pathname === "/" ? "index.html" : url.pathname);
|
|
979
|
+
try {
|
|
980
|
+
const content = await readFile(filePath);
|
|
981
|
+
const ext = extname(filePath);
|
|
982
|
+
const contentType = MIME_TYPES[ext] || "application/octet-stream";
|
|
983
|
+
res.writeHead(200, { "Content-Type": contentType });
|
|
984
|
+
res.end(content);
|
|
985
|
+
} catch {
|
|
986
|
+
try {
|
|
987
|
+
const indexPath = join(staticDir, "index.html");
|
|
988
|
+
const content = await readFile(indexPath);
|
|
989
|
+
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
990
|
+
res.end(content);
|
|
991
|
+
} catch {
|
|
992
|
+
res.writeHead(503, { "Content-Type": "text/html; charset=utf-8" });
|
|
993
|
+
res.end(
|
|
994
|
+
"<html><body><h1>mindpm UI not built</h1><p>Run <code>npm run build:ui</code> to build the Kanban UI.</p></body></html>"
|
|
995
|
+
);
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
var _httpPort = null;
|
|
1000
|
+
function getHttpPort() {
|
|
1001
|
+
return _httpPort;
|
|
1002
|
+
}
|
|
1003
|
+
function startHttpServer(port) {
|
|
1004
|
+
const server2 = createServer(async (req, res) => {
|
|
1005
|
+
try {
|
|
1006
|
+
if (req.url?.startsWith("/api/")) {
|
|
1007
|
+
await handleApiRequest(req, res);
|
|
1008
|
+
} else {
|
|
1009
|
+
await serveStatic(req, res);
|
|
1010
|
+
}
|
|
1011
|
+
} catch (err) {
|
|
1012
|
+
process.stderr.write(`[mindpm] HTTP error: ${err}
|
|
1013
|
+
`);
|
|
1014
|
+
if (!res.headersSent) {
|
|
1015
|
+
sendJson(res, 500, { error: "Internal server error" });
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
});
|
|
1019
|
+
server2.on("error", (err) => {
|
|
1020
|
+
if (err.code === "EADDRINUSE") {
|
|
1021
|
+
process.stderr.write(
|
|
1022
|
+
`[mindpm] Warning: Port ${port} is in use. Kanban UI not available. MCP server continues.
|
|
1023
|
+
`
|
|
1024
|
+
);
|
|
1025
|
+
} else {
|
|
1026
|
+
process.stderr.write(`[mindpm] HTTP server error: ${err.message}
|
|
1027
|
+
`);
|
|
1028
|
+
}
|
|
1029
|
+
});
|
|
1030
|
+
server2.listen(port, () => {
|
|
1031
|
+
_httpPort = port;
|
|
1032
|
+
const url = `http://localhost:${port}`;
|
|
1033
|
+
process.stderr.write(`[mindpm] Kanban UI available at ${url}
|
|
1034
|
+
`);
|
|
1035
|
+
if (process.env.MINDPM_OPEN_BROWSER === "1") {
|
|
1036
|
+
openBrowser(url);
|
|
1037
|
+
}
|
|
1038
|
+
});
|
|
1039
|
+
return server2;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
// src/tools/sessions.ts
|
|
708
1043
|
function getActivitySince(db2, projectId, cutoffTime) {
|
|
709
1044
|
return db2.prepare(`
|
|
710
1045
|
SELECT 'task_created' as type, id, title, created_at as timestamp
|
|
@@ -739,7 +1074,7 @@ function registerSessionTools(server2) {
|
|
|
739
1074
|
"start_session",
|
|
740
1075
|
{
|
|
741
1076
|
title: "Start Session",
|
|
742
|
-
description: "Begin a work session for a project. Returns the full project overview including last session's next_steps, active tasks, blockers, and recent decisions. Call this at the start of every conversation.",
|
|
1077
|
+
description: "Begin a work session for a project. Returns the full project overview including last session's next_steps, active tasks, blockers, and recent decisions. Call this at the start of every conversation. IMPORTANT: Always show the kanban_url to the user as a clickable link so they can open the Kanban board.",
|
|
743
1078
|
inputSchema: {
|
|
744
1079
|
project: z5.string().optional().describe("Project name or ID")
|
|
745
1080
|
}
|
|
@@ -783,7 +1118,9 @@ function registerSessionTools(server2) {
|
|
|
783
1118
|
const taskCounts = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
|
|
784
1119
|
const contextItems = db2.prepare("SELECT key, value, category FROM context WHERE project_id = ? ORDER BY category, key").all(resolved.id);
|
|
785
1120
|
db2.prepare("UPDATE projects SET status = status WHERE id = ?").run(resolved.id);
|
|
1121
|
+
const port = getHttpPort();
|
|
786
1122
|
const result = {
|
|
1123
|
+
kanban_url: port ? `http://localhost:${port}` : null,
|
|
787
1124
|
project: projectRow,
|
|
788
1125
|
last_session: lastSession ? {
|
|
789
1126
|
summary: lastSession.summary,
|
|
@@ -1006,7 +1343,7 @@ function registerQueryTools(server2) {
|
|
|
1006
1343
|
var server = new McpServer(
|
|
1007
1344
|
{
|
|
1008
1345
|
name: "mindpm",
|
|
1009
|
-
version: "1.1
|
|
1346
|
+
version: "1.2.1"
|
|
1010
1347
|
},
|
|
1011
1348
|
{
|
|
1012
1349
|
capabilities: {
|
|
@@ -1020,21 +1357,27 @@ registerDecisionTools(server);
|
|
|
1020
1357
|
registerNoteTools(server);
|
|
1021
1358
|
registerSessionTools(server);
|
|
1022
1359
|
registerQueryTools(server);
|
|
1360
|
+
var httpServer;
|
|
1023
1361
|
async function main() {
|
|
1024
1362
|
ensureDbDirectory();
|
|
1363
|
+
const port = parseInt(process.env.MINDPM_PORT || "3131", 10);
|
|
1364
|
+
httpServer = startHttpServer(port);
|
|
1025
1365
|
const transport = new StdioServerTransport();
|
|
1026
1366
|
await server.connect(transport);
|
|
1027
1367
|
}
|
|
1028
1368
|
main().catch((error) => {
|
|
1029
1369
|
console.error("Fatal error:", error);
|
|
1370
|
+
httpServer?.close();
|
|
1030
1371
|
closeDb();
|
|
1031
1372
|
process.exit(1);
|
|
1032
1373
|
});
|
|
1033
1374
|
process.on("SIGINT", () => {
|
|
1375
|
+
httpServer?.close();
|
|
1034
1376
|
closeDb();
|
|
1035
1377
|
process.exit(0);
|
|
1036
1378
|
});
|
|
1037
1379
|
process.on("SIGTERM", () => {
|
|
1380
|
+
httpServer?.close();
|
|
1038
1381
|
closeDb();
|
|
1039
1382
|
process.exit(0);
|
|
1040
1383
|
});
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var ii=Object.defineProperty;var $n=e=>{throw TypeError(e)};var si=(e,t,n)=>t in e?ii(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var De=(e,t,n)=>si(e,typeof t!="symbol"?t+"":t,n),gn=(e,t,n)=>t.has(e)||$n("Cannot "+n);var u=(e,t,n)=>(gn(e,t,"read from private field"),n?n.call(e):t.get(e)),D=(e,t,n)=>t.has(e)?$n("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),S=(e,t,n,r)=>(gn(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),H=(e,t,n)=>(gn(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();const bn=!1;var Fn=Array.isArray,li=Array.prototype.indexOf,Tt=Array.prototype.includes,on=Array.from,ai=Object.defineProperty,Rt=Object.getOwnPropertyDescriptor,fi=Object.prototype,oi=Array.prototype,ui=Object.getPrototypeOf,er=Object.isExtensible;const ci=()=>{};function di(e){for(var t=0;t<e.length;t++)e[t]()}function vr(){var e,t,n=new Promise((r,s)=>{e=r,t=s});return{promise:n,resolve:e,reject:t}}const Y=2,Kt=4,un=8,hr=1<<24,Fe=16,xe=32,pt=64,kn=128,he=512,V=1024,W=2048,Se=4096,ae=8192,Ke=16384,dt=32768,St=65536,tr=1<<17,_r=1<<18,Pt=1<<19,vi=1<<20,He=1<<25,vt=65536,En=1<<21,qn=1<<22,Ue=1<<23,Mt=Symbol("$state"),et=new class extends Error{constructor(){super(...arguments);De(this,"name","StaleReactionError");De(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function hi(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function _i(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function pi(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function gi(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function mi(e){throw new Error("https://svelte.dev/e/effect_orphan")}function yi(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function wi(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function bi(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ki(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ei(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Ti=1,Si=2,xi=16,Ci=1,Di=2,K=Symbol(),Ai="http://www.w3.org/1999/xhtml";function Pi(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Oi(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function pr(e){return e===this.v}function Ni(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function gr(e){return!Ni(e,this.v)}let ji=!1,pe=null;function xt(e){pe=e}function Xe(e,t=!1,n){pe={p:pe,i:!1,c:null,e:null,s:e,x:null,l:null}}function Ze(e){var t=pe,n=t.e;if(n!==null){t.e=null;for(var r of n)Fr(r)}return t.i=!0,pe=t.p,{}}function mr(){return!0}let tt=[];function yr(){var e=tt;tt=[],di(e)}function Ye(e){if(tt.length===0&&!It){var t=tt;queueMicrotask(()=>{t===tt&&yr()})}tt.push(e)}function Ri(){for(;tt.length>0;)yr()}function wr(e){var t=j;if(t===null)return C.f|=Ue,e;if((t.f&dt)===0&&(t.f&Kt)===0)throw e;Ve(e,t)}function Ve(e,t){for(;t!==null;){if((t.f&kn)!==0){if((t.f&dt)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const Mi=-7169;function F(e,t){e.f=e.f&Mi|t}function zn(e){(e.f&he)!==0||e.deps===null?F(e,V):F(e,Se)}function br(e){if(e!==null)for(const t of e)(t.f&Y)===0||(t.f&vt)===0||(t.f^=vt,br(t.deps))}function kr(e,t,n){(e.f&W)!==0?t.add(e):(e.f&Se)!==0&&n.add(e),br(e.deps),F(e,V)}const Xt=new Set;let T=null,nn=null,U=null,$=[],cn=null,Tn=!1,It=!1;var gt,mt,st,yt,zt,Bt,lt,Re,wt,fe,Sn,xn,Cn,Er;const Zn=class Zn{constructor(){D(this,fe);De(this,"current",new Map);De(this,"previous",new Map);D(this,gt,new Set);D(this,mt,new Set);D(this,st,0);D(this,yt,0);D(this,zt,null);D(this,Bt,new Set);D(this,lt,new Set);D(this,Re,new Map);De(this,"is_fork",!1);D(this,wt,!1)}skip_effect(t){u(this,Re).has(t)||u(this,Re).set(t,{d:[],m:[]})}unskip_effect(t){var n=u(this,Re).get(t);if(n){u(this,Re).delete(t);for(var r of n.d)F(r,W),be(r);for(r of n.m)F(r,Se),be(r)}}process(t){var s;$=[],this.apply();var n=[],r=[];for(const i of t)H(this,fe,xn).call(this,i,n,r);if(H(this,fe,Sn).call(this)){H(this,fe,Cn).call(this,r),H(this,fe,Cn).call(this,n);for(const[i,l]of u(this,Re))Cr(i,l)}else{for(const i of u(this,gt))i();u(this,gt).clear(),u(this,st)===0&&H(this,fe,Er).call(this),nn=this,T=null,nr(r),nr(n),nn=null,(s=u(this,zt))==null||s.resolve()}U=null}capture(t,n){n!==K&&!this.previous.has(t)&&this.previous.set(t,n),(t.f&Ue)===0&&(this.current.set(t,t.v),U==null||U.set(t,t.v))}activate(){T=this,this.apply()}deactivate(){T===this&&(T=null,U=null)}flush(){if(this.activate(),$.length>0){if(Tr(),T!==null&&T!==this)return}else u(this,st)===0&&this.process([]);this.deactivate()}discard(){for(const t of u(this,mt))t(this);u(this,mt).clear()}increment(t){S(this,st,u(this,st)+1),t&&S(this,yt,u(this,yt)+1)}decrement(t){S(this,st,u(this,st)-1),t&&S(this,yt,u(this,yt)-1),!u(this,wt)&&(S(this,wt,!0),Ye(()=>{S(this,wt,!1),H(this,fe,Sn).call(this)?$.length>0&&this.flush():this.revive()}))}revive(){for(const t of u(this,Bt))u(this,lt).delete(t),F(t,W),be(t);for(const t of u(this,lt))F(t,Se),be(t);this.flush()}oncommit(t){u(this,gt).add(t)}ondiscard(t){u(this,mt).add(t)}settled(){return(u(this,zt)??S(this,zt,vr())).promise}static ensure(){if(T===null){const t=T=new Zn;Xt.add(T),It||Ye(()=>{T===t&&t.flush()})}return T}apply(){}};gt=new WeakMap,mt=new WeakMap,st=new WeakMap,yt=new WeakMap,zt=new WeakMap,Bt=new WeakMap,lt=new WeakMap,Re=new WeakMap,wt=new WeakMap,fe=new WeakSet,Sn=function(){return this.is_fork||u(this,yt)>0},xn=function(t,n,r){t.f^=V;for(var s=t.first;s!==null;){var i=s.f,l=(i&(xe|pt))!==0,a=l&&(i&V)!==0,f=a||(i&ae)!==0||u(this,Re).has(s);if(!f&&s.fn!==null){l?s.f^=V:(i&Kt)!==0?n.push(s):Yt(s)&&((i&Fe)!==0&&u(this,lt).add(s),At(s));var o=s.first;if(o!==null){s=o;continue}}for(;s!==null;){var v=s.next;if(v!==null){s=v;break}s=s.parent}}},Cn=function(t){for(var n=0;n<t.length;n+=1)kr(t[n],u(this,Bt),u(this,lt))},Er=function(){var s;if(Xt.size>1){this.previous.clear();var t=U,n=!0;for(const i of Xt){if(i===this){n=!1;continue}const l=[];for(const[f,o]of this.current){if(i.current.has(f))if(n&&o!==i.current.get(f))i.current.set(f,o);else continue;l.push(f)}if(l.length===0)continue;const a=[...i.current.keys()].filter(f=>!this.current.has(f));if(a.length>0){var r=$;$=[];const f=new Set,o=new Map;for(const v of l)Sr(v,a,f,o);if($.length>0){T=i,i.apply();for(const v of $)H(s=i,fe,xn).call(s,v,[],[]);i.deactivate()}$=r}}T=null,U=t}Xt.delete(this)};let We=Zn;function Ii(e){var t=It;It=!0;try{for(var n;;){if(Ri(),$.length===0&&(T==null||T.flush(),$.length===0))return cn=null,n;Tr()}}finally{It=t}}function Tr(){Tn=!0;var e=null;try{for(var t=0;$.length>0;){var n=We.ensure();if(t++>1e3){var r,s;Li()}n.process($),Je.clear()}}finally{$=[],Tn=!1,cn=null}}function Li(){try{yi()}catch(e){Ve(e,cn)}}let me=null;function nr(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(Ke|ae))===0&&Yt(r)&&(me=new Set,At(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&Br(r),(me==null?void 0:me.size)>0)){Je.clear();for(const s of me){if((s.f&(Ke|ae))!==0)continue;const i=[s];let l=s.parent;for(;l!==null;)me.has(l)&&(me.delete(l),i.push(l)),l=l.parent;for(let a=i.length-1;a>=0;a--){const f=i[a];(f.f&(Ke|ae))===0&&At(f)}}me.clear()}}me=null}}function Sr(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const i=s.f;(i&Y)!==0?Sr(s,t,n,r):(i&(qn|Fe))!==0&&(i&W)===0&&xr(s,t,r)&&(F(s,W),be(s))}}function xr(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(Tt.call(t,s))return!0;if((s.f&Y)!==0&&xr(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function be(e){var t=cn=e,n=t.b;if(n!=null&&n.is_pending&&(e.f&(Kt|un|hr))!==0&&(e.f&dt)===0){n.defer_effect(e);return}for(;t.parent!==null;){t=t.parent;var r=t.f;if(Tn&&t===j&&(r&Fe)!==0&&(r&_r)===0&&(r&dt)!==0)return;if((r&(pt|xe))!==0){if((r&V)===0)return;t.f^=V}}$.push(t)}function Cr(e,t){if(!((e.f&xe)!==0&&(e.f&V)!==0)){(e.f&W)!==0?t.d.push(e):(e.f&Se)!==0&&t.m.push(e),F(e,V);for(var n=e.first;n!==null;)Cr(n,t),n=n.next}}function Fi(e){let t=0,n=ht(0),r;return()=>{Vn()&&(d(n),qr(()=>(t===0&&(r=Qr(()=>e(()=>Lt(n)))),t+=1,()=>{Ye(()=>{t-=1,t===0&&(r==null||r(),r=void 0,Lt(n))})})))}}var qi=St|Pt;function zi(e,t,n,r){new Bi(e,t,n,r)}var de,Ln,Ae,at,Q,Pe,se,ye,Me,ft,Be,bt,kt,Et,Ie,an,q,Hi,Vi,Ki,Dn,Qt,$t,An;class Bi{constructor(t,n,r,s){D(this,q);De(this,"parent");De(this,"is_pending",!1);De(this,"transform_error");D(this,de);D(this,Ln,null);D(this,Ae);D(this,at);D(this,Q);D(this,Pe,null);D(this,se,null);D(this,ye,null);D(this,Me,null);D(this,ft,0);D(this,Be,0);D(this,bt,!1);D(this,kt,new Set);D(this,Et,new Set);D(this,Ie,null);D(this,an,Fi(()=>(S(this,Ie,ht(u(this,ft))),()=>{S(this,Ie,null)})));var i;S(this,de,t),S(this,Ae,n),S(this,at,l=>{var a=j;a.b=this,a.f|=kn,r(l)}),this.parent=j.b,this.transform_error=s??((i=this.parent)==null?void 0:i.transform_error)??(l=>l),S(this,Q,Yn(()=>{H(this,q,Dn).call(this)},qi))}defer_effect(t){kr(t,u(this,kt),u(this,Et))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!u(this,Ae).pending}update_pending_count(t){H(this,q,An).call(this,t),S(this,ft,u(this,ft)+t),!(!u(this,Ie)||u(this,bt))&&(S(this,bt,!0),Ye(()=>{S(this,bt,!1),u(this,Ie)&&Dt(u(this,Ie),u(this,ft))}))}get_effect_pending(){return u(this,an).call(this),d(u(this,Ie))}error(t){var n=u(this,Ae).onerror;let r=u(this,Ae).failed;if(!n&&!r)throw t;u(this,Pe)&&(te(u(this,Pe)),S(this,Pe,null)),u(this,se)&&(te(u(this,se)),S(this,se,null)),u(this,ye)&&(te(u(this,ye)),S(this,ye,null));var s=!1,i=!1;const l=()=>{if(s){Oi();return}s=!0,i&&Ei(),u(this,ye)!==null&&ut(u(this,ye),()=>{S(this,ye,null)}),H(this,q,$t).call(this,()=>{We.ensure(),H(this,q,Dn).call(this)})},a=f=>{try{i=!0,n==null||n(f,l),i=!1}catch(o){Ve(o,u(this,Q)&&u(this,Q).parent)}r&&S(this,ye,H(this,q,$t).call(this,()=>{We.ensure();try{return ve(()=>{var o=j;o.b=this,o.f|=kn,r(u(this,de),()=>f,()=>l)})}catch(o){return Ve(o,u(this,Q).parent),null}}))};Ye(()=>{var f;try{f=this.transform_error(t)}catch(o){Ve(o,u(this,Q)&&u(this,Q).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(a,o=>Ve(o,u(this,Q)&&u(this,Q).parent)):a(f)})}}de=new WeakMap,Ln=new WeakMap,Ae=new WeakMap,at=new WeakMap,Q=new WeakMap,Pe=new WeakMap,se=new WeakMap,ye=new WeakMap,Me=new WeakMap,ft=new WeakMap,Be=new WeakMap,bt=new WeakMap,kt=new WeakMap,Et=new WeakMap,Ie=new WeakMap,an=new WeakMap,q=new WeakSet,Hi=function(){try{S(this,Pe,ve(()=>u(this,at).call(this,u(this,de))))}catch(t){this.error(t)}},Vi=function(t){const n=u(this,Ae).failed;n&&S(this,ye,ve(()=>{n(u(this,de),()=>t,()=>()=>{})}))},Ki=function(){const t=u(this,Ae).pending;t&&(this.is_pending=!0,S(this,se,ve(()=>t(u(this,de)))),Ye(()=>{var n=S(this,Me,document.createDocumentFragment()),r=Ge();n.append(r),S(this,Pe,H(this,q,$t).call(this,()=>(We.ensure(),ve(()=>u(this,at).call(this,r))))),u(this,Be)===0&&(u(this,de).before(n),S(this,Me,null),ut(u(this,se),()=>{S(this,se,null)}),H(this,q,Qt).call(this))}))},Dn=function(){try{if(this.is_pending=this.has_pending_snippet(),S(this,Be,0),S(this,ft,0),S(this,Pe,ve(()=>{u(this,at).call(this,u(this,de))})),u(this,Be)>0){var t=S(this,Me,document.createDocumentFragment());Kr(u(this,Pe),t);const n=u(this,Ae).pending;S(this,se,ve(()=>n(u(this,de))))}else H(this,q,Qt).call(this)}catch(n){this.error(n)}},Qt=function(){this.is_pending=!1;for(const t of u(this,kt))F(t,W),be(t);for(const t of u(this,Et))F(t,Se),be(t);u(this,kt).clear(),u(this,Et).clear()},$t=function(t){var n=j,r=C,s=pe;Ne(u(this,Q)),ge(u(this,Q)),xt(u(this,Q).ctx);try{return t()}catch(i){return wr(i),null}finally{Ne(n),ge(r),xt(s)}},An=function(t){var n;if(!this.has_pending_snippet()){this.parent&&H(n=this.parent,q,An).call(n,t);return}S(this,Be,u(this,Be)+t),u(this,Be)===0&&(H(this,q,Qt).call(this),u(this,se)&&ut(u(this,se),()=>{S(this,se,null)}),u(this,Me)&&(u(this,de).before(u(this,Me)),S(this,Me,null)))};function Ui(e,t,n,r){const s=Bn;var i=e.filter(_=>!_.settled);if(n.length===0&&i.length===0){r(t.map(s));return}var l=j,a=Yi(),f=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(_=>_.promise)):null;function o(_){a();try{r(_)}catch(p){(l.f&Ke)===0&&Ve(p,l)}Pn()}if(n.length===0){f.then(()=>o(t.map(s)));return}function v(){a(),Promise.all(n.map(_=>Ji(_))).then(_=>o([...t.map(s),..._])).catch(_=>Ve(_,l))}f?f.then(v):v()}function Yi(){var e=j,t=C,n=pe,r=T;return function(i=!0){Ne(e),ge(t),xt(n),i&&(r==null||r.activate())}}function Pn(e=!0){Ne(null),ge(null),xt(null),e&&(T==null||T.deactivate())}function Wi(){var e=j.b,t=T,n=e.is_rendered();return e.update_pending_count(1),t.increment(n),()=>{e.update_pending_count(-1),t.decrement(n)}}function Bn(e){var t=Y|W,n=C!==null&&(C.f&Y)!==0?C:null;return j!==null&&(j.f|=Pt),{ctx:pe,deps:null,effects:null,equals:pr,f:t,fn:e,reactions:null,rv:0,v:K,wv:0,parent:n??j,ac:null}}function Ji(e,t,n){j===null&&hi();var s=void 0,i=ht(K),l=!C,a=new Map;return us(()=>{var p;var f=vr();s=f.promise;try{Promise.resolve(e()).then(f.resolve,f.reject).finally(Pn)}catch(w){f.reject(w),Pn()}var o=T;if(l){var v=Wi();(p=a.get(o))==null||p.reject(et),a.delete(o),a.set(o,f)}const _=(w,c=void 0)=>{if(o.activate(),c)c!==et&&(i.f|=Ue,Dt(i,c));else{(i.f&Ue)!==0&&(i.f^=Ue),Dt(i,w);for(const[m,h]of a){if(a.delete(m),m===o)break;h.reject(et)}}v&&v()};f.promise.then(_,w=>_(null,w||"unknown"))}),Kn(()=>{for(const f of a.values())f.reject(et)}),new Promise(f=>{function o(v){function _(){v===s?f(i):o(s)}v.then(_,_)}o(s)})}function Ct(e){const t=Bn(e);return Ur(t),t}function Gi(e){const t=Bn(e);return t.equals=gr,t}function Xi(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)te(t[n])}}function Zi(e){for(var t=e.parent;t!==null;){if((t.f&Y)===0)return(t.f&Ke)===0?t:null;t=t.parent}return null}function Hn(e){var t,n=j;Ne(Zi(e));try{e.f&=~vt,Xi(e),t=Gr(e)}finally{Ne(n)}return t}function Dr(e){var t=Hn(e);if(!e.equals(t)&&(e.wv=Wr(),(!(T!=null&&T.is_fork)||e.deps===null)&&(e.v=t,e.deps===null))){F(e,V);return}_t||(U!==null?(Vn()||T!=null&&T.is_fork)&&U.set(e,t):zn(e))}function Qi(e){var t,n;if(e.effects!==null)for(const r of e.effects)(r.teardown||r.ac)&&((t=r.teardown)==null||t.call(r),(n=r.ac)==null||n.abort(et),r.teardown=ci,r.ac=null,qt(r,0),Wn(r))}function Ar(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&At(t)}let On=new Set;const Je=new Map;let Pr=!1;function ht(e,t){var n={f:0,v:e,reactions:null,equals:pr,rv:0,wv:0};return n}function N(e,t){const n=ht(e);return Ur(n),n}function $i(e,t=!1,n=!0){const r=ht(e);return t||(r.equals=gr),r}function g(e,t,n=!1){C!==null&&(!ke||(C.f&tr)!==0)&&mr()&&(C.f&(Y|Fe|qn|tr))!==0&&(_e===null||!Tt.call(_e,e))&&ki();let r=n?nt(t):t;return Dt(e,r)}function Dt(e,t){if(!e.equals(t)){var n=e.v;_t?Je.set(e,t):Je.set(e,n),e.v=t;var r=We.ensure();if(r.capture(e,n),(e.f&Y)!==0){const s=e;(e.f&W)!==0&&Hn(s),zn(s)}e.wv=Wr(),Or(e,W),j!==null&&(j.f&V)!==0&&(j.f&(xe|pt))===0&&(ce===null?vs([e]):ce.push(e)),!r.is_fork&&On.size>0&&!Pr&&es()}return t}function es(){Pr=!1;for(const e of On)(e.f&V)!==0&&F(e,Se),Yt(e)&&At(e);On.clear()}function Lt(e){g(e,e.v+1)}function Or(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,s=0;s<r;s++){var i=n[s],l=i.f,a=(l&W)===0;if(a&&F(i,t),(l&Y)!==0){var f=i;U==null||U.delete(f),(l&vt)===0&&(l&he&&(i.f|=vt),Or(f,Se))}else a&&((l&Fe)!==0&&me!==null&&me.add(i),be(i))}}function nt(e){if(typeof e!="object"||e===null||Mt in e)return e;const t=ui(e);if(t!==fi&&t!==oi)return e;var n=new Map,r=Fn(e),s=N(0),i=ct,l=a=>{if(ct===i)return a();var f=C,o=ct;ge(null),lr(i);var v=a();return ge(f),lr(o),v};return r&&n.set("length",N(e.length)),new Proxy(e,{defineProperty(a,f,o){(!("value"in o)||o.configurable===!1||o.enumerable===!1||o.writable===!1)&&wi();var v=n.get(f);return v===void 0?l(()=>{var _=N(o.value);return n.set(f,_),_}):g(v,o.value,!0),!0},deleteProperty(a,f){var o=n.get(f);if(o===void 0){if(f in a){const v=l(()=>N(K));n.set(f,v),Lt(s)}}else g(o,K),Lt(s);return!0},get(a,f,o){var w;if(f===Mt)return e;var v=n.get(f),_=f in a;if(v===void 0&&(!_||(w=Rt(a,f))!=null&&w.writable)&&(v=l(()=>{var c=nt(_?a[f]:K),m=N(c);return m}),n.set(f,v)),v!==void 0){var p=d(v);return p===K?void 0:p}return Reflect.get(a,f,o)},getOwnPropertyDescriptor(a,f){var o=Reflect.getOwnPropertyDescriptor(a,f);if(o&&"value"in o){var v=n.get(f);v&&(o.value=d(v))}else if(o===void 0){var _=n.get(f),p=_==null?void 0:_.v;if(_!==void 0&&p!==K)return{enumerable:!0,configurable:!0,value:p,writable:!0}}return o},has(a,f){var p;if(f===Mt)return!0;var o=n.get(f),v=o!==void 0&&o.v!==K||Reflect.has(a,f);if(o!==void 0||j!==null&&(!v||(p=Rt(a,f))!=null&&p.writable)){o===void 0&&(o=l(()=>{var w=v?nt(a[f]):K,c=N(w);return c}),n.set(f,o));var _=d(o);if(_===K)return!1}return v},set(a,f,o,v){var P;var _=n.get(f),p=f in a;if(r&&f==="length")for(var w=o;w<_.v;w+=1){var c=n.get(w+"");c!==void 0?g(c,K):w in a&&(c=l(()=>N(K)),n.set(w+"",c))}if(_===void 0)(!p||(P=Rt(a,f))!=null&&P.writable)&&(_=l(()=>N(void 0)),g(_,nt(o)),n.set(f,_));else{p=_.v!==K;var m=l(()=>nt(o));g(_,m)}var h=Reflect.getOwnPropertyDescriptor(a,f);if(h!=null&&h.set&&h.set.call(v,o),!p){if(r&&typeof f=="string"){var b=n.get("length"),k=Number(f);Number.isInteger(k)&&k>=b.v&&g(b,k+1)}Lt(s)}return!0},ownKeys(a){d(s);var f=Reflect.ownKeys(a).filter(_=>{var p=n.get(_);return p===void 0||p.v!==K});for(var[o,v]of n)v.v!==K&&!(o in a)&&f.push(o);return f},setPrototypeOf(){bi()}})}function rr(e){try{if(e!==null&&typeof e=="object"&&Mt in e)return e[Mt]}catch{}return e}function ts(e,t){return Object.is(rr(e),rr(t))}var rn,Nr,jr,Rr;function ns(){if(rn===void 0){rn=window,Nr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;jr=Rt(t,"firstChild").get,Rr=Rt(t,"nextSibling").get,er(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),er(n)&&(n.__t=void 0)}}function Ge(e=""){return document.createTextNode(e)}function sn(e){return jr.call(e)}function Ut(e){return Rr.call(e)}function x(e,t){return sn(e)}function ln(e,t=!1){{var n=sn(e);return n instanceof Comment&&n.data===""?Ut(n):n}}function A(e,t=1,n=!1){let r=e;for(;t--;)r=Ut(r);return r}function rs(e){e.textContent=""}function Mr(){return!1}function is(e,t,n){return document.createElementNS(Ai,e,void 0)}function Ir(e,t){{const n=document.body;e.autofocus=!0,Ye(()=>{document.activeElement===n&&e.focus()})}}let ir=!1;function ss(){ir||(ir=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n.__on_r)==null||t.call(n)})},{capture:!0}))}function dn(e){var t=C,n=j;ge(null),Ne(null);try{return e()}finally{ge(t),Ne(n)}}function Lr(e,t,n,r=n){e.addEventListener(t,()=>dn(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),ss()}function ls(e){j===null&&(C===null&&mi(),gi()),_t&&pi()}function as(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function qe(e,t,n){var r=j;r!==null&&(r.f&ae)!==0&&(e|=ae);var s={ctx:pe,deps:null,nodes:null,f:e|W|he,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{At(s)}catch(a){throw te(s),a}else t!==null&&be(s);var i=s;if(n&&i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&(i.f&Pt)===0&&(i=i.first,(e&Fe)!==0&&(e&St)!==0&&i!==null&&(i.f|=St)),i!==null&&(i.parent=r,r!==null&&as(i,r),C!==null&&(C.f&Y)!==0&&(e&pt)===0)){var l=C;(l.effects??(l.effects=[])).push(i)}return s}function Vn(){return C!==null&&!ke}function Kn(e){const t=qe(un,null,!1);return F(t,V),t.teardown=e,t}function Un(e){ls();var t=j.f,n=!C&&(t&xe)!==0&&(t&dt)===0;if(n){var r=pe;(r.e??(r.e=[])).push(e)}else return Fr(e)}function Fr(e){return qe(Kt|vi,e,!1)}function fs(e){We.ensure();const t=qe(pt|Pt,e,!0);return(n={})=>new Promise(r=>{n.outro?ut(t,()=>{te(t),r(void 0)}):(te(t),r(void 0))})}function os(e){return qe(Kt,e,!1)}function us(e){return qe(qn|Pt,e,!0)}function qr(e,t=0){return qe(un|t,e,!0)}function Ee(e,t=[],n=[],r=[]){Ui(r,t,n,s=>{qe(un,()=>e(...s.map(d)),!0)})}function Yn(e,t=0){var n=qe(Fe|t,e,!0);return n}function ve(e){return qe(xe|Pt,e,!0)}function zr(e){var t=e.teardown;if(t!==null){const n=_t,r=C;sr(!0),ge(null);try{t.call(null)}finally{sr(n),ge(r)}}}function Wn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&dn(()=>{s.abort(et)});var r=n.next;(n.f&pt)!==0?n.parent=null:te(n,t),n=r}}function cs(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&xe)===0&&te(t),t=n}}function te(e,t=!0){var n=!1;(t||(e.f&_r)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(ds(e.nodes.start,e.nodes.end),n=!0),Wn(e,t&&!n),qt(e,0),F(e,Ke);var r=e.nodes&&e.nodes.t;if(r!==null)for(const i of r)i.stop();zr(e);var s=e.parent;s!==null&&s.first!==null&&Br(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function ds(e,t){for(;e!==null;){var n=e===t?null:Ut(e);e.remove(),e=n}}function Br(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function ut(e,t,n=!0){var r=[];Hr(e,r,!0);var s=()=>{n&&te(e),t&&t()},i=r.length;if(i>0){var l=()=>--i||s();for(var a of r)a.out(l)}else s()}function Hr(e,t,n){if((e.f&ae)===0){e.f^=ae;var r=e.nodes&&e.nodes.t;if(r!==null)for(const a of r)(a.is_global||n)&&t.push(a);for(var s=e.first;s!==null;){var i=s.next,l=(s.f&St)!==0||(s.f&xe)!==0&&(e.f&Fe)!==0;Hr(s,t,l?n:!1),s=i}}}function Jn(e){Vr(e,!0)}function Vr(e,t){if((e.f&ae)!==0){e.f^=ae,(e.f&V)===0&&(F(e,W),be(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&St)!==0||(n.f&xe)!==0;Vr(n,s?t:!1),n=r}var i=e.nodes&&e.nodes.t;if(i!==null)for(const l of i)(l.is_global||t)&&l.in()}}function Kr(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:Ut(n);t.append(n),n=s}}let en=!1,_t=!1;function sr(e){_t=e}let C=null,ke=!1;function ge(e){C=e}let j=null;function Ne(e){j=e}let _e=null;function Ur(e){C!==null&&(_e===null?_e=[e]:_e.push(e))}let ee=null,ie=0,ce=null;function vs(e){ce=e}let Yr=1,rt=0,ct=rt;function lr(e){ct=e}function Wr(){return++Yr}function Yt(e){var t=e.f;if((t&W)!==0)return!0;if(t&Y&&(e.f&=~vt),(t&Se)!==0){for(var n=e.deps,r=n.length,s=0;s<r;s++){var i=n[s];if(Yt(i)&&Dr(i),i.wv>e.wv)return!0}(t&he)!==0&&U===null&&F(e,V)}return!1}function Jr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(_e!==null&&Tt.call(_e,e)))for(var s=0;s<r.length;s++){var i=r[s];(i.f&Y)!==0?Jr(i,t,!1):t===i&&(n?F(i,W):(i.f&V)!==0&&F(i,Se),be(i))}}function Gr(e){var m;var t=ee,n=ie,r=ce,s=C,i=_e,l=pe,a=ke,f=ct,o=e.f;ee=null,ie=0,ce=null,C=(o&(xe|pt))===0?e:null,_e=null,xt(e.ctx),ke=!1,ct=++rt,e.ac!==null&&(dn(()=>{e.ac.abort(et)}),e.ac=null);try{e.f|=En;var v=e.fn,_=v();e.f|=dt;var p=e.deps,w=T==null?void 0:T.is_fork;if(ee!==null){var c;if(w||qt(e,ie),p!==null&&ie>0)for(p.length=ie+ee.length,c=0;c<ee.length;c++)p[ie+c]=ee[c];else e.deps=p=ee;if(Vn()&&(e.f&he)!==0)for(c=ie;c<p.length;c++)((m=p[c]).reactions??(m.reactions=[])).push(e)}else!w&&p!==null&&ie<p.length&&(qt(e,ie),p.length=ie);if(mr()&&ce!==null&&!ke&&p!==null&&(e.f&(Y|Se|W))===0)for(c=0;c<ce.length;c++)Jr(ce[c],e);if(s!==null&&s!==e){if(rt++,s.deps!==null)for(let h=0;h<n;h+=1)s.deps[h].rv=rt;if(t!==null)for(const h of t)h.rv=rt;ce!==null&&(r===null?r=ce:r.push(...ce))}return(e.f&Ue)!==0&&(e.f^=Ue),_}catch(h){return wr(h)}finally{e.f^=En,ee=t,ie=n,ce=r,C=s,_e=i,xt(l),ke=a,ct=f}}function hs(e,t){let n=t.reactions;if(n!==null){var r=li.call(n,e);if(r!==-1){var s=n.length-1;s===0?n=t.reactions=null:(n[r]=n[s],n.pop())}}if(n===null&&(t.f&Y)!==0&&(ee===null||!Tt.call(ee,t))){var i=t;(i.f&he)!==0&&(i.f^=he,i.f&=~vt),zn(i),Qi(i),qt(i,0)}}function qt(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)hs(e,n[r])}function At(e){var t=e.f;if((t&Ke)===0){F(e,V);var n=j,r=en;j=e,en=!0;try{(t&(Fe|hr))!==0?cs(e):Wn(e),zr(e);var s=Gr(e);e.teardown=typeof s=="function"?s:null,e.wv=Yr;var i;bn&&ji&&(e.f&W)!==0&&e.deps}finally{en=r,j=n}}}async function _s(){await Promise.resolve(),Ii()}function d(e){var t=e.f,n=(t&Y)!==0;if(C!==null&&!ke){var r=j!==null&&(j.f&Ke)!==0;if(!r&&(_e===null||!Tt.call(_e,e))){var s=C.deps;if((C.f&En)!==0)e.rv<rt&&(e.rv=rt,ee===null&&s!==null&&s[ie]===e?ie++:ee===null?ee=[e]:ee.push(e));else{(C.deps??(C.deps=[])).push(e);var i=e.reactions;i===null?e.reactions=[C]:Tt.call(i,C)||i.push(C)}}}if(_t&&Je.has(e))return Je.get(e);if(n){var l=e;if(_t){var a=l.v;return((l.f&V)===0&&l.reactions!==null||Zr(l))&&(a=Hn(l)),Je.set(l,a),a}var f=(l.f&he)===0&&!ke&&C!==null&&(en||(C.f&he)!==0),o=(l.f&dt)===0;Yt(l)&&(f&&(l.f|=he),Dr(l)),f&&!o&&(Ar(l),Xr(l))}if(U!=null&&U.has(e))return U.get(e);if((e.f&Ue)!==0)throw e.v;return e.v}function Xr(e){if(e.f|=he,e.deps!==null)for(const t of e.deps)(t.reactions??(t.reactions=[])).push(e),(t.f&Y)!==0&&(t.f&he)===0&&(Ar(t),Xr(t))}function Zr(e){if(e.v===K)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(Je.has(t)||(t.f&Y)!==0&&Zr(t))return!0;return!1}function Qr(e){var t=ke;try{return ke=!0,e()}finally{ke=t}}const ps=["touchstart","touchmove"];function gs(e){return ps.includes(e)}const it=Symbol("events"),$r=new Set,Nn=new Set;function ms(e,t,n,r={}){function s(i){if(r.capture||jn.call(t,i),!i.cancelBubble)return dn(()=>n==null?void 0:n.call(this,i))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Ye(()=>{t.addEventListener(e,s,r)}):t.addEventListener(e,s,r),s}function Le(e,t,n,r,s){var i={capture:r,passive:s},l=ms(e,t,n,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&Kn(()=>{t.removeEventListener(e,l,i)})}function ne(e,t,n){(t[it]??(t[it]={}))[e]=n}function Ot(e){for(var t=0;t<e.length;t++)$r.add(e[t]);for(var n of Nn)n(e)}let ar=null;function jn(e){var h,b;var t=this,n=t.ownerDocument,r=e.type,s=((h=e.composedPath)==null?void 0:h.call(e))||[],i=s[0]||e.target;ar=e;var l=0,a=ar===e&&e[it];if(a){var f=s.indexOf(a);if(f!==-1&&(t===document||t===window)){e[it]=t;return}var o=s.indexOf(t);if(o===-1)return;f<=o&&(l=f)}if(i=s[l]||e.target,i!==t){ai(e,"currentTarget",{configurable:!0,get(){return i||n}});var v=C,_=j;ge(null),Ne(null);try{for(var p,w=[];i!==null;){var c=i.assignedSlot||i.parentNode||i.host||null;try{var m=(b=i[it])==null?void 0:b[r];m!=null&&(!i.disabled||e.target===i)&&m.call(i,e)}catch(k){p?w.push(k):p=k}if(e.cancelBubble||c===t||c===null)break;i=c}if(p){for(let k of w)queueMicrotask(()=>{throw k});throw p}}finally{e[it]=t,delete e.currentTarget,ge(v),Ne(_)}}}var cr;const mn=((cr=globalThis==null?void 0:globalThis.window)==null?void 0:cr.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function ys(e){return(mn==null?void 0:mn.createHTML(e))??e}function ws(e){var t=is("template");return t.innerHTML=ys(e.replaceAll("<!>","<!---->")),t.content}function Rn(e,t){var n=j;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function L(e,t){var n=(t&Ci)!==0,r=(t&Di)!==0,s,i=!e.startsWith("<!>");return()=>{s===void 0&&(s=ws(i?e:"<!>"+e),n||(s=sn(s)));var l=r||Nr?document.importNode(s,!0):s.cloneNode(!0);if(n){var a=sn(l),f=l.lastChild;Rn(a,f)}else Rn(l,l);return l}}function ei(){var e=document.createDocumentFragment(),t=document.createComment(""),n=Ge();return e.append(t,n),Rn(t,n),e}function I(e,t){e!==null&&e.before(t)}function X(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=n,e.nodeValue=n+"")}function bs(e,t){return ks(e,t)}const Zt=new Map;function ks(e,{target:t,anchor:n,props:r={},events:s,context:i,intro:l=!0,transformError:a}){ns();var f=void 0,o=fs(()=>{var v=n??t.appendChild(Ge());zi(v,{pending:()=>{}},w=>{Xe({});var c=pe;i&&(c.c=i),s&&(r.$$events=s),f=e(w,r)||{},Ze()},a);var _=new Set,p=w=>{for(var c=0;c<w.length;c++){var m=w[c];if(!_.has(m)){_.add(m);var h=gs(m);for(const P of[t,document]){var b=Zt.get(P);b===void 0&&(b=new Map,Zt.set(P,b));var k=b.get(m);k===void 0?(P.addEventListener(m,jn,{passive:h}),b.set(m,1)):b.set(m,k+1)}}}};return p(on($r)),Nn.add(p),()=>{var h;for(var w of _)for(const b of[t,document]){var c=Zt.get(b),m=c.get(w);--m==0?(b.removeEventListener(w,jn),c.delete(w),c.size===0&&Zt.delete(b)):c.set(w,m)}Nn.delete(p),v!==n&&((h=v.parentNode)==null||h.removeChild(v))}});return Es.set(f,o),f}let Es=new WeakMap;var we,Oe,le,ot,Ht,Vt,fn;class Ts{constructor(t,n=!0){De(this,"anchor");D(this,we,new Map);D(this,Oe,new Map);D(this,le,new Map);D(this,ot,new Set);D(this,Ht,!0);D(this,Vt,()=>{var t=T;if(u(this,we).has(t)){var n=u(this,we).get(t),r=u(this,Oe).get(n);if(r)Jn(r),u(this,ot).delete(n);else{var s=u(this,le).get(n);s&&(u(this,Oe).set(n,s.effect),u(this,le).delete(n),s.fragment.lastChild.remove(),this.anchor.before(s.fragment),r=s.effect)}for(const[i,l]of u(this,we)){if(u(this,we).delete(i),i===t)break;const a=u(this,le).get(l);a&&(te(a.effect),u(this,le).delete(l))}for(const[i,l]of u(this,Oe)){if(i===n||u(this,ot).has(i))continue;const a=()=>{if(Array.from(u(this,we).values()).includes(i)){var o=document.createDocumentFragment();Kr(l,o),o.append(Ge()),u(this,le).set(i,{effect:l,fragment:o})}else te(l);u(this,ot).delete(i),u(this,Oe).delete(i)};u(this,Ht)||!r?(u(this,ot).add(i),ut(l,a,!1)):a()}}});D(this,fn,t=>{u(this,we).delete(t);const n=Array.from(u(this,we).values());for(const[r,s]of u(this,le))n.includes(r)||(te(s.effect),u(this,le).delete(r))});this.anchor=t,S(this,Ht,n)}ensure(t,n){var r=T,s=Mr();if(n&&!u(this,Oe).has(t)&&!u(this,le).has(t))if(s){var i=document.createDocumentFragment(),l=Ge();i.append(l),u(this,le).set(t,{effect:ve(()=>n(l)),fragment:i})}else u(this,Oe).set(t,ve(()=>n(this.anchor)));if(u(this,we).set(r,t),s){for(const[a,f]of u(this,Oe))a===t?r.unskip_effect(f):r.skip_effect(f);for(const[a,f]of u(this,le))a===t?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit(u(this,Vt)),r.ondiscard(u(this,fn))}else u(this,Vt).call(this)}}we=new WeakMap,Oe=new WeakMap,le=new WeakMap,ot=new WeakMap,Ht=new WeakMap,Vt=new WeakMap,fn=new WeakMap;function Te(e,t,n=!1){var r=new Ts(e),s=n?St:0;function i(l,a){r.ensure(l,a)}Yn(()=>{var l=!1;t((a,f=0)=>{l=!0,i(f,a)}),l||i(!1,null)},s)}function Gn(e,t){return t}function Ss(e,t,n){for(var r=[],s=t.length,i,l=t.length,a=0;a<s;a++){let _=t[a];ut(_,()=>{if(i){if(i.pending.delete(_),i.done.add(_),i.pending.size===0){var p=e.outrogroups;Mn(on(i.done)),p.delete(i),p.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var f=r.length===0&&n!==null;if(f){var o=n,v=o.parentNode;rs(v),v.append(o),e.items.clear()}Mn(t,!f)}else i={pending:new Set(t),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(i)}function Mn(e,t=!0){for(var n=0;n<e.length;n++)te(e[n],t)}var fr;function Wt(e,t,n,r,s,i=null){var l=e,a=new Map;{var f=e;l=f.appendChild(Ge())}var o=null,v=Gi(()=>{var h=n();return Fn(h)?h:h==null?[]:on(h)}),_,p=!0;function w(){m.fallback=o,xs(m,_,l,t,r),o!==null&&(_.length===0?(o.f&He)===0?Jn(o):(o.f^=He,jt(o,null,l)):ut(o,()=>{o=null}))}var c=Yn(()=>{_=d(v);for(var h=_.length,b=new Set,k=T,P=Mr(),E=0;E<h;E+=1){var R=_[E],Z=r(R,E),z=p?null:a.get(Z);z?(z.v&&Dt(z.v,R),z.i&&Dt(z.i,E),P&&k.unskip_effect(z.e)):(z=Cs(a,p?l:fr??(fr=Ge()),R,Z,E,s,t,n),p||(z.e.f|=He),a.set(Z,z)),b.add(Z)}if(h===0&&i&&!o&&(p?o=ve(()=>i(l)):(o=ve(()=>i(fr??(fr=Ge()))),o.f|=He)),h>b.size&&_i(),!p)if(P){for(const[oe,G]of a)b.has(oe)||k.skip_effect(G.e);k.oncommit(w),k.ondiscard(()=>{})}else w();d(v)}),m={effect:c,items:a,outrogroups:null,fallback:o};p=!1}function Nt(e){for(;e!==null&&(e.f&xe)===0;)e=e.next;return e}function xs(e,t,n,r,s){var oe;var i=t.length,l=e.items,a=Nt(e.effect.first),f,o=null,v=[],_=[],p,w,c,m;for(m=0;m<i;m+=1){if(p=t[m],w=s(p,m),c=l.get(w).e,e.outrogroups!==null)for(const G of e.outrogroups)G.pending.delete(c),G.done.delete(c);if((c.f&He)!==0)if(c.f^=He,c===a)jt(c,null,n);else{var h=o?o.next:a;c===e.effect.last&&(e.effect.last=c.prev),c.prev&&(c.prev.next=c.next),c.next&&(c.next.prev=c.prev),ze(e,o,c),ze(e,c,h),jt(c,h,n),o=c,v=[],_=[],a=Nt(o.next);continue}if((c.f&ae)!==0&&Jn(c),c!==a){if(f!==void 0&&f.has(c)){if(v.length<_.length){var b=_[0],k;o=b.prev;var P=v[0],E=v[v.length-1];for(k=0;k<v.length;k+=1)jt(v[k],b,n);for(k=0;k<_.length;k+=1)f.delete(_[k]);ze(e,P.prev,E.next),ze(e,o,P),ze(e,E,b),a=b,o=E,m-=1,v=[],_=[]}else f.delete(c),jt(c,a,n),ze(e,c.prev,c.next),ze(e,c,o===null?e.effect.first:o.next),ze(e,o,c),o=c;continue}for(v=[],_=[];a!==null&&a!==c;)(f??(f=new Set)).add(a),_.push(a),a=Nt(a.next);if(a===null)continue}(c.f&He)===0&&v.push(c),o=c,a=Nt(c.next)}if(e.outrogroups!==null){for(const G of e.outrogroups)G.pending.size===0&&(Mn(on(G.done)),(oe=e.outrogroups)==null||oe.delete(G));e.outrogroups.size===0&&(e.outrogroups=null)}if(a!==null||f!==void 0){var R=[];if(f!==void 0)for(c of f)(c.f&ae)===0&&R.push(c);for(;a!==null;)(a.f&ae)===0&&a!==e.fallback&&R.push(a),a=Nt(a.next);var Z=R.length;if(Z>0){var z=i===0?n:null;Ss(e,R,z)}}}function Cs(e,t,n,r,s,i,l,a){var f=(l&Ti)!==0?(l&xi)===0?$i(n,!1,!1):ht(n):null,o=(l&Si)!==0?ht(s):null;return{v:f,i:o,e:ve(()=>(i(t,f??n,o??s,a),()=>{e.delete(r)}))}}function jt(e,t,n){if(e.nodes)for(var r=e.nodes.start,s=e.nodes.end,i=t&&(t.f&He)===0?t.nodes.start:n;r!==null;){var l=Ut(r);if(i.before(r),r===s)return;r=l}}function ze(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}const or=[...`
|
|
2
|
+
\r\f \v\uFEFF`];function Ds(e,t,n){var r=e==null?"":""+e;if(t&&(r=r?r+" "+t:t),n){for(var s of Object.keys(n))if(n[s])r=r?r+" "+s:s;else if(r.length)for(var i=s.length,l=0;(l=r.indexOf(s,l))>=0;){var a=l+i;(l===0||or.includes(r[l-1]))&&(a===r.length||or.includes(r[a]))?r=(l===0?"":r.substring(0,l))+r.substring(a+1):l=a}}return r===""?null:r}function In(e,t,n,r,s,i){var l=e.__className;if(l!==n||l===void 0){var a=Ds(n,r,i);a==null?e.removeAttribute("class"):e.className=a,e.__className=n}else if(i&&s!==i)for(var f in i){var o=!!i[f];(s==null||o!==!!s[f])&&e.classList.toggle(f,o)}return i}function Xn(e,t,n=!1){if(e.multiple){if(t==null)return;if(!Fn(t))return Pi();for(var r of e.options)r.selected=t.includes(Ft(r));return}for(r of e.options){var s=Ft(r);if(ts(s,t)){r.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function ti(e){var t=new MutationObserver(()=>{Xn(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Kn(()=>{t.disconnect()})}function ur(e,t,n=t){var r=new WeakSet,s=!0;Lr(e,"change",i=>{var l=i?"[selected]":":checked",a;if(e.multiple)a=[].map.call(e.querySelectorAll(l),Ft);else{var f=e.querySelector(l)??e.querySelector("option:not([disabled])");a=f&&Ft(f)}n(a),T!==null&&r.add(T)}),os(()=>{var i=t();if(e===document.activeElement){var l=nn??T;if(r.has(l))return}if(Xn(e,i,s),s&&i===void 0){var a=e.querySelector(":checked");a!==null&&(i=Ft(a),n(i))}e.__value=i,s=!1}),ti(e)}function Ft(e){return"__value"in e?e.__value:e.value}function tn(e,t,n=t){var r=new WeakSet;Lr(e,"input",async s=>{var i=s?e.defaultValue:e.value;if(i=yn(e)?wn(i):i,n(i),T!==null&&r.add(T),await _s(),i!==(i=t())){var l=e.selectionStart,a=e.selectionEnd,f=e.value.length;if(e.value=i??"",a!==null){var o=e.value.length;l===a&&a===f&&o>f?(e.selectionStart=o,e.selectionEnd=o):(e.selectionStart=l,e.selectionEnd=Math.min(a,o))}}}),Qr(t)==null&&e.value&&(n(yn(e)?wn(e.value):e.value),T!==null&&r.add(T)),qr(()=>{var s=t();if(e===document.activeElement){var i=nn??T;if(r.has(i))return}yn(e)&&s===wn(e.value)||e.type==="date"&&!s&&!e.value||s!==e.value&&(e.value=s??"")})}function yn(e){var t=e.type;return t==="number"||t==="range"}function wn(e){return e===""?null:+e}function ni(e,t,n,r){var s=r,i=!0,l=()=>(i&&(i=!1,s=r),s),a;a=e[t],a===void 0&&r!==void 0&&(a=l());var f;return f=()=>{var o=e[t];return o===void 0?l():(i=!0,o)},f}const As="5";var dr;typeof window<"u"&&((dr=window.__svelte??(window.__svelte={})).v??(dr.v=new Set)).add(As);async function Qe(e,t){const n=await fetch(`/api${e}`,{headers:{"Content-Type":"application/json"},...t});if(!n.ok){const r=await n.json().catch(()=>({error:n.statusText}));throw new Error(r.error||"Request failed")}return n.json()}const $e={getProjects:()=>Qe("/projects"),getProject:e=>Qe(`/projects/${e}`),updateProject:(e,t)=>Qe(`/projects/${e}`,{method:"PATCH",body:JSON.stringify(t)}),getTasks:e=>Qe(`/projects/${e}/tasks?include_done=true`),createTask:(e,t)=>Qe(`/projects/${e}/tasks`,{method:"POST",body:JSON.stringify(t)}),updateTask:(e,t)=>Qe(`/tasks/${e}`,{method:"PATCH",body:JSON.stringify(t)}),deleteTask:e=>Qe(`/tasks/${e}`,{method:"DELETE"})};var Ps=L('<option class="svelte-1kanzy0"> </option>'),Os=L('<input class="rename-input svelte-1kanzy0" type="text"/>'),Ns=L('<button class="rename-btn svelte-1kanzy0" title="Rename project">✎</button>'),js=L('<header class="toolbar svelte-1kanzy0"><div class="brand svelte-1kanzy0">mindpm</div> <div class="project-area svelte-1kanzy0"><select class="svelte-1kanzy0"></select> <!></div></header>');function Rs(e,t){Xe(t,!0);let n=N(!1),r=N("");const s=Ct(()=>t.projects.find(c=>c.id===t.selectedId));function i(){d(s)&&(g(r,d(s).name,!0),g(n,!0))}function l(){if(!d(s)||!d(n))return;const c=d(r).trim();c&&c!==d(s).name&&t.onRenamed(d(s).id,c),g(n,!1)}function a(c){c.key==="Enter"&&l(),c.key==="Escape"&&g(n,!1)}var f=js(),o=A(x(f),2),v=x(o);Wt(v,21,()=>t.projects,Gn,(c,m)=>{var h=Ps(),b=x(h),k={};Ee(()=>{X(b,d(m).name),k!==(k=d(m).id)&&(h.value=(h.__value=d(m).id)??"")}),I(c,h)});var _;ti(v);var p=A(v,2);{var w=c=>{var m=ei(),h=ln(m);{var b=P=>{var E=Os();Ir(E),Le("blur",E,l),ne("keydown",E,a),tn(E,()=>d(r),R=>g(r,R)),I(P,E)},k=P=>{var E=Ns();ne("click",E,i),I(P,E)};Te(h,P=>{d(n)?P(b):P(k,!1)})}I(c,m)};Te(p,c=>{d(s)&&c(w)})}Ee(()=>{_!==(_=t.selectedId??"")&&(v.value=(v.__value=t.selectedId??"")??"",Xn(v,t.selectedId??""))}),ne("change",v,c=>t.onSelect(c.target.value)),I(e,f),Ze()}Ot(["change","keydown","click"]);const Ms=[{status:"todo",label:"Todo"},{status:"in_progress",label:"In Progress"},{status:"blocked",label:"Blocked"},{status:"done",label:"Done"},{status:"cancelled",label:"Cancelled"}],Is=["critical","high","medium","low"];var Ls=L('<div class="card-desc svelte-35ep21"> </div>'),Fs=L('<span class="tag svelte-35ep21"> </span>'),qs=L('<div class="card-tags svelte-35ep21"></div>'),zs=L('<div draggable="true" role="button" tabindex="0"><div class="card-header svelte-35ep21"><span> </span> <button class="delete-btn svelte-35ep21" title="Delete task">×</button></div> <div class="card-title svelte-35ep21"> </div> <!> <!></div>');function Bs(e,t){Xe(t,!0);let n=N(!1);function r(E){if(!E)return[];try{return JSON.parse(E)}catch{return[]}}const s=Ct(()=>r(t.task.tags)),i=Ct(()=>`priority-${t.task.priority}`);function l(E){g(n,!0),t.onDragStart(E,t.task)}function a(){g(n,!1)}var f=zs();let o;var v=x(f),_=x(v),p=x(_),w=A(_,2),c=A(v,2),m=x(c),h=A(c,2);{var b=E=>{var R=Ls(),Z=x(R);Ee(()=>X(Z,t.task.description)),I(E,R)};Te(h,E=>{t.task.description&&E(b)})}var k=A(h,2);{var P=E=>{var R=qs();Wt(R,21,()=>d(s),Gn,(Z,z)=>{var oe=Fs(),G=x(oe);Ee(()=>X(G,d(z))),I(Z,oe)}),I(E,R)};Te(k,E=>{d(s).length>0&&E(P)})}Ee(()=>{o=In(f,1,"card svelte-35ep21",null,o,{dragging:d(n)}),In(_,1,`priority-badge ${d(i)??""}`,"svelte-35ep21"),X(p,t.task.priority),X(m,t.task.title)}),Le("dragstart",f,l),Le("dragend",f,a),ne("click",f,()=>t.onEdit(t.task)),ne("keydown",f,E=>{E.key==="Enter"&&t.onEdit(t.task)}),ne("click",w,E=>{E.stopPropagation(),t.onDelete(t.task)}),I(e,f),Ze()}Ot(["click","keydown"]);var Hs=L('<button class="add-btn svelte-zswfgn" title="Add task">+</button>'),Vs=L('<div role="list"><div class="column-header svelte-zswfgn"><h3 class="svelte-zswfgn"> <span class="count svelte-zswfgn"> </span></h3> <!></div> <div class="card-list svelte-zswfgn"></div></div>');function Ks(e,t){Xe(t,!0);let n=N(!1);function r(h){h.preventDefault(),h.dataTransfer&&(h.dataTransfer.dropEffect="move"),g(n,!0)}function s(){g(n,!1)}function i(h){h.preventDefault(),g(n,!1),t.onDrop(t.status)}var l=Vs();let a;var f=x(l),o=x(f),v=x(o),_=A(v),p=x(_),w=A(o,2);{var c=h=>{var b=Hs();ne("click",b,()=>t.onAddTask(t.status)),I(h,b)};Te(w,h=>{t.status==="todo"&&h(c)})}var m=A(f,2);Wt(m,21,()=>t.tasks,h=>h.id,(h,b)=>{Bs(h,{get task(){return d(b)},get onEdit(){return t.onEdit},get onDelete(){return t.onDelete},get onDragStart(){return t.onDragStart}})}),Ee(()=>{a=In(l,1,"column svelte-zswfgn",null,a,{"drag-over":d(n)}),X(v,`${t.label??""} `),X(p,t.tasks.length)}),Le("dragover",l,r),Le("dragleave",l,s),Le("drop",l,i),I(e,l),Ze()}Ot(["click"]);var Us=L("<option> </option>"),Ys=L('<div class="field svelte-1gmf2hi"><label for="status" class="svelte-1gmf2hi">Status</label> <select id="status" class="svelte-1gmf2hi"><option>Todo</option><option>In Progress</option><option>Blocked</option><option>Done</option><option>Cancelled</option></select></div>'),Ws=L('<div class="modal-backdrop svelte-1gmf2hi"><div class="modal svelte-1gmf2hi"><div class="modal-header svelte-1gmf2hi"><h2 class="svelte-1gmf2hi"> </h2> <button class="close-btn svelte-1gmf2hi">×</button></div> <form><div class="field svelte-1gmf2hi"><label for="title" class="svelte-1gmf2hi">Title</label> <input id="title" type="text" placeholder="Task title" required="" class="svelte-1gmf2hi"/></div> <div class="field svelte-1gmf2hi"><label for="description" class="svelte-1gmf2hi">Description</label> <textarea id="description" placeholder="Optional description" rows="3" class="svelte-1gmf2hi"></textarea></div> <div class="row svelte-1gmf2hi"><div class="field svelte-1gmf2hi"><label for="priority" class="svelte-1gmf2hi">Priority</label> <select id="priority" class="svelte-1gmf2hi"></select></div> <!></div> <div class="field svelte-1gmf2hi"><label for="tags" class="svelte-1gmf2hi">Tags <span class="hint svelte-1gmf2hi">(comma-separated)</span></label> <input id="tags" type="text" placeholder="e.g. backend, auth, bug" class="svelte-1gmf2hi"/></div> <div class="actions svelte-1gmf2hi"><button type="button" class="btn-cancel svelte-1gmf2hi">Cancel</button> <button type="submit" class="btn-save svelte-1gmf2hi"> </button></div></form></div></div>');function Js(e,t){Xe(t,!0);let n=ni(t,"defaultStatus",3,"todo"),r=N(""),s=N(""),i=N("medium"),l=N("todo"),a=N("");Un(()=>{var O,B,ue,Ce,je;if(g(r,((O=t.task)==null?void 0:O.title)??"",!0),g(s,((B=t.task)==null?void 0:B.description)??"",!0),g(i,((ue=t.task)==null?void 0:ue.priority)??"medium",!0),g(l,((Ce=t.task)==null?void 0:Ce.status)??n(),!0),(je=t.task)!=null&&je.tags)try{g(a,JSON.parse(t.task.tags).join(", "),!0)}catch{g(a,"")}else g(a,"")});const f=Ct(()=>t.task!==null);function o(O){O.preventDefault();const B=d(r).trim();if(!B)return;const ue=d(a).split(",").map(Ce=>Ce.trim()).filter(Boolean);t.onSave({title:B,description:d(s).trim(),priority:d(i),...d(f)?{status:d(l)}:{},tags:ue})}function v(O){O.target.classList.contains("modal-backdrop")&&t.onClose()}function _(O){O.key==="Escape"&&t.onClose()}var p=Ws();Le("keydown",rn,_);var w=x(p),c=x(w),m=x(c),h=x(m),b=A(m,2),k=A(c,2),P=x(k),E=A(x(P),2);Ir(E);var R=A(P,2),Z=A(x(R),2),z=A(R,2),oe=x(z),G=A(x(oe),2);Wt(G,21,()=>Is,Gn,(O,B)=>{var ue=Us(),Ce=x(ue),je={};Ee(()=>{X(Ce,d(B)),je!==(je=d(B))&&(ue.value=(ue.__value=d(B))??"")}),I(O,ue)});var Jt=A(oe,2);{var vn=O=>{var B=Ys(),ue=A(x(B),2),Ce=x(ue);Ce.value=Ce.__value="todo";var je=A(Ce);je.value=je.__value="in_progress";var _n=A(je);_n.value=_n.__value="blocked";var pn=A(_n);pn.value=pn.__value="done";var Qn=A(pn);Qn.value=Qn.__value="cancelled",ur(ue,()=>d(l),ri=>g(l,ri)),I(O,B)};Te(Jt,O=>{d(f)&&O(vn)})}var Gt=A(z,2),hn=A(x(Gt),2),y=A(Gt,2),M=x(y),re=A(M,2),J=x(re);Ee(()=>{X(h,d(f)?"Edit Task":"New Task"),X(J,d(f)?"Save":"Create")}),ne("click",p,v),ne("click",b,function(...O){var B;(B=t.onClose)==null||B.apply(this,O)}),Le("submit",k,o),tn(E,()=>d(r),O=>g(r,O)),tn(Z,()=>d(s),O=>g(s,O)),ur(G,()=>d(i),O=>g(i,O)),tn(hn,()=>d(a),O=>g(a,O)),ne("click",M,function(...O){var B;(B=t.onClose)==null||B.apply(this,O)}),I(e,p),Ze()}Ot(["click"]);var Gs=L('<div class="modal-backdrop svelte-1efofyg"><div class="dialog svelte-1efofyg"><h3 class="svelte-1efofyg"> </h3> <p class="svelte-1efofyg"> </p> <div class="actions svelte-1efofyg"><button class="btn-cancel svelte-1efofyg">Cancel</button> <button class="btn-confirm svelte-1efofyg"> </button></div></div></div>');function Xs(e,t){Xe(t,!0);let n=ni(t,"confirmLabel",3,"Delete");function r(m){m.target.classList.contains("modal-backdrop")&&t.onCancel()}function s(m){m.key==="Escape"&&t.onCancel()}var i=Gs();Le("keydown",rn,s);var l=x(i),a=x(l),f=x(a),o=A(a,2),v=x(o),_=A(o,2),p=x(_),w=A(p,2),c=x(w);Ee(()=>{X(f,t.title),X(v,t.message),X(c,n())}),ne("click",i,r),ne("click",p,function(...m){var h;(h=t.onCancel)==null||h.apply(this,m)}),ne("click",w,function(...m){var h;(h=t.onConfirm)==null||h.apply(this,m)}),I(e,i),Ze()}Ot(["click"]);var Zs=L('<div class="board-message svelte-x7v2jt">Loading tasks...</div>'),Qs=L('<div class="board-message error svelte-x7v2jt"> <button class="svelte-x7v2jt">Retry</button></div>'),$s=L('<div class="board svelte-x7v2jt"></div>'),el=L('<div class="board-wrapper svelte-x7v2jt"><!></div> <!> <!>',1);function tl(e,t){Xe(t,!0);let n=N(nt([])),r=N(!0),s=N(null),i=N(!1),l=N(null),a=N("todo"),f=N(!1),o=N(null),v=N(null);const _=Ct(()=>Ms.map(y=>({...y,tasks:d(n).filter(M=>M.status===y.status)})));async function p(){g(r,!0),g(s,null);try{g(n,await $e.getTasks(t.project.id),!0)}catch(y){g(s,y.message,!0)}finally{g(r,!1)}}Un(()=>{t.project.id,p()});function w(y,M){g(v,M,!0),y.dataTransfer&&(y.dataTransfer.effectAllowed="move",y.dataTransfer.setData("text/plain",M.id))}async function c(y){if(!d(v)||d(v).status===y){g(v,null);return}const M=d(v),re=M.status;g(v,null);const J=d(n).findIndex(O=>O.id===M.id);J!==-1&&(d(n)[J]={...d(n)[J],status:y});try{await $e.updateTask(M.id,{status:y})}catch(O){J!==-1&&(d(n)[J]={...d(n)[J],status:re}),g(s,O.message,!0)}}function m(y){g(l,null),g(a,y,!0),g(i,!0)}function h(y){g(l,y,!0),g(i,!0)}async function b(y){try{if(d(l)){const M=await $e.updateTask(d(l).id,{title:y.title,description:y.description||null,priority:y.priority,status:y.status,tags:y.tags.length>0?y.tags:null}),re=d(n).findIndex(J=>J.id===d(l).id);re!==-1&&(d(n)[re]=M)}else{const M=await $e.createTask(t.project.id,{title:y.title,description:y.description||void 0,priority:y.priority,tags:y.tags.length>0?y.tags:void 0});g(n,[M,...d(n)],!0)}g(i,!1),g(l,null)}catch(M){g(s,M.message,!0)}}function k(y){g(o,y,!0),g(f,!0)}async function P(){if(d(o))try{await $e.deleteTask(d(o).id),g(n,d(n).filter(y=>y.id!==d(o).id&&y.parent_task_id!==d(o).id),!0),g(f,!1),g(o,null)}catch(y){g(s,y.message,!0)}}var E=el(),R=ln(E),Z=x(R);{var z=y=>{var M=Zs();I(y,M)},oe=y=>{var M=Qs(),re=x(M),J=A(re);Ee(()=>X(re,`${d(s)??""} `)),ne("click",J,()=>{g(s,null),p()}),I(y,M)},G=y=>{var M=$s();Wt(M,21,()=>d(_),re=>re.status,(re,J)=>{Ks(re,{get status(){return d(J).status},get label(){return d(J).label},get tasks(){return d(J).tasks},onEdit:h,onDelete:k,onDragStart:w,onDrop:c,onAddTask:m})}),I(y,M)};Te(Z,y=>{d(r)?y(z):d(s)?y(oe,1):y(G,!1)})}var Jt=A(R,2);{var vn=y=>{Js(y,{get task(){return d(l)},get defaultStatus(){return d(a)},onSave:b,onClose:()=>{g(i,!1),g(l,null)}})};Te(Jt,y=>{d(i)&&y(vn)})}var Gt=A(Jt,2);{var hn=y=>{Xs(y,{title:"Delete Task",get message(){return`Are you sure you want to delete "${d(o).title??""}"? This cannot be undone.`},onConfirm:P,onCancel:()=>{g(f,!1),g(o,null)}})};Te(Gt,y=>{d(f)&&d(o)&&y(hn)})}I(e,E),Ze()}Ot(["click"]);var nl=L('<div class="loading svelte-1n46o8q">Loading projects...</div>'),rl=L('<div class="error svelte-1n46o8q"> </div>'),il=L('<div class="empty svelte-1n46o8q"><h2 class="svelte-1n46o8q">No projects yet</h2> <p class="svelte-1n46o8q">Create a project using mindpm MCP tools to get started.</p></div>'),sl=L("<!> <!>",1);function ll(e,t){Xe(t,!0);let n=N(nt([])),r=N(null),s=N(!0),i=N(null);const l=Ct(()=>d(n).find(h=>h.id===d(r))??null);async function a(){try{g(n,await $e.getProjects(),!0),d(n).length>0&&!d(r)&&g(r,d(n)[0].id,!0)}catch(h){g(i,h.message,!0)}finally{g(s,!1)}}function f(h){g(r,h,!0)}async function o(h,b){try{await $e.updateProject(h,{name:b});const k=d(n).findIndex(P=>P.id===h);k!==-1&&(d(n)[k]={...d(n)[k],name:b})}catch(k){g(i,k.message,!0)}}Un(()=>{a()});var v=ei(),_=ln(v);{var p=h=>{var b=nl();I(h,b)},w=h=>{var b=rl(),k=x(b);Ee(()=>X(k,d(i))),I(h,b)},c=h=>{var b=il();I(h,b)},m=h=>{var b=sl(),k=ln(b);Rs(k,{get projects(){return d(n)},get selectedId(){return d(r)},onSelect:f,onRenamed:o});var P=A(k,2);{var E=R=>{tl(R,{get project(){return d(l)}})};Te(P,R=>{d(l)&&R(E)})}I(h,b)};Te(_,h=>{d(s)?h(p):d(i)?h(w,1):d(n).length===0?h(c,2):h(m,!1)})}I(e,v),Ze()}bs(ll,{target:document.getElementById("app")});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.toolbar.svelte-1kanzy0{display:flex;align-items:center;gap:16px;padding:10px 20px;background:var(--primary);color:#fff;flex-shrink:0}.brand.svelte-1kanzy0{font-weight:700;font-size:1.2rem;letter-spacing:-.5px}.project-area.svelte-1kanzy0{display:flex;align-items:center;gap:8px}select.svelte-1kanzy0{padding:6px 10px;border-radius:var(--radius-sm);border:none;background:#fff3;color:#fff;font-weight:600;-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}select.svelte-1kanzy0 option:where(.svelte-1kanzy0){color:var(--text);background:#fff}.rename-btn.svelte-1kanzy0{background:#fff3;border:none;color:#fff;border-radius:var(--radius-sm);padding:4px 8px;font-size:.9rem}.rename-btn.svelte-1kanzy0:hover{background:#ffffff59}.rename-input.svelte-1kanzy0{padding:4px 8px;border-radius:var(--radius-sm);border:2px solid white;background:#ffffffe6;color:var(--text);font-weight:600;width:200px}.card.svelte-35ep21{background:var(--surface);border-radius:var(--radius);padding:10px;box-shadow:var(--card-shadow);cursor:grab;transition:box-shadow .15s}.card.svelte-35ep21:hover{box-shadow:var(--card-shadow-hover)}.card.dragging.svelte-35ep21{opacity:.5}.card-header.svelte-35ep21{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.priority-badge.svelte-35ep21{font-size:.65rem;font-weight:700;text-transform:uppercase;padding:2px 6px;border-radius:3px;color:#fff;letter-spacing:.5px}.priority-critical.svelte-35ep21{background:var(--priority-critical)}.priority-high.svelte-35ep21{background:var(--priority-high);color:#333}.priority-medium.svelte-35ep21{background:var(--priority-medium)}.priority-low.svelte-35ep21{background:var(--priority-low);color:#333}.delete-btn.svelte-35ep21{background:none;border:none;color:var(--text-muted);font-size:1.2rem;line-height:1;padding:0 4px;opacity:0;transition:opacity .15s}.card.svelte-35ep21:hover .delete-btn:where(.svelte-35ep21){opacity:1}.delete-btn.svelte-35ep21:hover{color:var(--danger)}.card-title.svelte-35ep21{font-size:.9rem;font-weight:500;word-break:break-word}.card-desc.svelte-35ep21{font-size:.8rem;color:var(--text-muted);margin-top:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.card-tags.svelte-35ep21{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.tag.svelte-35ep21{font-size:.7rem;background:var(--bg);color:var(--text-muted);padding:2px 6px;border-radius:3px}.column.svelte-zswfgn{background:var(--column-bg);border-radius:var(--radius);width:280px;min-width:280px;max-height:calc(100vh - 70px);display:flex;flex-direction:column;transition:background-color .15s}.column.drag-over.svelte-zswfgn{background:#d5dbe3}.column-header.svelte-zswfgn{padding:10px 12px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.column-header.svelte-zswfgn h3:where(.svelte-zswfgn){font-size:.85rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted)}.count.svelte-zswfgn{font-weight:400;color:var(--text-muted);margin-left:4px}.add-btn.svelte-zswfgn{background:#00000014;border:none;border-radius:var(--radius-sm);width:28px;height:28px;font-size:1.2rem;color:var(--text-muted);display:flex;align-items:center;justify-content:center}.add-btn.svelte-zswfgn:hover{background:#00000026;color:var(--text)}.card-list.svelte-zswfgn{padding:0 8px 8px;display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1}.modal-backdrop.svelte-1gmf2hi{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1gmf2hi{background:var(--surface);border-radius:var(--radius);width:460px;max-width:95vw;max-height:90vh;overflow-y:auto;padding:24px}.modal-header.svelte-1gmf2hi{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.modal-header.svelte-1gmf2hi h2:where(.svelte-1gmf2hi){font-size:1.2rem;font-weight:600}.close-btn.svelte-1gmf2hi{background:none;border:none;font-size:1.5rem;color:var(--text-muted);padding:0 4px}.close-btn.svelte-1gmf2hi:hover{color:var(--text)}.field.svelte-1gmf2hi{margin-bottom:16px;flex:1}label.svelte-1gmf2hi{display:block;font-size:.8rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}.hint.svelte-1gmf2hi{font-weight:400;text-transform:none;letter-spacing:0}input.svelte-1gmf2hi,textarea.svelte-1gmf2hi,select.svelte-1gmf2hi{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text)}input.svelte-1gmf2hi:focus,textarea.svelte-1gmf2hi:focus,select.svelte-1gmf2hi:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 2px #0079bf33}textarea.svelte-1gmf2hi{resize:vertical}.row.svelte-1gmf2hi{display:flex;gap:12px}.actions.svelte-1gmf2hi{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}.btn-cancel.svelte-1gmf2hi,.btn-save.svelte-1gmf2hi{padding:8px 16px;border-radius:var(--radius-sm);font-weight:600;border:none}.btn-cancel.svelte-1gmf2hi{background:var(--bg);color:var(--text-muted)}.btn-cancel.svelte-1gmf2hi:hover{background:var(--border)}.btn-save.svelte-1gmf2hi{background:var(--primary);color:#fff}.btn-save.svelte-1gmf2hi:hover{background:var(--primary-hover)}.modal-backdrop.svelte-1efofyg{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:200}.dialog.svelte-1efofyg{background:var(--surface);border-radius:var(--radius);padding:24px;width:360px;max-width:90vw}h3.svelte-1efofyg{font-size:1.1rem;margin-bottom:8px}p.svelte-1efofyg{color:var(--text-muted);font-size:.9rem;margin-bottom:20px}.actions.svelte-1efofyg{display:flex;justify-content:flex-end;gap:8px}.btn-cancel.svelte-1efofyg,.btn-confirm.svelte-1efofyg{padding:8px 16px;border-radius:var(--radius-sm);font-weight:600;border:none}.btn-cancel.svelte-1efofyg{background:var(--bg);color:var(--text-muted)}.btn-cancel.svelte-1efofyg:hover{background:var(--border)}.btn-confirm.svelte-1efofyg{background:var(--danger);color:#fff}.btn-confirm.svelte-1efofyg:hover{background:var(--danger-hover)}.board-wrapper.svelte-x7v2jt{flex:1;overflow-x:auto;padding:16px}.board.svelte-x7v2jt{display:flex;gap:12px;align-items:flex-start;min-height:calc(100vh - 100px)}.board-message.svelte-x7v2jt{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:200px;color:var(--text-muted);font-size:1rem}.board-message.error.svelte-x7v2jt{color:var(--danger)}.board-message.svelte-x7v2jt button:where(.svelte-x7v2jt){padding:6px 16px;background:var(--primary);color:#fff;border:none;border-radius:var(--radius-sm);font-weight:600}.loading.svelte-1n46o8q,.error.svelte-1n46o8q,.empty.svelte-1n46o8q{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:8px}.error.svelte-1n46o8q{color:var(--danger)}.empty.svelte-1n46o8q h2:where(.svelte-1n46o8q){font-size:1.5rem;font-weight:600}.empty.svelte-1n46o8q p:where(.svelte-1n46o8q){color:var(--text-muted)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #f5f6f8;--surface: #ffffff;--border: #dfe1e6;--text: #172b4d;--text-muted: #5e6c84;--primary: #0079bf;--primary-hover: #026aa7;--danger: #eb5a46;--danger-hover: #cf513d;--priority-critical: #eb5a46;--priority-high: #f2d600;--priority-medium: #61bd4f;--priority-low: #c1c7d0;--column-bg: #ebecf0;--card-shadow: 0 1px 2px rgba(9, 30, 66, .15);--card-shadow-hover: 0 4px 8px rgba(9, 30, 66, .2);--radius: 6px;--radius-sm: 4px}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;min-height:100vh}button{cursor:pointer;font-family:inherit;font-size:inherit}input,textarea,select{font-family:inherit;font-size:inherit}#app{min-height:100vh;display:flex;flex-direction:column}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>mindpm - Kanban</title>
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-CLK3PAFj.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="/assets/index-D3uZo-NO.css">
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<div id="app"></div>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|