vertex-notes 0.1.4 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/{chunk-4QLCD6TZ.js → chunk-EEEL6ZKK.js} +378 -43
  2. package/dist/chunk-EEEL6ZKK.js.map +1 -0
  3. package/dist/{chunk-DDFOKGIX.js → chunk-URRSVCB7.js} +2 -2
  4. package/dist/commands/capture.js +2 -2
  5. package/dist/commands/daily.js +2 -2
  6. package/dist/commands/delete.js +2 -2
  7. package/dist/commands/edit.js +3 -5
  8. package/dist/commands/edit.js.map +1 -1
  9. package/dist/commands/export.js +2 -2
  10. package/dist/commands/hello.js +1 -1
  11. package/dist/commands/help.js +23 -14
  12. package/dist/commands/help.js.map +1 -1
  13. package/dist/commands/howto.js +379 -0
  14. package/dist/commands/howto.js.map +1 -0
  15. package/dist/commands/import.js +39 -0
  16. package/dist/commands/import.js.map +1 -0
  17. package/dist/commands/interactive.js +187 -74
  18. package/dist/commands/interactive.js.map +1 -1
  19. package/dist/commands/login.js +1 -1
  20. package/dist/commands/new.js +2 -2
  21. package/dist/commands/notes.js +2 -2
  22. package/dist/commands/restore.js +2 -2
  23. package/dist/commands/search.js +2 -2
  24. package/dist/commands/status.js +2 -2
  25. package/dist/commands/syntax.js +276 -0
  26. package/dist/commands/syntax.js.map +1 -0
  27. package/dist/commands/tags.js +2 -2
  28. package/dist/commands/today.js +2 -2
  29. package/dist/commands/trash/empty.js +2 -2
  30. package/dist/commands/trash/index.js +2 -2
  31. package/dist/commands/view.js +2 -2
  32. package/dist/lib/client.js +2 -2
  33. package/dist/lib/md-to-tiptap.js +245 -3
  34. package/dist/lib/md-to-tiptap.js.map +1 -1
  35. package/package.json +2 -1
  36. package/dist/chunk-4QLCD6TZ.js.map +0 -1
  37. package/dist/chunk-FWK2J3FR.js +0 -163
  38. package/dist/chunk-FWK2J3FR.js.map +0 -1
  39. /package/dist/{chunk-DDFOKGIX.js.map → chunk-URRSVCB7.js.map} +0 -0
@@ -1,16 +1,32 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-URRSVCB7.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
+ exportNoteAsMarkdown,
7
8
  getBlocksForNote,
8
9
  listNotes,
10
+ markdownToTiptap,
9
11
  saveNoteContent
10
- } from "../chunk-4QLCD6TZ.js";
12
+ } from "../chunk-EEEL6ZKK.js";
11
13
 
12
14
  // src/commands/interactive.ts
13
15
  import { Command, Args } from "@oclif/core";
16
+ var DIM = "\x1B[90m";
17
+ var BOLD = "\x1B[1m";
18
+ var GREEN = "\x1B[32m";
19
+ var CYAN = "\x1B[36m";
20
+ var YELLOW = "\x1B[33m";
21
+ var PURPLE = "\x1B[35m";
22
+ var R = "\x1B[0m";
23
+ var STRIKE = "\x1B[9m";
24
+ function extractText(node) {
25
+ if (typeof node.text === "string") return node.text;
26
+ const content = node.content;
27
+ if (!content) return "";
28
+ return content.map(extractText).join("");
29
+ }
14
30
  function blocksToItems(blocks) {
15
31
  const items = [];
16
32
  for (const b of blocks) {
@@ -21,91 +37,125 @@ function blocksToItems(blocks) {
21
37
  continue;
22
38
  }
23
39
  const type = tiptap.type;
24
- if (type === "taskList") {
25
- const children = tiptap.content ?? [];
26
- for (const child of children) {
27
- const attrs = child.attrs ?? {};
28
- const checked = attrs.checked === true;
29
- const text = extractText(child);
30
- items.push({ kind: "todo", text, checked });
40
+ const attrs = tiptap.attrs ?? {};
41
+ switch (type) {
42
+ case "heading":
43
+ items.push({ kind: "heading", text: extractText(tiptap), checked: false, level: attrs.level ?? 1 });
44
+ break;
45
+ case "taskList":
46
+ for (const child of tiptap.content ?? []) {
47
+ const ca = child.attrs ?? {};
48
+ items.push({ kind: "todo", text: extractText(child), checked: ca.checked === true });
49
+ }
50
+ break;
51
+ case "bulletList":
52
+ for (const child of tiptap.content ?? []) {
53
+ items.push({ kind: "bullet", text: extractText(child), checked: false });
54
+ }
55
+ break;
56
+ case "orderedList":
57
+ (tiptap.content ?? []).forEach((child, idx) => {
58
+ items.push({ kind: "text", text: `${idx + 1}. ${extractText(child)}`, checked: false });
59
+ });
60
+ break;
61
+ case "codeBlock":
62
+ items.push({ kind: "code", text: extractText(tiptap), checked: false, language: attrs.language ?? "" });
63
+ break;
64
+ case "mermaidBlock":
65
+ items.push({ kind: "mermaid", text: extractText(tiptap), checked: false });
66
+ break;
67
+ case "mathBlock":
68
+ items.push({ kind: "math", text: extractText(tiptap), checked: false });
69
+ break;
70
+ case "calloutBlock":
71
+ items.push({ kind: "callout", text: extractText(tiptap), checked: false, variant: attrs.variant ?? "info" });
72
+ break;
73
+ case "blockquote":
74
+ items.push({ kind: "quote", text: extractText(tiptap), checked: false });
75
+ break;
76
+ case "horizontalRule":
77
+ items.push({ kind: "divider", text: "", checked: false });
78
+ break;
79
+ case "image":
80
+ items.push({ kind: "image", text: attrs.alt || attrs.src || "image", checked: false });
81
+ break;
82
+ case "fileBlock":
83
+ items.push({ kind: "file", text: attrs.filename || "file", checked: false });
84
+ break;
85
+ default: {
86
+ const text = extractText(tiptap);
87
+ if (text.trim()) items.push({ kind: "text", text, checked: false });
31
88
  }
32
- } else if (type === "paragraph" || type === "heading") {
33
- const text = extractText(tiptap);
34
- if (text.trim()) items.push({ kind: "text", text, checked: false });
35
89
  }
36
90
  }
37
91
  return items;
38
92
  }
39
- function extractText(node) {
40
- if (typeof node.text === "string") return node.text;
41
- const content = node.content;
42
- if (!content) return "";
43
- return content.map(extractText).join("");
44
- }
45
- function itemsToTiptap(items) {
46
- const content = [];
47
- let i = 0;
48
- while (i < items.length) {
49
- const item = items[i];
50
- if (item.kind === "todo") {
51
- const taskItems = [];
52
- while (i < items.length && items[i].kind === "todo") {
53
- taskItems.push({
54
- type: "taskItem",
55
- attrs: { checked: items[i].checked },
56
- content: [{ type: "paragraph", content: [{ type: "text", text: items[i].text }] }]
57
- });
58
- i++;
59
- }
60
- content.push({ type: "taskList", content: taskItems });
61
- } else {
62
- content.push({
63
- type: "paragraph",
64
- content: [{ type: "text", text: item.text }]
65
- });
66
- i++;
93
+ function renderItem(item, selected) {
94
+ const ptr = selected ? `${CYAN} \u25B8 ${R}` : " ";
95
+ switch (item.kind) {
96
+ case "heading": {
97
+ const hashes = "#".repeat(item.level ?? 1);
98
+ return `${ptr}${BOLD}${hashes} ${item.text}${R}`;
67
99
  }
100
+ case "todo": {
101
+ const box = item.checked ? `${GREEN}[\u2713]${R}` : `${DIM}[ ]${R}`;
102
+ const text = item.checked ? `${DIM}${STRIKE}${item.text}${R}` : item.text;
103
+ return `${ptr}${box} ${text}`;
104
+ }
105
+ case "bullet":
106
+ return `${ptr}${DIM}\u2022${R} ${item.text}`;
107
+ case "code":
108
+ return `${ptr}${DIM}\u250C code${item.language ? ` (${item.language})` : ""}${R}
109
+ ${item.text.split("\n").map((l) => ` ${DIM}\u2502${R} ${l}`).join("\n")}
110
+ ${DIM}\u2514\u2500\u2500${R}`;
111
+ case "mermaid":
112
+ return `${ptr}${PURPLE}\u250C mermaid${R}
113
+ ${item.text.split("\n").map((l) => ` ${PURPLE}\u2502${R} ${DIM}${l}${R}`).join("\n")}
114
+ ${PURPLE}\u2514\u2500\u2500${R}`;
115
+ case "math":
116
+ return `${ptr}${YELLOW}\u250C math${R}
117
+ ${item.text.split("\n").map((l) => ` ${YELLOW}\u2502${R} ${l}`).join("\n")}
118
+ ${YELLOW}\u2514\u2500\u2500${R}`;
119
+ case "callout":
120
+ return `${ptr}${CYAN}[${(item.variant ?? "info").toUpperCase()}]${R} ${item.text}`;
121
+ case "quote":
122
+ return `${ptr}${DIM}\u258E${R} ${DIM}${item.text}${R}`;
123
+ case "divider":
124
+ return ` ${DIM}\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}`;
125
+ case "image":
126
+ return `${ptr}${DIM}[image: ${item.text}]${R}`;
127
+ case "file":
128
+ return `${ptr}${DIM}[file: ${item.text}]${R}`;
129
+ default:
130
+ return `${ptr}${item.text}`;
68
131
  }
69
- if (content.length === 0) {
70
- content.push({ type: "paragraph" });
71
- }
72
- return { type: "doc", content };
73
132
  }
74
133
  function render(items, cursor, mode, inputBuffer, noteTitle) {
75
134
  process.stdout.write("\x1Bc");
76
- process.stdout.write(`\x1B[1m ${noteTitle}\x1B[0m
135
+ process.stdout.write(`${BOLD} ${noteTitle}${R}
77
136
  `);
78
- process.stdout.write(`\x1B[90m \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\x1B[0m
137
+ process.stdout.write(`${DIM} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}
79
138
 
80
139
  `);
81
140
  for (let i = 0; i < items.length; i++) {
82
- const item = items[i];
83
- const selected = i === cursor;
84
- const prefix = selected ? "\x1B[36m \u25B8 \x1B[0m" : " ";
85
- if (item.kind === "todo") {
86
- const box = item.checked ? "\x1B[32m[\u2713]\x1B[0m" : "\x1B[90m[ ]\x1B[0m";
87
- const text = item.checked ? `\x1B[90m\x1B[9m${item.text}\x1B[0m` : item.text;
88
- process.stdout.write(`${prefix}${box} ${text}
89
- `);
90
- } else {
91
- process.stdout.write(`${prefix}${item.text}
92
- `);
93
- }
141
+ process.stdout.write(renderItem(items[i], i === cursor) + "\n");
94
142
  }
95
143
  if (items.length === 0) {
96
- process.stdout.write(" \x1B[90m(empty)\x1B[0m\n");
144
+ process.stdout.write(` ${DIM}(empty)${R}
145
+ `);
97
146
  }
98
147
  process.stdout.write(`
99
- \x1B[90m \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\x1B[0m
148
+ ${DIM} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${R}
100
149
  `);
101
150
  if (mode === "input-todo") {
102
- process.stdout.write(` \x1B[33mNew todo:\x1B[0m ${inputBuffer}\x1B[7m \x1B[0m
151
+ process.stdout.write(` ${YELLOW}New todo:${R} ${inputBuffer}\x1B[7m \x1B[0m
103
152
  `);
104
153
  } else if (mode === "input-text") {
105
- process.stdout.write(` \x1B[33mNew text:\x1B[0m ${inputBuffer}\x1B[7m \x1B[0m
154
+ process.stdout.write(` ${YELLOW}New text:${R} ${inputBuffer}\x1B[7m \x1B[0m
106
155
  `);
107
156
  } else {
108
- process.stdout.write(" \x1B[90m\u2191\u2193 move Enter toggle t new todo n new text d delete s save q quit\x1B[0m\n");
157
+ process.stdout.write(` ${DIM}\u2191\u2193 move Enter toggle t todo n text d delete e edit in $EDITOR s save q quit${R}
158
+ `);
109
159
  }
110
160
  }
111
161
  var Interactive = class _Interactive extends Command {
@@ -124,7 +174,7 @@ var Interactive = class _Interactive extends Command {
124
174
  this.error(`No note matching "${args.title}"`);
125
175
  }
126
176
  const blocks = await getBlocksForNote(client, match.id);
127
- const items = blocksToItems(blocks);
177
+ let items = blocksToItems(blocks);
128
178
  let cursor = 0;
129
179
  let dirty = false;
130
180
  let mode = "normal";
@@ -138,10 +188,73 @@ var Interactive = class _Interactive extends Command {
138
188
  process.stdout.write("\x1Bc");
139
189
  };
140
190
  const save = async () => {
141
- const tiptap = itemsToTiptap(items);
191
+ const md = items.map((item) => {
192
+ switch (item.kind) {
193
+ case "heading":
194
+ return `${"#".repeat(item.level ?? 1)} ${item.text}`;
195
+ case "todo":
196
+ return `- [${item.checked ? "x" : " "}] ${item.text}`;
197
+ case "bullet":
198
+ return `- ${item.text}`;
199
+ case "code":
200
+ return `\`\`\`${item.language ?? ""}
201
+ ${item.text}
202
+ \`\`\``;
203
+ case "mermaid":
204
+ return `\`\`\`mermaid
205
+ ${item.text}
206
+ \`\`\``;
207
+ case "math":
208
+ return `$$
209
+ ${item.text}
210
+ $$`;
211
+ case "callout":
212
+ return `> [!${item.variant ?? "info"}]
213
+ > ${item.text}`;
214
+ case "quote":
215
+ return `> ${item.text}`;
216
+ case "divider":
217
+ return "---";
218
+ case "image":
219
+ return `![](${item.text})`;
220
+ case "file":
221
+ return `> [!file]
222
+ > ${item.text}`;
223
+ default:
224
+ return item.text;
225
+ }
226
+ }).join("\n\n");
227
+ const tiptap = markdownToTiptap(md);
142
228
  await saveNoteContent(client, match.id, userId, tiptap);
143
229
  dirty = false;
144
230
  };
231
+ const openEditor = async () => {
232
+ cleanup();
233
+ const { tmpdir } = await import("os");
234
+ const { join } = await import("path");
235
+ const { writeFileSync, readFileSync } = await import("fs");
236
+ const { execSync } = await import("child_process");
237
+ const md = await exportNoteAsMarkdown(client, match.id);
238
+ const tmpFile = join(tmpdir(), `vertex-${match.id}.md`);
239
+ writeFileSync(tmpFile, md, "utf-8");
240
+ const editor = process.env.EDITOR || process.env.VISUAL || "vim";
241
+ try {
242
+ execSync(`${editor} "${tmpFile}"`, { stdio: "inherit" });
243
+ } catch {
244
+ }
245
+ const edited = readFileSync(tmpFile, "utf-8");
246
+ if (edited !== md) {
247
+ const tiptap = markdownToTiptap(edited);
248
+ await saveNoteContent(client, match.id, userId, tiptap);
249
+ }
250
+ const newBlocks = await getBlocksForNote(client, match.id);
251
+ items = blocksToItems(newBlocks);
252
+ cursor = Math.min(cursor, Math.max(0, items.length - 1));
253
+ dirty = false;
254
+ process.stdin.setRawMode(true);
255
+ process.stdin.resume();
256
+ render(items, cursor, mode, inputBuffer, match.title);
257
+ };
145
258
  process.stdin.on("data", async (key) => {
146
259
  if (mode === "input-todo" || mode === "input-text") {
147
260
  if (key === "\r" || key === "\n") {
@@ -185,20 +298,20 @@ var Interactive = class _Interactive extends Command {
185
298
  cursor = Math.min(cursor, items.length - 1);
186
299
  dirty = true;
187
300
  }
301
+ } else if (key === "e") {
302
+ if (dirty) await save();
303
+ await openEditor();
304
+ return;
188
305
  } else if (key === "s") {
189
306
  await save();
190
307
  render(items, cursor, mode, inputBuffer, match.title);
191
- process.stdout.write(" \x1B[32mSaved!\x1B[0m\n");
308
+ process.stdout.write(` ${GREEN}Saved!${R}
309
+ `);
192
310
  return;
193
311
  } else if (key === "q" || key === "") {
194
- if (dirty) {
195
- await save();
196
- cleanup();
197
- this.log(`Saved: ${match.title}`);
198
- } else {
199
- cleanup();
200
- this.log("No changes.");
201
- }
312
+ if (dirty) await save();
313
+ cleanup();
314
+ this.log(dirty ? `Saved: ${match.title}` : "No changes.");
202
315
  process.exit(0);
203
316
  }
204
317
  render(items, cursor, mode, inputBuffer, match.title);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/interactive.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { listNotes, getBlocksForNote, saveNoteContent, type Block } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\ninterface TuiItem {\n kind: \"text\" | \"todo\";\n text: string;\n checked: boolean;\n}\n\nfunction blocksToItems(blocks: Block[]): TuiItem[] {\n const items: TuiItem[] = [];\n for (const b of blocks) {\n const meta = b.metadata as Record<string, unknown>;\n const tiptap = meta.tiptap as Record<string, unknown> | undefined;\n if (!tiptap) {\n if (b.content.trim()) items.push({ kind: \"text\", text: b.content, checked: false });\n continue;\n }\n\n const type = tiptap.type as string;\n if (type === \"taskList\") {\n const children = (tiptap.content ?? []) as Array<Record<string, unknown>>;\n for (const child of children) {\n const attrs = (child.attrs ?? {}) as Record<string, unknown>;\n const checked = attrs.checked === true;\n const text = extractText(child);\n items.push({ kind: \"todo\", text, checked });\n }\n } else if (type === \"paragraph\" || type === \"heading\") {\n const text = extractText(tiptap);\n if (text.trim()) items.push({ kind: \"text\", text, checked: false });\n }\n }\n return items;\n}\n\nfunction extractText(node: Record<string, unknown>): string {\n if (typeof node.text === \"string\") return node.text;\n const content = node.content as Array<Record<string, unknown>> | undefined;\n if (!content) return \"\";\n return content.map(extractText).join(\"\");\n}\n\nfunction itemsToTiptap(items: TuiItem[]): Record<string, unknown> {\n const content: Array<Record<string, unknown>> = [];\n\n let i = 0;\n while (i < items.length) {\n const item = items[i];\n if (item.kind === \"todo\") {\n const taskItems: Array<Record<string, unknown>> = [];\n while (i < items.length && items[i].kind === \"todo\") {\n taskItems.push({\n type: \"taskItem\",\n attrs: { checked: items[i].checked },\n content: [{ type: \"paragraph\", content: [{ type: \"text\", text: items[i].text }] }],\n });\n i++;\n }\n content.push({ type: \"taskList\", content: taskItems });\n } else {\n content.push({\n type: \"paragraph\",\n content: [{ type: \"text\", text: item.text }],\n });\n i++;\n }\n }\n\n if (content.length === 0) {\n content.push({ type: \"paragraph\" });\n }\n\n return { type: \"doc\", content };\n}\n\nfunction render(items: TuiItem[], cursor: number, mode: string, inputBuffer: string, noteTitle: string): void {\n process.stdout.write(\"\\x1bc\");\n\n process.stdout.write(`\\x1b[1m ${noteTitle}\\x1b[0m\\n`);\n process.stdout.write(`\\x1b[90m ─────────────────────────────────────\\x1b[0m\\n\\n`);\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const selected = i === cursor;\n const prefix = selected ? \"\\x1b[36m ▸ \\x1b[0m\" : \" \";\n\n if (item.kind === \"todo\") {\n const box = item.checked ? \"\\x1b[32m[✓]\\x1b[0m\" : \"\\x1b[90m[ ]\\x1b[0m\";\n const text = item.checked ? `\\x1b[90m\\x1b[9m${item.text}\\x1b[0m` : item.text;\n process.stdout.write(`${prefix}${box} ${text}\\n`);\n } else {\n process.stdout.write(`${prefix}${item.text}\\n`);\n }\n }\n\n if (items.length === 0) {\n process.stdout.write(\" \\x1b[90m(empty)\\x1b[0m\\n\");\n }\n\n process.stdout.write(`\\n\\x1b[90m ─────────────────────────────────────\\x1b[0m\\n`);\n\n if (mode === \"input-todo\") {\n process.stdout.write(` \\x1b[33mNew todo:\\x1b[0m ${inputBuffer}\\x1b[7m \\x1b[0m\\n`);\n } else if (mode === \"input-text\") {\n process.stdout.write(` \\x1b[33mNew text:\\x1b[0m ${inputBuffer}\\x1b[7m \\x1b[0m\\n`);\n } else {\n process.stdout.write(\" \\x1b[90m↑↓ move Enter toggle t new todo n new text d delete s save q quit\\x1b[0m\\n\");\n }\n}\n\nexport default class Interactive extends Command {\n static override description = \"Interactive note editor with todo toggling\";\n\n static override args = {\n title: Args.string({ description: \"Note title (partial match)\", required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(Interactive);\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId });\n const query = args.title.toLowerCase();\n const match = notes.find((n) => !n.deleted_at && n.title.toLowerCase().includes(query));\n\n if (!match) {\n this.error(`No note matching \"${args.title}\"`);\n }\n\n const blocks = await getBlocksForNote(client, match.id);\n const items = blocksToItems(blocks);\n let cursor = 0;\n let dirty = false;\n let mode = \"normal\";\n let inputBuffer = \"\";\n\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.setEncoding(\"utf8\");\n\n render(items, cursor, mode, inputBuffer, match.title);\n\n const cleanup = () => {\n process.stdin.setRawMode(false);\n process.stdout.write(\"\\x1bc\");\n };\n\n const save = async () => {\n const tiptap = itemsToTiptap(items);\n await saveNoteContent(client, match.id, userId, tiptap);\n dirty = false;\n };\n\n process.stdin.on(\"data\", async (key: string) => {\n if (mode === \"input-todo\" || mode === \"input-text\") {\n if (key === \"\\r\" || key === \"\\n\") {\n if (inputBuffer.trim()) {\n const newItem: TuiItem = mode === \"input-todo\"\n ? { kind: \"todo\", text: inputBuffer.trim(), checked: false }\n : { kind: \"text\", text: inputBuffer.trim(), checked: false };\n items.splice(cursor + 1, 0, newItem);\n cursor = Math.min(cursor + 1, items.length - 1);\n dirty = true;\n }\n mode = \"normal\";\n inputBuffer = \"\";\n } else if (key === \"\\x1b\") {\n mode = \"normal\";\n inputBuffer = \"\";\n } else if (key === \"\\x7f\") {\n inputBuffer = inputBuffer.slice(0, -1);\n } else if (key >= \" \") {\n inputBuffer += key;\n }\n render(items, cursor, mode, inputBuffer, match.title);\n return;\n }\n\n if (key === \"\\x1b[A\") {\n cursor = Math.max(0, cursor - 1);\n } else if (key === \"\\x1b[B\") {\n cursor = Math.min(items.length - 1, cursor + 1);\n } else if (key === \"\\r\" || key === \"\\n\") {\n if (items[cursor]?.kind === \"todo\") {\n items[cursor].checked = !items[cursor].checked;\n dirty = true;\n }\n } else if (key === \"t\") {\n mode = \"input-todo\";\n inputBuffer = \"\";\n } else if (key === \"n\") {\n mode = \"input-text\";\n inputBuffer = \"\";\n } else if (key === \"d\") {\n if (items.length > 0) {\n items.splice(cursor, 1);\n cursor = Math.min(cursor, items.length - 1);\n dirty = true;\n }\n } else if (key === \"s\") {\n await save();\n render(items, cursor, mode, inputBuffer, match.title);\n process.stdout.write(\" \\x1b[32mSaved!\\x1b[0m\\n\");\n return;\n } else if (key === \"q\" || key === \"\\x03\") {\n if (dirty) {\n await save();\n cleanup();\n this.log(`Saved: ${match.title}`);\n } else {\n cleanup();\n this.log(\"No changes.\");\n }\n process.exit(0);\n }\n\n render(items, cursor, mode, inputBuffer, match.title);\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAU9B,SAAS,cAAc,QAA4B;AACjD,QAAM,QAAmB,CAAC;AAC1B,aAAW,KAAK,QAAQ;AACtB,UAAM,OAAO,EAAE;AACf,UAAM,SAAS,KAAK;AACpB,QAAI,CAAC,QAAQ;AACX,UAAI,EAAE,QAAQ,KAAK,EAAG,OAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,EAAE,SAAS,SAAS,MAAM,CAAC;AAClF;AAAA,IACF;AAEA,UAAM,OAAO,OAAO;AACpB,QAAI,SAAS,YAAY;AACvB,YAAM,WAAY,OAAO,WAAW,CAAC;AACrC,iBAAW,SAAS,UAAU;AAC5B,cAAM,QAAS,MAAM,SAAS,CAAC;AAC/B,cAAM,UAAU,MAAM,YAAY;AAClC,cAAM,OAAO,YAAY,KAAK;AAC9B,cAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,MAC5C;AAAA,IACF,WAAW,SAAS,eAAe,SAAS,WAAW;AACrD,YAAM,OAAO,YAAY,MAAM;AAC/B,UAAI,KAAK,KAAK,EAAG,OAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,SAAS,MAAM,CAAC;AAAA,IACpE;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,MAAuC;AAC1D,MAAI,OAAO,KAAK,SAAS,SAAU,QAAO,KAAK;AAC/C,QAAM,UAAU,KAAK;AACrB,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO,QAAQ,IAAI,WAAW,EAAE,KAAK,EAAE;AACzC;AAEA,SAAS,cAAc,OAA2C;AAChE,QAAM,UAA0C,CAAC;AAEjD,MAAI,IAAI;AACR,SAAO,IAAI,MAAM,QAAQ;AACvB,UAAM,OAAO,MAAM,CAAC;AACpB,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAM,YAA4C,CAAC;AACnD,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,QAAQ;AACnD,kBAAU,KAAK;AAAA,UACb,MAAM;AAAA,UACN,OAAO,EAAE,SAAS,MAAM,CAAC,EAAE,QAAQ;AAAA,UACnC,SAAS,CAAC,EAAE,MAAM,aAAa,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;AAAA,QACnF,CAAC;AACD;AAAA,MACF;AACA,cAAQ,KAAK,EAAE,MAAM,YAAY,SAAS,UAAU,CAAC;AAAA,IACvD,OAAO;AACL,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,KAAK,KAAK,CAAC;AAAA,MAC7C,CAAC;AACD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,KAAK,EAAE,MAAM,YAAY,CAAC;AAAA,EACpC;AAEA,SAAO,EAAE,MAAM,OAAO,QAAQ;AAChC;AAEA,SAAS,OAAO,OAAkB,QAAgB,MAAc,aAAqB,WAAyB;AAC5G,UAAQ,OAAO,MAAM,OAAO;AAE5B,UAAQ,OAAO,MAAM,YAAY,SAAS;AAAA,CAAW;AACrD,UAAQ,OAAO,MAAM;AAAA;AAAA,CAA4D;AAEjF,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,OAAO,MAAM,CAAC;AACpB,UAAM,WAAW,MAAM;AACvB,UAAM,SAAS,WAAW,6BAAwB;AAElD,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAM,MAAM,KAAK,UAAU,4BAAuB;AAClD,YAAM,OAAO,KAAK,UAAU,kBAAkB,KAAK,IAAI,YAAY,KAAK;AACxE,cAAQ,OAAO,MAAM,GAAG,MAAM,GAAG,GAAG,IAAI,IAAI;AAAA,CAAI;AAAA,IAClD,OAAO;AACL,cAAQ,OAAO,MAAM,GAAG,MAAM,GAAG,KAAK,IAAI;AAAA,CAAI;AAAA,IAChD;AAAA,EACF;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,YAAQ,OAAO,MAAM,8BAA8B;AAAA,EACrD;AAEA,UAAQ,OAAO,MAAM;AAAA;AAAA,CAA4D;AAEjF,MAAI,SAAS,cAAc;AACzB,YAAQ,OAAO,MAAM,8BAA8B,WAAW;AAAA,CAAmB;AAAA,EACnF,WAAW,SAAS,cAAc;AAChC,YAAQ,OAAO,MAAM,8BAA8B,WAAW;AAAA,CAAmB;AAAA,EACnF,OAAO;AACL,YAAQ,OAAO,MAAM,sGAA4F;AAAA,EACnH;AACF;AAEA,IAAqB,cAArB,MAAqB,qBAAoB,QAAQ;AAAA,EAC/C,OAAgB,cAAc;AAAA,EAE9B,OAAgB,OAAO;AAAA,IACrB,OAAO,KAAK,OAAO,EAAE,aAAa,8BAA8B,UAAU,KAAK,CAAC;AAAA,EAClF;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,YAAW;AAC7C,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,OAAO,CAAC;AACzD,UAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,UAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC;AAEtF,QAAI,CAAC,OAAO;AACV,WAAK,MAAM,qBAAqB,KAAK,KAAK,GAAG;AAAA,IAC/C;AAEA,UAAM,SAAS,MAAM,iBAAiB,QAAQ,MAAM,EAAE;AACtD,UAAM,QAAQ,cAAc,MAAM;AAClC,QAAI,SAAS;AACb,QAAI,QAAQ;AACZ,QAAI,OAAO;AACX,QAAI,cAAc;AAElB,YAAQ,MAAM,WAAW,IAAI;AAC7B,YAAQ,MAAM,OAAO;AACrB,YAAQ,MAAM,YAAY,MAAM;AAEhC,WAAO,OAAO,QAAQ,MAAM,aAAa,MAAM,KAAK;AAEpD,UAAM,UAAU,MAAM;AACpB,cAAQ,MAAM,WAAW,KAAK;AAC9B,cAAQ,OAAO,MAAM,OAAO;AAAA,IAC9B;AAEA,UAAM,OAAO,YAAY;AACvB,YAAM,SAAS,cAAc,KAAK;AAClC,YAAM,gBAAgB,QAAQ,MAAM,IAAI,QAAQ,MAAM;AACtD,cAAQ;AAAA,IACV;AAEA,YAAQ,MAAM,GAAG,QAAQ,OAAO,QAAgB;AAC9C,UAAI,SAAS,gBAAgB,SAAS,cAAc;AAClD,YAAI,QAAQ,QAAQ,QAAQ,MAAM;AAChC,cAAI,YAAY,KAAK,GAAG;AACtB,kBAAM,UAAmB,SAAS,eAC9B,EAAE,MAAM,QAAQ,MAAM,YAAY,KAAK,GAAG,SAAS,MAAM,IACzD,EAAE,MAAM,QAAQ,MAAM,YAAY,KAAK,GAAG,SAAS,MAAM;AAC7D,kBAAM,OAAO,SAAS,GAAG,GAAG,OAAO;AACnC,qBAAS,KAAK,IAAI,SAAS,GAAG,MAAM,SAAS,CAAC;AAC9C,oBAAQ;AAAA,UACV;AACA,iBAAO;AACP,wBAAc;AAAA,QAChB,WAAW,QAAQ,QAAQ;AACzB,iBAAO;AACP,wBAAc;AAAA,QAChB,WAAW,QAAQ,QAAQ;AACzB,wBAAc,YAAY,MAAM,GAAG,EAAE;AAAA,QACvC,WAAW,OAAO,KAAK;AACrB,yBAAe;AAAA,QACjB;AACA,eAAO,OAAO,QAAQ,MAAM,aAAa,MAAM,KAAK;AACpD;AAAA,MACF;AAEA,UAAI,QAAQ,UAAU;AACpB,iBAAS,KAAK,IAAI,GAAG,SAAS,CAAC;AAAA,MACjC,WAAW,QAAQ,UAAU;AAC3B,iBAAS,KAAK,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC;AAAA,MAChD,WAAW,QAAQ,QAAQ,QAAQ,MAAM;AACvC,YAAI,MAAM,MAAM,GAAG,SAAS,QAAQ;AAClC,gBAAM,MAAM,EAAE,UAAU,CAAC,MAAM,MAAM,EAAE;AACvC,kBAAQ;AAAA,QACV;AAAA,MACF,WAAW,QAAQ,KAAK;AACtB,eAAO;AACP,sBAAc;AAAA,MAChB,WAAW,QAAQ,KAAK;AACtB,eAAO;AACP,sBAAc;AAAA,MAChB,WAAW,QAAQ,KAAK;AACtB,YAAI,MAAM,SAAS,GAAG;AACpB,gBAAM,OAAO,QAAQ,CAAC;AACtB,mBAAS,KAAK,IAAI,QAAQ,MAAM,SAAS,CAAC;AAC1C,kBAAQ;AAAA,QACV;AAAA,MACF,WAAW,QAAQ,KAAK;AACtB,cAAM,KAAK;AACX,eAAO,OAAO,QAAQ,MAAM,aAAa,MAAM,KAAK;AACpD,gBAAQ,OAAO,MAAM,2BAA2B;AAChD;AAAA,MACF,WAAW,QAAQ,OAAO,QAAQ,KAAQ;AACxC,YAAI,OAAO;AACT,gBAAM,KAAK;AACX,kBAAQ;AACR,eAAK,IAAI,UAAU,MAAM,KAAK,EAAE;AAAA,QAClC,OAAO;AACL,kBAAQ;AACR,eAAK,IAAI,aAAa;AAAA,QACxB;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,aAAO,OAAO,QAAQ,MAAM,aAAa,MAAM,KAAK;AAAA,IACtD,CAAC;AAAA,EACH;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/commands/interactive.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { listNotes, getBlocksForNote, saveNoteContent, exportNoteAsMarkdown, type Block } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\nimport { markdownToTiptap } from \"@vertex/core\";\n\ninterface TuiItem {\n kind: \"text\" | \"todo\" | \"heading\" | \"code\" | \"mermaid\" | \"math\" | \"callout\" | \"divider\" | \"bullet\" | \"quote\" | \"file\" | \"image\";\n text: string;\n checked: boolean;\n level?: number;\n language?: string;\n variant?: string;\n raw?: Record<string, unknown>;\n}\n\nconst DIM = \"\\x1b[90m\";\nconst BOLD = \"\\x1b[1m\";\nconst GREEN = \"\\x1b[32m\";\nconst CYAN = \"\\x1b[36m\";\nconst YELLOW = \"\\x1b[33m\";\nconst PURPLE = \"\\x1b[35m\";\nconst R = \"\\x1b[0m\";\nconst STRIKE = \"\\x1b[9m\";\n\nfunction extractText(node: Record<string, unknown>): string {\n if (typeof node.text === \"string\") return node.text;\n const content = node.content as Array<Record<string, unknown>> | undefined;\n if (!content) return \"\";\n return content.map(extractText).join(\"\");\n}\n\nfunction blocksToItems(blocks: Block[]): TuiItem[] {\n const items: TuiItem[] = [];\n for (const b of blocks) {\n const meta = b.metadata as Record<string, unknown>;\n const tiptap = meta.tiptap as Record<string, unknown> | undefined;\n if (!tiptap) {\n if (b.content.trim()) items.push({ kind: \"text\", text: b.content, checked: false });\n continue;\n }\n\n const type = tiptap.type as string;\n const attrs = (tiptap.attrs ?? {}) as Record<string, unknown>;\n\n switch (type) {\n case \"heading\":\n items.push({ kind: \"heading\", text: extractText(tiptap), checked: false, level: (attrs.level as number) ?? 1 });\n break;\n case \"taskList\":\n for (const child of (tiptap.content ?? []) as Array<Record<string, unknown>>) {\n const ca = (child.attrs ?? {}) as Record<string, unknown>;\n items.push({ kind: \"todo\", text: extractText(child), checked: ca.checked === true });\n }\n break;\n case \"bulletList\":\n for (const child of (tiptap.content ?? []) as Array<Record<string, unknown>>) {\n items.push({ kind: \"bullet\", text: extractText(child), checked: false });\n }\n break;\n case \"orderedList\":\n (tiptap.content as Array<Record<string, unknown>> ?? []).forEach((child, idx) => {\n items.push({ kind: \"text\", text: `${idx + 1}. ${extractText(child)}`, checked: false });\n });\n break;\n case \"codeBlock\":\n items.push({ kind: \"code\", text: extractText(tiptap), checked: false, language: (attrs.language as string) ?? \"\" });\n break;\n case \"mermaidBlock\":\n items.push({ kind: \"mermaid\", text: extractText(tiptap), checked: false });\n break;\n case \"mathBlock\":\n items.push({ kind: \"math\", text: extractText(tiptap), checked: false });\n break;\n case \"calloutBlock\":\n items.push({ kind: \"callout\", text: extractText(tiptap), checked: false, variant: (attrs.variant as string) ?? \"info\" });\n break;\n case \"blockquote\":\n items.push({ kind: \"quote\", text: extractText(tiptap), checked: false });\n break;\n case \"horizontalRule\":\n items.push({ kind: \"divider\", text: \"\", checked: false });\n break;\n case \"image\":\n items.push({ kind: \"image\", text: (attrs.alt as string) || (attrs.src as string) || \"image\", checked: false });\n break;\n case \"fileBlock\":\n items.push({ kind: \"file\", text: (attrs.filename as string) || \"file\", checked: false });\n break;\n default: {\n const text = extractText(tiptap);\n if (text.trim()) items.push({ kind: \"text\", text, checked: false });\n }\n }\n }\n return items;\n}\n\nfunction renderItem(item: TuiItem, selected: boolean): string {\n const ptr = selected ? `${CYAN} ▸ ${R}` : \" \";\n\n switch (item.kind) {\n case \"heading\": {\n const hashes = \"#\".repeat(item.level ?? 1);\n return `${ptr}${BOLD}${hashes} ${item.text}${R}`;\n }\n case \"todo\": {\n const box = item.checked ? `${GREEN}[✓]${R}` : `${DIM}[ ]${R}`;\n const text = item.checked ? `${DIM}${STRIKE}${item.text}${R}` : item.text;\n return `${ptr}${box} ${text}`;\n }\n case \"bullet\":\n return `${ptr}${DIM}•${R} ${item.text}`;\n case \"code\":\n return `${ptr}${DIM}┌ code${item.language ? ` (${item.language})` : \"\"}${R}\\n${item.text.split(\"\\n\").map((l) => ` ${DIM}│${R} ${l}`).join(\"\\n\")}\\n ${DIM}└──${R}`;\n case \"mermaid\":\n return `${ptr}${PURPLE}┌ mermaid${R}\\n${item.text.split(\"\\n\").map((l) => ` ${PURPLE}│${R} ${DIM}${l}${R}`).join(\"\\n\")}\\n ${PURPLE}└──${R}`;\n case \"math\":\n return `${ptr}${YELLOW}┌ math${R}\\n${item.text.split(\"\\n\").map((l) => ` ${YELLOW}│${R} ${l}`).join(\"\\n\")}\\n ${YELLOW}└──${R}`;\n case \"callout\":\n return `${ptr}${CYAN}[${(item.variant ?? \"info\").toUpperCase()}]${R} ${item.text}`;\n case \"quote\":\n return `${ptr}${DIM}▎${R} ${DIM}${item.text}${R}`;\n case \"divider\":\n return ` ${DIM}────────────────────────────${R}`;\n case \"image\":\n return `${ptr}${DIM}[image: ${item.text}]${R}`;\n case \"file\":\n return `${ptr}${DIM}[file: ${item.text}]${R}`;\n default:\n return `${ptr}${item.text}`;\n }\n}\n\nfunction render(items: TuiItem[], cursor: number, mode: string, inputBuffer: string, noteTitle: string): void {\n process.stdout.write(\"\\x1bc\");\n process.stdout.write(`${BOLD} ${noteTitle}${R}\\n`);\n process.stdout.write(`${DIM} ─────────────────────────────────────${R}\\n\\n`);\n\n for (let i = 0; i < items.length; i++) {\n process.stdout.write(renderItem(items[i], i === cursor) + \"\\n\");\n }\n\n if (items.length === 0) {\n process.stdout.write(` ${DIM}(empty)${R}\\n`);\n }\n\n process.stdout.write(`\\n${DIM} ─────────────────────────────────────${R}\\n`);\n\n if (mode === \"input-todo\") {\n process.stdout.write(` ${YELLOW}New todo:${R} ${inputBuffer}\\x1b[7m \\x1b[0m\\n`);\n } else if (mode === \"input-text\") {\n process.stdout.write(` ${YELLOW}New text:${R} ${inputBuffer}\\x1b[7m \\x1b[0m\\n`);\n } else {\n process.stdout.write(` ${DIM}↑↓ move Enter toggle t todo n text d delete e edit in $EDITOR s save q quit${R}\\n`);\n }\n}\n\nexport default class Interactive extends Command {\n static override description = \"Interactive note editor with todo toggling\";\n\n static override args = {\n title: Args.string({ description: \"Note title (partial match)\", required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(Interactive);\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId });\n const query = args.title.toLowerCase();\n const match = notes.find((n) => !n.deleted_at && n.title.toLowerCase().includes(query));\n\n if (!match) {\n this.error(`No note matching \"${args.title}\"`);\n }\n\n const blocks = await getBlocksForNote(client, match.id);\n let items = blocksToItems(blocks);\n let cursor = 0;\n let dirty = false;\n let mode = \"normal\";\n let inputBuffer = \"\";\n\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.setEncoding(\"utf8\");\n\n render(items, cursor, mode, inputBuffer, match.title);\n\n const cleanup = () => {\n process.stdin.setRawMode(false);\n process.stdout.write(\"\\x1bc\");\n };\n\n const save = async () => {\n const md = items.map((item) => {\n switch (item.kind) {\n case \"heading\": return `${\"#\".repeat(item.level ?? 1)} ${item.text}`;\n case \"todo\": return `- [${item.checked ? \"x\" : \" \"}] ${item.text}`;\n case \"bullet\": return `- ${item.text}`;\n case \"code\": return `\\`\\`\\`${item.language ?? \"\"}\\n${item.text}\\n\\`\\`\\``;\n case \"mermaid\": return `\\`\\`\\`mermaid\\n${item.text}\\n\\`\\`\\``;\n case \"math\": return `$$\\n${item.text}\\n$$`;\n case \"callout\": return `> [!${item.variant ?? \"info\"}]\\n> ${item.text}`;\n case \"quote\": return `> ${item.text}`;\n case \"divider\": return \"---\";\n case \"image\": return `![](${item.text})`;\n case \"file\": return `> [!file]\\n> ${item.text}`;\n default: return item.text;\n }\n }).join(\"\\n\\n\");\n\n const tiptap = markdownToTiptap(md);\n await saveNoteContent(client, match.id, userId, tiptap);\n dirty = false;\n };\n\n const openEditor = async () => {\n cleanup();\n const { tmpdir } = await import(\"node:os\");\n const { join } = await import(\"node:path\");\n const { writeFileSync, readFileSync } = await import(\"node:fs\");\n const { execSync } = await import(\"node:child_process\");\n\n const md = await exportNoteAsMarkdown(client, match.id);\n const tmpFile = join(tmpdir(), `vertex-${match.id}.md`);\n writeFileSync(tmpFile, md, \"utf-8\");\n\n const editor = process.env.EDITOR || process.env.VISUAL || \"vim\";\n try { execSync(`${editor} \"${tmpFile}\"`, { stdio: \"inherit\" }); } catch { /* */ }\n\n const edited = readFileSync(tmpFile, \"utf-8\");\n if (edited !== md) {\n const tiptap = markdownToTiptap(edited);\n await saveNoteContent(client, match.id, userId, tiptap);\n }\n\n const newBlocks = await getBlocksForNote(client, match.id);\n items = blocksToItems(newBlocks);\n cursor = Math.min(cursor, Math.max(0, items.length - 1));\n dirty = false;\n\n process.stdin.setRawMode(true);\n process.stdin.resume();\n render(items, cursor, mode, inputBuffer, match.title);\n };\n\n process.stdin.on(\"data\", async (key: string) => {\n if (mode === \"input-todo\" || mode === \"input-text\") {\n if (key === \"\\r\" || key === \"\\n\") {\n if (inputBuffer.trim()) {\n const newItem: TuiItem = mode === \"input-todo\"\n ? { kind: \"todo\", text: inputBuffer.trim(), checked: false }\n : { kind: \"text\", text: inputBuffer.trim(), checked: false };\n items.splice(cursor + 1, 0, newItem);\n cursor = Math.min(cursor + 1, items.length - 1);\n dirty = true;\n }\n mode = \"normal\";\n inputBuffer = \"\";\n } else if (key === \"\\x1b\") {\n mode = \"normal\";\n inputBuffer = \"\";\n } else if (key === \"\\x7f\") {\n inputBuffer = inputBuffer.slice(0, -1);\n } else if (key >= \" \") {\n inputBuffer += key;\n }\n render(items, cursor, mode, inputBuffer, match.title);\n return;\n }\n\n if (key === \"\\x1b[A\") {\n cursor = Math.max(0, cursor - 1);\n } else if (key === \"\\x1b[B\") {\n cursor = Math.min(items.length - 1, cursor + 1);\n } else if (key === \"\\r\" || key === \"\\n\") {\n if (items[cursor]?.kind === \"todo\") {\n items[cursor].checked = !items[cursor].checked;\n dirty = true;\n }\n } else if (key === \"t\") {\n mode = \"input-todo\";\n inputBuffer = \"\";\n } else if (key === \"n\") {\n mode = \"input-text\";\n inputBuffer = \"\";\n } else if (key === \"d\") {\n if (items.length > 0) {\n items.splice(cursor, 1);\n cursor = Math.min(cursor, items.length - 1);\n dirty = true;\n }\n } else if (key === \"e\") {\n if (dirty) await save();\n await openEditor();\n return;\n } else if (key === \"s\") {\n await save();\n render(items, cursor, mode, inputBuffer, match.title);\n process.stdout.write(` ${GREEN}Saved!${R}\\n`);\n return;\n } else if (key === \"q\" || key === \"\\x03\") {\n if (dirty) await save();\n cleanup();\n this.log(dirty ? `Saved: ${match.title}` : \"No changes.\");\n process.exit(0);\n }\n\n render(items, cursor, mode, inputBuffer, match.title);\n });\n }\n}\n"],"mappings":"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","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-PBF5EE4Y.js";
5
5
  import {
6
6
  createSupabaseClient
7
- } from "../chunk-4QLCD6TZ.js";
7
+ } from "../chunk-EEEL6ZKK.js";
8
8
 
9
9
  // src/commands/login.ts
10
10
  import { Command } from "@oclif/core";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-URRSVCB7.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  createNote
8
- } from "../chunk-4QLCD6TZ.js";
8
+ } from "../chunk-EEEL6ZKK.js";
9
9
 
10
10
  // src/commands/new.ts
11
11
  import { Command, Args } from "@oclif/core";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-URRSVCB7.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  listNotes
8
- } from "../chunk-4QLCD6TZ.js";
8
+ } from "../chunk-EEEL6ZKK.js";
9
9
 
10
10
  // src/commands/notes.ts
11
11
  import { Command } from "@oclif/core";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-URRSVCB7.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  listNotes,
8
8
  restoreNote
9
- } from "../chunk-4QLCD6TZ.js";
9
+ } from "../chunk-EEEL6ZKK.js";
10
10
 
11
11
  // src/commands/restore.ts
12
12
  import { Command, Args } from "@oclif/core";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-URRSVCB7.js";
5
5
  import "../chunk-PBF5EE4Y.js";
6
6
  import {
7
7
  executeQuery
8
- } from "../chunk-4QLCD6TZ.js";
8
+ } from "../chunk-EEEL6ZKK.js";
9
9
 
10
10
  // src/commands/search.ts
11
11
  import { Command, Args } from "@oclif/core";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getClient,
3
3
  getUserId
4
- } from "../chunk-DDFOKGIX.js";
4
+ } from "../chunk-URRSVCB7.js";
5
5
  import {
6
6
  loadConfig
7
7
  } from "../chunk-PBF5EE4Y.js";
@@ -10,7 +10,7 @@ import {
10
10
  formatFileSize,
11
11
  getStorageInfo,
12
12
  listNotes
13
- } from "../chunk-4QLCD6TZ.js";
13
+ } from "../chunk-EEEL6ZKK.js";
14
14
 
15
15
  // src/commands/status.ts
16
16
  import { Command } from "@oclif/core";