mindpm 1.2.0 → 1.2.2

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/dist/index.js CHANGED
@@ -705,302 +705,6 @@ function registerNoteTools(server2) {
705
705
 
706
706
  // src/tools/sessions.ts
707
707
  import { z as z5 } from "zod/v4";
708
- function getActivitySince(db2, projectId, cutoffTime) {
709
- return db2.prepare(`
710
- SELECT 'task_created' as type, id, title, created_at as timestamp
711
- FROM tasks
712
- WHERE project_id = ? AND created_at > ?
713
- UNION ALL
714
- SELECT 'task_updated' as type, id, title, updated_at as timestamp
715
- FROM tasks
716
- WHERE project_id = ? AND updated_at > ? AND updated_at != created_at
717
- UNION ALL
718
- SELECT 'decision' as type, id, title, created_at as timestamp
719
- FROM decisions
720
- WHERE project_id = ? AND created_at > ?
721
- UNION ALL
722
- SELECT 'note' as type, id, substr(content, 1, 80) as title, created_at as timestamp
723
- FROM notes
724
- WHERE project_id = ? AND created_at > ?
725
- ORDER BY timestamp DESC
726
- `).all(
727
- projectId,
728
- cutoffTime,
729
- projectId,
730
- cutoffTime,
731
- projectId,
732
- cutoffTime,
733
- projectId,
734
- cutoffTime
735
- );
736
- }
737
- function registerSessionTools(server2) {
738
- server2.registerTool(
739
- "start_session",
740
- {
741
- 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.",
743
- inputSchema: {
744
- project: z5.string().optional().describe("Project name or ID")
745
- }
746
- },
747
- async ({ project }) => {
748
- const resolved = resolveProjectOrDefault(project);
749
- if (!resolved) {
750
- return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found. Create a project first." }], isError: true };
751
- }
752
- const db2 = getDb();
753
- const projectRow = db2.prepare("SELECT * FROM projects WHERE id = ?").get(resolved.id);
754
- let lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
755
- const cutoffTime = lastSession?.created_at ?? "1970-01-01";
756
- const recentActivity = getActivitySince(db2, resolved.id, cutoffTime);
757
- if (recentActivity.length > 0) {
758
- const taskIds = [...new Set(
759
- recentActivity.filter((a) => a.type === "task_created" || a.type === "task_updated").map((a) => a.id)
760
- )];
761
- const decisionIds = [...new Set(
762
- recentActivity.filter((a) => a.type === "decision").map((a) => a.id)
763
- )];
764
- const syntheticId = generateId();
765
- db2.prepare(
766
- `INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made) VALUES (?, ?, ?, ?, ?)`
767
- ).run(
768
- syntheticId,
769
- resolved.id,
770
- `Auto-generated: ${recentActivity.length} activities since last session`,
771
- taskIds.length > 0 ? JSON.stringify(taskIds) : null,
772
- decisionIds.length > 0 ? JSON.stringify(decisionIds) : null
773
- );
774
- lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
775
- }
776
- const activeTasks = db2.prepare(
777
- `SELECT id, title, status, priority, tags FROM tasks
778
- WHERE project_id = ? AND status NOT IN ('done', 'cancelled')
779
- ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END`
780
- ).all(resolved.id);
781
- const blockedTasks = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
782
- const recentDecisions = db2.prepare("SELECT id, title, decision, created_at FROM decisions WHERE project_id = ? ORDER BY created_at DESC LIMIT 5").all(resolved.id);
783
- const taskCounts = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
784
- const contextItems = db2.prepare("SELECT key, value, category FROM context WHERE project_id = ? ORDER BY category, key").all(resolved.id);
785
- db2.prepare("UPDATE projects SET status = status WHERE id = ?").run(resolved.id);
786
- const result = {
787
- project: projectRow,
788
- last_session: lastSession ? {
789
- summary: lastSession.summary,
790
- next_steps: lastSession.next_steps,
791
- when: lastSession.created_at
792
- } : null,
793
- recent_activity: recentActivity.slice(0, 20),
794
- task_summary: taskCounts,
795
- active_tasks: activeTasks,
796
- blocked_tasks: blockedTasks,
797
- recent_decisions: recentDecisions,
798
- context: contextItems
799
- };
800
- return {
801
- content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
802
- };
803
- }
804
- );
805
- server2.registerTool(
806
- "end_session",
807
- {
808
- title: "End Session",
809
- description: "End a work session with a summary of what was accomplished and what to do next. Call this when the user is done working.",
810
- inputSchema: {
811
- project: z5.string().optional().describe("Project name or ID"),
812
- summary: z5.string().describe("Summary of what was accomplished this session"),
813
- tasks_worked_on: z5.array(z5.string()).optional().describe("Task IDs that were worked on"),
814
- decisions_made: z5.array(z5.string()).optional().describe("Decision IDs that were made"),
815
- next_steps: z5.string().optional().describe("What to do next time")
816
- }
817
- },
818
- async ({ project, summary, tasks_worked_on, decisions_made, next_steps }) => {
819
- const resolved = resolveProjectOrDefault(project);
820
- if (!resolved) {
821
- return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
822
- }
823
- const db2 = getDb();
824
- const id = generateId();
825
- db2.prepare(
826
- `INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made, next_steps) VALUES (?, ?, ?, ?, ?, ?)`
827
- ).run(
828
- id,
829
- resolved.id,
830
- summary,
831
- tasks_worked_on ? JSON.stringify(tasks_worked_on) : null,
832
- decisions_made ? JSON.stringify(decisions_made) : null,
833
- next_steps ?? null
834
- );
835
- return {
836
- content: [{
837
- type: "text",
838
- text: JSON.stringify({ session_id: id, message: `Session ended for ${resolved.name}. Summary saved.` })
839
- }]
840
- };
841
- }
842
- );
843
- }
844
-
845
- // src/tools/queries.ts
846
- import { z as z6 } from "zod/v4";
847
- function registerQueryTools(server2) {
848
- server2.registerTool(
849
- "query",
850
- {
851
- title: "Query Database",
852
- description: "Execute a read-only SQL query against the database. Only SELECT statements are allowed. Use this for custom queries not covered by other tools.",
853
- inputSchema: {
854
- sql: z6.string().describe("SQL SELECT query to execute")
855
- }
856
- },
857
- async ({ sql }) => {
858
- const trimmed = sql.trim();
859
- if (!trimmed.toUpperCase().startsWith("SELECT")) {
860
- return { content: [{ type: "text", text: "Only SELECT queries are allowed." }], isError: true };
861
- }
862
- const db2 = getDb();
863
- try {
864
- const stmt = db2.prepare(trimmed);
865
- if (!stmt.reader) {
866
- return { content: [{ type: "text", text: "Only read-only queries are allowed." }], isError: true };
867
- }
868
- const rows = stmt.all();
869
- return {
870
- content: [{ type: "text", text: JSON.stringify({ rows, count: rows.length }, null, 2) }]
871
- };
872
- } catch (e) {
873
- return { content: [{ type: "text", text: `Query error: ${e.message}` }], isError: true };
874
- }
875
- }
876
- );
877
- server2.registerTool(
878
- "get_project_summary",
879
- {
880
- title: "Get Project Summary",
881
- description: "High-level summary of a project: total tasks by status, recent activity, open blockers, and upcoming priorities.",
882
- inputSchema: {
883
- project: z6.string().optional().describe("Project name or ID")
884
- }
885
- },
886
- async ({ project }) => {
887
- const resolved = resolveProjectOrDefault(project);
888
- if (!resolved) {
889
- return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
890
- }
891
- const db2 = getDb();
892
- const tasksByStatus = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
893
- const blockers = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
894
- const upcomingPriorities = db2.prepare(
895
- `SELECT id, title, priority, status FROM tasks
896
- WHERE project_id = ? AND status IN ('todo', 'in_progress')
897
- ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END
898
- LIMIT 10`
899
- ).all(resolved.id);
900
- const recentActivity = db2.prepare(
901
- `SELECT 'task' as type, title, updated_at FROM tasks WHERE project_id = ? AND updated_at > datetime('now', '-7 days')
902
- UNION ALL
903
- SELECT 'decision' as type, title, created_at as updated_at FROM decisions WHERE project_id = ? AND created_at > datetime('now', '-7 days')
904
- UNION ALL
905
- SELECT 'note' as type, substr(content, 1, 50) as title, created_at as updated_at FROM notes WHERE project_id = ? AND created_at > datetime('now', '-7 days')
906
- ORDER BY updated_at DESC
907
- LIMIT 20`
908
- ).all(resolved.id, resolved.id, resolved.id);
909
- const totalNotes = db2.prepare("SELECT COUNT(*) as count FROM notes WHERE project_id = ?").get(resolved.id);
910
- const totalDecisions = db2.prepare("SELECT COUNT(*) as count FROM decisions WHERE project_id = ?").get(resolved.id);
911
- const totalSessions = db2.prepare("SELECT COUNT(*) as count FROM sessions WHERE project_id = ?").get(resolved.id);
912
- return {
913
- content: [{
914
- type: "text",
915
- text: JSON.stringify(
916
- {
917
- project: resolved.name,
918
- tasks_by_status: tasksByStatus,
919
- blockers,
920
- upcoming_priorities: upcomingPriorities,
921
- recent_activity: recentActivity,
922
- totals: { notes: totalNotes.count, decisions: totalDecisions.count, sessions: totalSessions.count }
923
- },
924
- null,
925
- 2
926
- )
927
- }]
928
- };
929
- }
930
- );
931
- server2.registerTool(
932
- "get_blockers",
933
- {
934
- title: "Get Blockers",
935
- description: "List all blocked tasks with what's blocking them.",
936
- inputSchema: {
937
- project: z6.string().optional().describe("Project name or ID")
938
- }
939
- },
940
- async ({ project }) => {
941
- const resolved = resolveProjectOrDefault(project);
942
- if (!resolved) {
943
- return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
944
- }
945
- const db2 = getDb();
946
- const blockers = db2.prepare("SELECT * FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
947
- const enriched = blockers.map((task) => {
948
- let blockingTasks = [];
949
- if (task.blocked_by) {
950
- try {
951
- const ids = JSON.parse(task.blocked_by);
952
- blockingTasks = ids.map((id) => {
953
- const blocking = db2.prepare("SELECT id, title, status FROM tasks WHERE id = ?").get(id);
954
- return blocking ?? { id, title: "Unknown task", status: "unknown" };
955
- });
956
- } catch {
957
- }
958
- }
959
- return { ...task, blocking_tasks: blockingTasks };
960
- });
961
- return {
962
- content: [{ type: "text", text: JSON.stringify({ project: resolved.name, blockers: enriched }, null, 2) }]
963
- };
964
- }
965
- );
966
- server2.registerTool(
967
- "search",
968
- {
969
- title: "Search Everything",
970
- description: "Full-text search across tasks, notes, and decisions for a project.",
971
- inputSchema: {
972
- project: z6.string().optional().describe("Project name or ID"),
973
- query: z6.string().describe("Search query")
974
- }
975
- },
976
- async ({ project, query }) => {
977
- const resolved = resolveProjectOrDefault(project);
978
- if (!resolved) {
979
- return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
980
- }
981
- const db2 = getDb();
982
- const pattern = `%${query}%`;
983
- const tasks = db2.prepare("SELECT id, title, description, status, priority, 'task' as type FROM tasks WHERE project_id = ? AND (title LIKE ? OR description LIKE ?)").all(resolved.id, pattern, pattern);
984
- const notes = db2.prepare("SELECT id, content, category, 'note' as type FROM notes WHERE project_id = ? AND content LIKE ?").all(resolved.id, pattern);
985
- const decisions = db2.prepare("SELECT id, title, decision, reasoning, 'decision' as type FROM decisions WHERE project_id = ? AND (title LIKE ? OR decision LIKE ? OR reasoning LIKE ?)").all(resolved.id, pattern, pattern, pattern);
986
- return {
987
- content: [{
988
- type: "text",
989
- text: JSON.stringify(
990
- {
991
- project: resolved.name,
992
- query,
993
- results: { tasks, notes, decisions },
994
- total: tasks.length + notes.length + decisions.length
995
- },
996
- null,
997
- 2
998
- )
999
- }]
1000
- };
1001
- }
1002
- );
1003
- }
1004
708
 
1005
709
  // src/server/http.ts
1006
710
  import { createServer } from "http";
@@ -1008,6 +712,7 @@ import { readFile } from "fs/promises";
1008
712
  import { join, extname } from "path";
1009
713
  import { fileURLToPath } from "url";
1010
714
  import { dirname as dirname2 } from "path";
715
+ import { spawn } from "child_process";
1011
716
 
1012
717
  // src/server/routes.ts
1013
718
  var listProjects = async (_req, res) => {
@@ -1201,129 +906,445 @@ async function handleApiRequest(req, res) {
1201
906
  await route.handler(req, res, params);
1202
907
  return;
1203
908
  }
1204
- }
1205
- sendJson(res, 404, { error: "Not found" });
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
+ _httpPort = port;
1005
+ const server2 = createServer(async (req, res) => {
1006
+ try {
1007
+ if (req.url?.startsWith("/api/")) {
1008
+ await handleApiRequest(req, res);
1009
+ } else {
1010
+ await serveStatic(req, res);
1011
+ }
1012
+ } catch (err) {
1013
+ process.stderr.write(`[mindpm] HTTP error: ${err}
1014
+ `);
1015
+ if (!res.headersSent) {
1016
+ sendJson(res, 500, { error: "Internal server error" });
1017
+ }
1018
+ }
1019
+ });
1020
+ server2.on("error", (err) => {
1021
+ _httpPort = null;
1022
+ if (err.code === "EADDRINUSE") {
1023
+ process.stderr.write(
1024
+ `[mindpm] Warning: Port ${port} is in use. Kanban UI not available. MCP server continues.
1025
+ `
1026
+ );
1027
+ } else {
1028
+ process.stderr.write(`[mindpm] HTTP server error: ${err.message}
1029
+ `);
1030
+ }
1031
+ });
1032
+ server2.listen(port, () => {
1033
+ const url = `http://localhost:${port}`;
1034
+ process.stderr.write(`[mindpm] Kanban UI available at ${url}
1035
+ `);
1036
+ if (process.env.MINDPM_OPEN_BROWSER === "1") {
1037
+ openBrowser(url);
1038
+ }
1039
+ });
1040
+ return server2;
1041
+ }
1042
+
1043
+ // src/tools/sessions.ts
1044
+ function getActivitySince(db2, projectId, cutoffTime) {
1045
+ return db2.prepare(`
1046
+ SELECT 'task_created' as type, id, title, created_at as timestamp
1047
+ FROM tasks
1048
+ WHERE project_id = ? AND created_at > ?
1049
+ UNION ALL
1050
+ SELECT 'task_updated' as type, id, title, updated_at as timestamp
1051
+ FROM tasks
1052
+ WHERE project_id = ? AND updated_at > ? AND updated_at != created_at
1053
+ UNION ALL
1054
+ SELECT 'decision' as type, id, title, created_at as timestamp
1055
+ FROM decisions
1056
+ WHERE project_id = ? AND created_at > ?
1057
+ UNION ALL
1058
+ SELECT 'note' as type, id, substr(content, 1, 80) as title, created_at as timestamp
1059
+ FROM notes
1060
+ WHERE project_id = ? AND created_at > ?
1061
+ ORDER BY timestamp DESC
1062
+ `).all(
1063
+ projectId,
1064
+ cutoffTime,
1065
+ projectId,
1066
+ cutoffTime,
1067
+ projectId,
1068
+ cutoffTime,
1069
+ projectId,
1070
+ cutoffTime
1071
+ );
1072
+ }
1073
+ function registerSessionTools(server2) {
1074
+ server2.registerTool(
1075
+ "start_session",
1076
+ {
1077
+ title: "Start Session",
1078
+ 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.",
1079
+ inputSchema: {
1080
+ project: z5.string().optional().describe("Project name or ID")
1081
+ }
1082
+ },
1083
+ async ({ project }) => {
1084
+ const resolved = resolveProjectOrDefault(project);
1085
+ if (!resolved) {
1086
+ return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found. Create a project first." }], isError: true };
1087
+ }
1088
+ const db2 = getDb();
1089
+ const projectRow = db2.prepare("SELECT * FROM projects WHERE id = ?").get(resolved.id);
1090
+ let lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
1091
+ const cutoffTime = lastSession?.created_at ?? "1970-01-01";
1092
+ const recentActivity = getActivitySince(db2, resolved.id, cutoffTime);
1093
+ if (recentActivity.length > 0) {
1094
+ const taskIds = [...new Set(
1095
+ recentActivity.filter((a) => a.type === "task_created" || a.type === "task_updated").map((a) => a.id)
1096
+ )];
1097
+ const decisionIds = [...new Set(
1098
+ recentActivity.filter((a) => a.type === "decision").map((a) => a.id)
1099
+ )];
1100
+ const syntheticId = generateId();
1101
+ db2.prepare(
1102
+ `INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made) VALUES (?, ?, ?, ?, ?)`
1103
+ ).run(
1104
+ syntheticId,
1105
+ resolved.id,
1106
+ `Auto-generated: ${recentActivity.length} activities since last session`,
1107
+ taskIds.length > 0 ? JSON.stringify(taskIds) : null,
1108
+ decisionIds.length > 0 ? JSON.stringify(decisionIds) : null
1109
+ );
1110
+ lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
1111
+ }
1112
+ const activeTasks = db2.prepare(
1113
+ `SELECT id, title, status, priority, tags FROM tasks
1114
+ WHERE project_id = ? AND status NOT IN ('done', 'cancelled')
1115
+ ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END`
1116
+ ).all(resolved.id);
1117
+ const blockedTasks = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
1118
+ const recentDecisions = db2.prepare("SELECT id, title, decision, created_at FROM decisions WHERE project_id = ? ORDER BY created_at DESC LIMIT 5").all(resolved.id);
1119
+ const taskCounts = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
1120
+ const contextItems = db2.prepare("SELECT key, value, category FROM context WHERE project_id = ? ORDER BY category, key").all(resolved.id);
1121
+ db2.prepare("UPDATE projects SET status = status WHERE id = ?").run(resolved.id);
1122
+ const port = getHttpPort();
1123
+ const result = {
1124
+ kanban_url: port ? `http://localhost:${port}?project=${resolved.id}` : null,
1125
+ project: projectRow,
1126
+ last_session: lastSession ? {
1127
+ summary: lastSession.summary,
1128
+ next_steps: lastSession.next_steps,
1129
+ when: lastSession.created_at
1130
+ } : null,
1131
+ recent_activity: recentActivity.slice(0, 20),
1132
+ task_summary: taskCounts,
1133
+ active_tasks: activeTasks,
1134
+ blocked_tasks: blockedTasks,
1135
+ recent_decisions: recentDecisions,
1136
+ context: contextItems
1137
+ };
1138
+ return {
1139
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
1140
+ };
1141
+ }
1142
+ );
1143
+ server2.registerTool(
1144
+ "end_session",
1145
+ {
1146
+ title: "End Session",
1147
+ description: "End a work session with a summary of what was accomplished and what to do next. Call this when the user is done working.",
1148
+ inputSchema: {
1149
+ project: z5.string().optional().describe("Project name or ID"),
1150
+ summary: z5.string().describe("Summary of what was accomplished this session"),
1151
+ tasks_worked_on: z5.array(z5.string()).optional().describe("Task IDs that were worked on"),
1152
+ decisions_made: z5.array(z5.string()).optional().describe("Decision IDs that were made"),
1153
+ next_steps: z5.string().optional().describe("What to do next time")
1154
+ }
1155
+ },
1156
+ async ({ project, summary, tasks_worked_on, decisions_made, next_steps }) => {
1157
+ const resolved = resolveProjectOrDefault(project);
1158
+ if (!resolved) {
1159
+ return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
1160
+ }
1161
+ const db2 = getDb();
1162
+ const id = generateId();
1163
+ db2.prepare(
1164
+ `INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made, next_steps) VALUES (?, ?, ?, ?, ?, ?)`
1165
+ ).run(
1166
+ id,
1167
+ resolved.id,
1168
+ summary,
1169
+ tasks_worked_on ? JSON.stringify(tasks_worked_on) : null,
1170
+ decisions_made ? JSON.stringify(decisions_made) : null,
1171
+ next_steps ?? null
1172
+ );
1173
+ return {
1174
+ content: [{
1175
+ type: "text",
1176
+ text: JSON.stringify({ session_id: id, message: `Session ended for ${resolved.name}. Summary saved.` })
1177
+ }]
1178
+ };
1179
+ }
1180
+ );
1206
1181
  }
1207
1182
 
1208
- // src/server/http.ts
1209
- var __filename = fileURLToPath(import.meta.url);
1210
- var __dirname = dirname2(__filename);
1211
- function resolveStaticDir() {
1212
- const scriptDir = dirname2(process.argv[1] || __filename);
1213
- return join(scriptDir, "ui");
1214
- }
1215
- var MIME_TYPES = {
1216
- ".html": "text/html; charset=utf-8",
1217
- ".js": "application/javascript; charset=utf-8",
1218
- ".css": "text/css; charset=utf-8",
1219
- ".json": "application/json; charset=utf-8",
1220
- ".svg": "image/svg+xml",
1221
- ".png": "image/png",
1222
- ".jpg": "image/jpeg",
1223
- ".ico": "image/x-icon",
1224
- ".woff": "font/woff",
1225
- ".woff2": "font/woff2",
1226
- ".ttf": "font/ttf"
1227
- };
1228
- function parseBody(req) {
1229
- return new Promise((resolve2, reject) => {
1230
- const chunks = [];
1231
- req.on("data", (chunk) => chunks.push(chunk));
1232
- req.on("end", () => {
1233
- if (chunks.length === 0) {
1234
- resolve2({});
1235
- return;
1183
+ // src/tools/queries.ts
1184
+ import { z as z6 } from "zod/v4";
1185
+ function registerQueryTools(server2) {
1186
+ server2.registerTool(
1187
+ "query",
1188
+ {
1189
+ title: "Query Database",
1190
+ description: "Execute a read-only SQL query against the database. Only SELECT statements are allowed. Use this for custom queries not covered by other tools.",
1191
+ inputSchema: {
1192
+ sql: z6.string().describe("SQL SELECT query to execute")
1193
+ }
1194
+ },
1195
+ async ({ sql }) => {
1196
+ const trimmed = sql.trim();
1197
+ if (!trimmed.toUpperCase().startsWith("SELECT")) {
1198
+ return { content: [{ type: "text", text: "Only SELECT queries are allowed." }], isError: true };
1236
1199
  }
1200
+ const db2 = getDb();
1237
1201
  try {
1238
- resolve2(JSON.parse(Buffer.concat(chunks).toString()));
1239
- } catch {
1240
- resolve2({});
1202
+ const stmt = db2.prepare(trimmed);
1203
+ if (!stmt.reader) {
1204
+ return { content: [{ type: "text", text: "Only read-only queries are allowed." }], isError: true };
1205
+ }
1206
+ const rows = stmt.all();
1207
+ return {
1208
+ content: [{ type: "text", text: JSON.stringify({ rows, count: rows.length }, null, 2) }]
1209
+ };
1210
+ } catch (e) {
1211
+ return { content: [{ type: "text", text: `Query error: ${e.message}` }], isError: true };
1241
1212
  }
1242
- });
1243
- req.on("error", reject);
1244
- });
1245
- }
1246
- function matchRoute(pattern, pathname) {
1247
- const patternParts = pattern.split("/").filter(Boolean);
1248
- const pathParts = pathname.split("/").filter(Boolean);
1249
- if (patternParts.length !== pathParts.length) return null;
1250
- const params = {};
1251
- for (let i = 0; i < patternParts.length; i++) {
1252
- if (patternParts[i].startsWith(":")) {
1253
- params[patternParts[i].slice(1)] = decodeURIComponent(pathParts[i]);
1254
- } else if (patternParts[i] !== pathParts[i]) {
1255
- return null;
1256
1213
  }
1257
- }
1258
- return params;
1259
- }
1260
- function sendJson(res, status, data) {
1261
- res.writeHead(status, { "Content-Type": "application/json; charset=utf-8" });
1262
- res.end(JSON.stringify(data));
1263
- }
1264
- async function serveStatic(req, res) {
1265
- const staticDir = resolveStaticDir();
1266
- const url = new URL(req.url || "/", "http://localhost");
1267
- let filePath = join(staticDir, url.pathname === "/" ? "index.html" : url.pathname);
1268
- try {
1269
- const content = await readFile(filePath);
1270
- const ext = extname(filePath);
1271
- const contentType = MIME_TYPES[ext] || "application/octet-stream";
1272
- res.writeHead(200, { "Content-Type": contentType });
1273
- res.end(content);
1274
- } catch {
1275
- try {
1276
- const indexPath = join(staticDir, "index.html");
1277
- const content = await readFile(indexPath);
1278
- res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
1279
- res.end(content);
1280
- } catch {
1281
- res.writeHead(503, { "Content-Type": "text/html; charset=utf-8" });
1282
- res.end(
1283
- "<html><body><h1>mindpm UI not built</h1><p>Run <code>npm run build:ui</code> to build the Kanban UI.</p></body></html>"
1284
- );
1214
+ );
1215
+ server2.registerTool(
1216
+ "get_project_summary",
1217
+ {
1218
+ title: "Get Project Summary",
1219
+ description: "High-level summary of a project: total tasks by status, recent activity, open blockers, and upcoming priorities.",
1220
+ inputSchema: {
1221
+ project: z6.string().optional().describe("Project name or ID")
1222
+ }
1223
+ },
1224
+ async ({ project }) => {
1225
+ const resolved = resolveProjectOrDefault(project);
1226
+ if (!resolved) {
1227
+ return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
1228
+ }
1229
+ const db2 = getDb();
1230
+ const tasksByStatus = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
1231
+ const blockers = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
1232
+ const upcomingPriorities = db2.prepare(
1233
+ `SELECT id, title, priority, status FROM tasks
1234
+ WHERE project_id = ? AND status IN ('todo', 'in_progress')
1235
+ ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END
1236
+ LIMIT 10`
1237
+ ).all(resolved.id);
1238
+ const recentActivity = db2.prepare(
1239
+ `SELECT 'task' as type, title, updated_at FROM tasks WHERE project_id = ? AND updated_at > datetime('now', '-7 days')
1240
+ UNION ALL
1241
+ SELECT 'decision' as type, title, created_at as updated_at FROM decisions WHERE project_id = ? AND created_at > datetime('now', '-7 days')
1242
+ UNION ALL
1243
+ SELECT 'note' as type, substr(content, 1, 50) as title, created_at as updated_at FROM notes WHERE project_id = ? AND created_at > datetime('now', '-7 days')
1244
+ ORDER BY updated_at DESC
1245
+ LIMIT 20`
1246
+ ).all(resolved.id, resolved.id, resolved.id);
1247
+ const totalNotes = db2.prepare("SELECT COUNT(*) as count FROM notes WHERE project_id = ?").get(resolved.id);
1248
+ const totalDecisions = db2.prepare("SELECT COUNT(*) as count FROM decisions WHERE project_id = ?").get(resolved.id);
1249
+ const totalSessions = db2.prepare("SELECT COUNT(*) as count FROM sessions WHERE project_id = ?").get(resolved.id);
1250
+ return {
1251
+ content: [{
1252
+ type: "text",
1253
+ text: JSON.stringify(
1254
+ {
1255
+ project: resolved.name,
1256
+ tasks_by_status: tasksByStatus,
1257
+ blockers,
1258
+ upcoming_priorities: upcomingPriorities,
1259
+ recent_activity: recentActivity,
1260
+ totals: { notes: totalNotes.count, decisions: totalDecisions.count, sessions: totalSessions.count }
1261
+ },
1262
+ null,
1263
+ 2
1264
+ )
1265
+ }]
1266
+ };
1285
1267
  }
1286
- }
1287
- }
1288
- function startHttpServer(port) {
1289
- const server2 = createServer(async (req, res) => {
1290
- try {
1291
- if (req.url?.startsWith("/api/")) {
1292
- await handleApiRequest(req, res);
1293
- } else {
1294
- await serveStatic(req, res);
1268
+ );
1269
+ server2.registerTool(
1270
+ "get_blockers",
1271
+ {
1272
+ title: "Get Blockers",
1273
+ description: "List all blocked tasks with what's blocking them.",
1274
+ inputSchema: {
1275
+ project: z6.string().optional().describe("Project name or ID")
1295
1276
  }
1296
- } catch (err) {
1297
- process.stderr.write(`[mindpm] HTTP error: ${err}
1298
- `);
1299
- if (!res.headersSent) {
1300
- sendJson(res, 500, { error: "Internal server error" });
1277
+ },
1278
+ async ({ project }) => {
1279
+ const resolved = resolveProjectOrDefault(project);
1280
+ if (!resolved) {
1281
+ return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
1301
1282
  }
1283
+ const db2 = getDb();
1284
+ const blockers = db2.prepare("SELECT * FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
1285
+ const enriched = blockers.map((task) => {
1286
+ let blockingTasks = [];
1287
+ if (task.blocked_by) {
1288
+ try {
1289
+ const ids = JSON.parse(task.blocked_by);
1290
+ blockingTasks = ids.map((id) => {
1291
+ const blocking = db2.prepare("SELECT id, title, status FROM tasks WHERE id = ?").get(id);
1292
+ return blocking ?? { id, title: "Unknown task", status: "unknown" };
1293
+ });
1294
+ } catch {
1295
+ }
1296
+ }
1297
+ return { ...task, blocking_tasks: blockingTasks };
1298
+ });
1299
+ return {
1300
+ content: [{ type: "text", text: JSON.stringify({ project: resolved.name, blockers: enriched }, null, 2) }]
1301
+ };
1302
1302
  }
1303
- });
1304
- server2.on("error", (err) => {
1305
- if (err.code === "EADDRINUSE") {
1306
- process.stderr.write(
1307
- `[mindpm] Warning: Port ${port} is in use. Kanban UI not available. MCP server continues.
1308
- `
1309
- );
1310
- } else {
1311
- process.stderr.write(`[mindpm] HTTP server error: ${err.message}
1312
- `);
1303
+ );
1304
+ server2.registerTool(
1305
+ "search",
1306
+ {
1307
+ title: "Search Everything",
1308
+ description: "Full-text search across tasks, notes, and decisions for a project.",
1309
+ inputSchema: {
1310
+ project: z6.string().optional().describe("Project name or ID"),
1311
+ query: z6.string().describe("Search query")
1312
+ }
1313
+ },
1314
+ async ({ project, query }) => {
1315
+ const resolved = resolveProjectOrDefault(project);
1316
+ if (!resolved) {
1317
+ return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
1318
+ }
1319
+ const db2 = getDb();
1320
+ const pattern = `%${query}%`;
1321
+ const tasks = db2.prepare("SELECT id, title, description, status, priority, 'task' as type FROM tasks WHERE project_id = ? AND (title LIKE ? OR description LIKE ?)").all(resolved.id, pattern, pattern);
1322
+ const notes = db2.prepare("SELECT id, content, category, 'note' as type FROM notes WHERE project_id = ? AND content LIKE ?").all(resolved.id, pattern);
1323
+ const decisions = db2.prepare("SELECT id, title, decision, reasoning, 'decision' as type FROM decisions WHERE project_id = ? AND (title LIKE ? OR decision LIKE ? OR reasoning LIKE ?)").all(resolved.id, pattern, pattern, pattern);
1324
+ return {
1325
+ content: [{
1326
+ type: "text",
1327
+ text: JSON.stringify(
1328
+ {
1329
+ project: resolved.name,
1330
+ query,
1331
+ results: { tasks, notes, decisions },
1332
+ total: tasks.length + notes.length + decisions.length
1333
+ },
1334
+ null,
1335
+ 2
1336
+ )
1337
+ }]
1338
+ };
1313
1339
  }
1314
- });
1315
- server2.listen(port, () => {
1316
- process.stderr.write(`[mindpm] Kanban UI available at http://localhost:${port}
1317
- `);
1318
- });
1319
- return server2;
1340
+ );
1320
1341
  }
1321
1342
 
1322
1343
  // src/index.ts
1323
1344
  var server = new McpServer(
1324
1345
  {
1325
1346
  name: "mindpm",
1326
- version: "1.2.0"
1347
+ version: "1.2.1"
1327
1348
  },
1328
1349
  {
1329
1350
  capabilities: {
@@ -1,2 +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">&#9998;</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">&times;</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">&times;</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")});
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 ji(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function gr(e){return!ji(e,this.v)}let Ni=!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=N;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 h=s.next;if(h!==null){s=h;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 h of l)Sr(h,a,f,o);if($.length>0){T=i,i.apply();for(const h of $)H(s=i,fe,xn).call(s,h,[],[]);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===N&&(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=N;a.b=this,a.f|=kn,r(l)}),this.parent=N.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=N;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=N,r=C,s=pe;je(u(this,Q)),ge(u(this,Q)),xt(u(this,Q).ctx);try{return t()}catch(i){return wr(i),null}finally{je(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=N,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 h(){a(),Promise.all(n.map(_=>Ji(_))).then(_=>o([...t.map(s),..._])).catch(_=>Ve(_,l))}f?f.then(h):h()}function Yi(){var e=N,t=C,n=pe,r=T;return function(i=!0){je(e),ge(t),xt(n),i&&(r==null||r.activate())}}function Pn(e=!0){je(null),ge(null),xt(null),e&&(T==null||T.deactivate())}function Wi(){var e=N.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 N!==null&&(N.f|=Pt),{ctx:pe,deps:null,effects:null,equals:pr,f:t,fn:e,reactions:null,rv:0,v:K,wv:0,parent:n??N,ac:null}}function Ji(e,t,n){N===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(b){f.reject(b),Pn()}var o=T;if(l){var h=Wi();(p=a.get(o))==null||p.reject(et),a.delete(o),a.set(o,f)}const _=(b,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,b);for(const[m,v]of a){if(a.delete(m),m===o)break;v.reject(et)}}h&&h()};f.promise.then(_,b=>_(null,b||"unknown"))}),Kn(()=>{for(const f of a.values())f.reject(et)}),new Promise(f=>{function o(h){function _(){h===s?f(i):o(s)}h.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=N;je(Zi(e));try{e.f&=~vt,Xi(e),t=Gr(e)}finally{je(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 j(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),N!==null&&(N.f&V)!==0&&(N.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=j(0),i=ct,l=a=>{if(ct===i)return a();var f=C,o=ct;ge(null),lr(i);var h=a();return ge(f),lr(o),h};return r&&n.set("length",j(e.length)),new Proxy(e,{defineProperty(a,f,o){(!("value"in o)||o.configurable===!1||o.enumerable===!1||o.writable===!1)&&wi();var h=n.get(f);return h===void 0?l(()=>{var _=j(o.value);return n.set(f,_),_}):g(h,o.value,!0),!0},deleteProperty(a,f){var o=n.get(f);if(o===void 0){if(f in a){const h=l(()=>j(K));n.set(f,h),Lt(s)}}else g(o,K),Lt(s);return!0},get(a,f,o){var b;if(f===Mt)return e;var h=n.get(f),_=f in a;if(h===void 0&&(!_||(b=Rt(a,f))!=null&&b.writable)&&(h=l(()=>{var c=nt(_?a[f]:K),m=j(c);return m}),n.set(f,h)),h!==void 0){var p=d(h);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 h=n.get(f);h&&(o.value=d(h))}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),h=o!==void 0&&o.v!==K||Reflect.has(a,f);if(o!==void 0||N!==null&&(!h||(p=Rt(a,f))!=null&&p.writable)){o===void 0&&(o=l(()=>{var b=h?nt(a[f]):K,c=j(b);return c}),n.set(f,o));var _=d(o);if(_===K)return!1}return h},set(a,f,o,h){var P;var _=n.get(f),p=f in a;if(r&&f==="length")for(var b=o;b<_.v;b+=1){var c=n.get(b+"");c!==void 0?g(c,K):b in a&&(c=l(()=>j(K)),n.set(b+"",c))}if(_===void 0)(!p||(P=Rt(a,f))!=null&&P.writable)&&(_=l(()=>j(void 0)),g(_,nt(o)),n.set(f,_));else{p=_.v!==K;var m=l(()=>nt(o));g(_,m)}var v=Reflect.getOwnPropertyDescriptor(a,f);if(v!=null&&v.set&&v.set.call(h,o),!p){if(r&&typeof f=="string"){var y=n.get("length"),k=Number(f);Number.isInteger(k)&&k>=y.v&&g(y,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,h]of n)h.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,jr,Nr,Rr;function ns(){if(rn===void 0){rn=window,jr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Nr=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 Nr.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=N;ge(null),je(null);try{return e()}finally{ge(t),je(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){N===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=N;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=N.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 N=null;function je(e){N=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 h=e.fn,_=h();e.f|=dt;var p=e.deps,b=T==null?void 0:T.is_fork;if(ee!==null){var c;if(b||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!b&&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 v=0;v<n;v+=1)s.deps[v].rv=rt;if(t!==null)for(const v of t)v.rv=rt;ce!==null&&(r===null?r=ce:r.push(...ce))}return(e.f&Ue)!==0&&(e.f^=Ue),_}catch(v){return wr(v)}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=N,r=en;N=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&&Ni&&(e.f&W)!==0&&e.deps}finally{en=r,N=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=N!==null&&(N.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,jn=new Set;function ms(e,t,n,r={}){function s(i){if(r.capture||Nn.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 jn)n(e)}let ar=null;function Nn(e){var v,y;var t=this,n=t.ownerDocument,r=e.type,s=((v=e.composedPath)==null?void 0:v.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 h=C,_=N;ge(null),je(null);try{for(var p,b=[];i!==null;){var c=i.assignedSlot||i.parentNode||i.host||null;try{var m=(y=i[it])==null?void 0:y[r];m!=null&&(!i.disabled||e.target===i)&&m.call(i,e)}catch(k){p?b.push(k):p=k}if(e.cancelBubble||c===t||c===null)break;i=c}if(p){for(let k of b)queueMicrotask(()=>{throw k});throw p}}finally{e[it]=t,delete e.currentTarget,ge(h),je(_)}}}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=N;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||jr?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 h=n??t.appendChild(Ge());zi(h,{pending:()=>{}},b=>{Xe({});var c=pe;i&&(c.c=i),s&&(r.$$events=s),f=e(b,r)||{},Ze()},a);var _=new Set,p=b=>{for(var c=0;c<b.length;c++){var m=b[c];if(!_.has(m)){_.add(m);var v=gs(m);for(const P of[t,document]){var y=Zt.get(P);y===void 0&&(y=new Map,Zt.set(P,y));var k=y.get(m);k===void 0?(P.addEventListener(m,Nn,{passive:v}),y.set(m,1)):y.set(m,k+1)}}}};return p(on($r)),jn.add(p),()=>{var v;for(var b of _)for(const y of[t,document]){var c=Zt.get(y),m=c.get(b);--m==0?(y.removeEventListener(b,Nn),c.delete(b),c.size===0&&Zt.delete(y)):c.set(b,m)}jn.delete(p),h!==n&&((v=h.parentNode)==null||v.removeChild(h))}});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,h=o.parentNode;rs(h),h.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,h=Gi(()=>{var v=n();return Fn(v)?v:v==null?[]:on(v)}),_,p=!0;function b(){m.fallback=o,xs(m,_,l,t,r),o!==null&&(_.length===0?(o.f&He)===0?Jn(o):(o.f^=He,Nt(o,null,l)):ut(o,()=>{o=null}))}var c=Yn(()=>{_=d(h);for(var v=_.length,y=new Set,k=T,P=Mr(),E=0;E<v;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)),y.add(Z)}if(v===0&&i&&!o&&(p?o=ve(()=>i(l)):(o=ve(()=>i(fr??(fr=Ge()))),o.f|=He)),v>y.size&&_i(),!p)if(P){for(const[oe,G]of a)y.has(oe)||k.skip_effect(G.e);k.oncommit(b),k.ondiscard(()=>{})}else b();d(h)}),m={effect:c,items:a,outrogroups:null,fallback:o};p=!1}function jt(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=jt(e.effect.first),f,o=null,h=[],_=[],p,b,c,m;for(m=0;m<i;m+=1){if(p=t[m],b=s(p,m),c=l.get(b).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)Nt(c,null,n);else{var v=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,v),Nt(c,v,n),o=c,h=[],_=[],a=jt(o.next);continue}if((c.f&ae)!==0&&Jn(c),c!==a){if(f!==void 0&&f.has(c)){if(h.length<_.length){var y=_[0],k;o=y.prev;var P=h[0],E=h[h.length-1];for(k=0;k<h.length;k+=1)Nt(h[k],y,n);for(k=0;k<_.length;k+=1)f.delete(_[k]);ze(e,P.prev,E.next),ze(e,o,P),ze(e,E,y),a=y,o=E,m-=1,h=[],_=[]}else f.delete(c),Nt(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(h=[],_=[];a!==null&&a!==c;)(f??(f=new Set)).add(a),_.push(a),a=jt(a.next);if(a===null)continue}(c.f&He)===0&&h.push(c),o=c,a=jt(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=jt(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 Nt(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"/>'),js=L('<button class="rename-btn svelte-1kanzy0" title="Rename project">&#9998;</button>'),Ns=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=j(!1),r=j("");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=Ns(),o=A(x(f),2),h=x(o);Wt(h,21,()=>t.projects,Gn,(c,m)=>{var v=Ps(),y=x(v),k={};Ee(()=>{X(y,d(m).name),k!==(k=d(m).id)&&(v.value=(v.__value=d(m).id)??"")}),I(c,v)});var _;ti(h);var p=A(h,2);{var b=c=>{var m=ei(),v=ln(m);{var y=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=js();ne("click",E,i),I(P,E)};Te(v,P=>{d(n)?P(y):P(k,!1)})}I(c,m)};Te(p,c=>{d(s)&&c(b)})}Ee(()=>{_!==(_=t.selectedId??"")&&(h.value=(h.__value=t.selectedId??"")??"",Xn(h,t.selectedId??""))}),ne("change",h,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">&times;</button></div> <div class="card-title svelte-35ep21"> </div> <!> <!></div>');function Bs(e,t){Xe(t,!0);let n=j(!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 h=x(f),_=x(h),p=x(_),b=A(_,2),c=A(h,2),m=x(c),v=A(c,2);{var y=E=>{var R=Ls(),Z=x(R);Ee(()=>X(Z,t.task.description)),I(E,R)};Te(v,E=>{t.task.description&&E(y)})}var k=A(v,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",b,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=j(!1);function r(v){v.preventDefault(),v.dataTransfer&&(v.dataTransfer.dropEffect="move"),g(n,!0)}function s(){g(n,!1)}function i(v){v.preventDefault(),g(n,!1),t.onDrop(t.status)}var l=Vs();let a;var f=x(l),o=x(f),h=x(o),_=A(h),p=x(_),b=A(o,2);{var c=v=>{var y=Hs();ne("click",y,()=>t.onAddTask(t.status)),I(v,y)};Te(b,v=>{t.status==="todo"&&v(c)})}var m=A(f,2);Wt(m,21,()=>t.tasks,v=>v.id,(v,y)=>{Bs(v,{get task(){return d(y)},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(h,`${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">&times;</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=j(""),s=j(""),i=j("medium"),l=j("todo"),a=j("");Un(()=>{var O,B,ue,Ce,Ne;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),(Ne=t.task)!=null&&Ne.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 h(O){O.target.classList.contains("modal-backdrop")&&t.onClose()}function _(O){O.key==="Escape"&&t.onClose()}var p=Ws();Le("keydown",rn,_);var b=x(p),c=x(b),m=x(c),v=x(m),y=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),Ne={};Ee(()=>{X(Ce,d(B)),Ne!==(Ne=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 Ne=A(Ce);Ne.value=Ne.__value="in_progress";var _n=A(Ne);_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),w=A(Gt,2),M=x(w),re=A(M,2),J=x(re);Ee(()=>{X(v,d(f)?"Edit Task":"New Task"),X(J,d(f)?"Save":"Create")}),ne("click",p,h),ne("click",y,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),h=x(o),_=A(o,2),p=x(_),b=A(p,2),c=x(b);Ee(()=>{X(f,t.title),X(h,t.message),X(c,n())}),ne("click",i,r),ne("click",p,function(...m){var v;(v=t.onCancel)==null||v.apply(this,m)}),ne("click",b,function(...m){var v;(v=t.onConfirm)==null||v.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=j(nt([])),r=j(!0),s=j(null),i=j(!1),l=j(null),a=j("todo"),f=j(!1),o=j(null),h=j(null);const _=Ct(()=>Ms.map(w=>({...w,tasks:d(n).filter(M=>M.status===w.status)})));async function p(){g(r,!0),g(s,null);try{g(n,await $e.getTasks(t.project.id),!0)}catch(w){g(s,w.message,!0)}finally{g(r,!1)}}Un(()=>{t.project.id,p()});function b(w,M){g(h,M,!0),w.dataTransfer&&(w.dataTransfer.effectAllowed="move",w.dataTransfer.setData("text/plain",M.id))}async function c(w){if(!d(h)||d(h).status===w){g(h,null);return}const M=d(h),re=M.status;g(h,null);const J=d(n).findIndex(O=>O.id===M.id);J!==-1&&(d(n)[J]={...d(n)[J],status:w});try{await $e.updateTask(M.id,{status:w})}catch(O){J!==-1&&(d(n)[J]={...d(n)[J],status:re}),g(s,O.message,!0)}}function m(w){g(l,null),g(a,w,!0),g(i,!0)}function v(w){g(l,w,!0),g(i,!0)}async function y(w){try{if(d(l)){const M=await $e.updateTask(d(l).id,{title:w.title,description:w.description||null,priority:w.priority,status:w.status,tags:w.tags.length>0?w.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:w.title,description:w.description||void 0,priority:w.priority,tags:w.tags.length>0?w.tags:void 0});g(n,[M,...d(n)],!0)}g(i,!1),g(l,null)}catch(M){g(s,M.message,!0)}}function k(w){g(o,w,!0),g(f,!0)}async function P(){if(d(o))try{await $e.deleteTask(d(o).id),g(n,d(n).filter(w=>w.id!==d(o).id&&w.parent_task_id!==d(o).id),!0),g(f,!1),g(o,null)}catch(w){g(s,w.message,!0)}}var E=el(),R=ln(E),Z=x(R);{var z=w=>{var M=Zs();I(w,M)},oe=w=>{var M=Qs(),re=x(M),J=A(re);Ee(()=>X(re,`${d(s)??""} `)),ne("click",J,()=>{g(s,null),p()}),I(w,M)},G=w=>{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:v,onDelete:k,onDragStart:b,onDrop:c,onAddTask:m})}),I(w,M)};Te(Z,w=>{d(r)?w(z):d(s)?w(oe,1):w(G,!1)})}var Jt=A(R,2);{var vn=w=>{Js(w,{get task(){return d(l)},get defaultStatus(){return d(a)},onSave:y,onClose:()=>{g(i,!1),g(l,null)}})};Te(Jt,w=>{d(i)&&w(vn)})}var Gt=A(Jt,2);{var hn=w=>{Xs(w,{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,w=>{d(f)&&d(o)&&w(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=j(nt([])),r=j(null),s=j(!0),i=j(null);const l=Ct(()=>d(n).find(v=>v.id===d(r))??null);async function a(){try{if(g(n,await $e.getProjects(),!0),d(n).length>0&&!d(r)){const v=new URLSearchParams(window.location.search).get("project"),y=v?d(n).find(k=>k.id===v||k.name===v):null;g(r,y?y.id:d(n)[0].id,!0)}}catch(v){g(i,v.message,!0)}finally{g(s,!1)}}function f(v){g(r,v,!0)}async function o(v,y){try{await $e.updateProject(v,{name:y});const k=d(n).findIndex(P=>P.id===v);k!==-1&&(d(n)[k]={...d(n)[k],name:y})}catch(k){g(i,k.message,!0)}}Un(()=>{a()});var h=ei(),_=ln(h);{var p=v=>{var y=nl();I(v,y)},b=v=>{var y=rl(),k=x(y);Ee(()=>X(k,d(i))),I(v,y)},c=v=>{var y=il();I(v,y)},m=v=>{var y=sl(),k=ln(y);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(v,y)};Te(_,v=>{d(s)?v(p):d(i)?v(b,1):d(n).length===0?v(c,2):v(m,!1)})}I(e,h),Ze()}bs(ll,{target:document.getElementById("app")});
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>mindpm - Kanban</title>
7
- <script type="module" crossorigin src="/assets/index-CLK3PAFj.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-BOJUueBw.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-D3uZo-NO.css">
9
9
  </head>
10
10
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mindpm",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Persistent project memory for LLMs via MCP. Never re-explain your project again.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",