vertex-notes 0.3.1 → 0.3.4

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 (69) hide show
  1. package/README.md +130 -130
  2. package/bin/run.js +3 -3
  3. package/dist/{chunk-JGE6NM2D.js → chunk-23CKP3YP.js} +1 -2
  4. package/dist/{chunk-PBF5EE4Y.js → chunk-DRIWYEQE.js} +0 -1
  5. package/dist/{chunk-HJR4UBO3.js → chunk-QQO4JMNC.js} +2 -3
  6. package/dist/{chunk-QEOOUDO3.js → chunk-XJVEK2OB.js} +552 -47
  7. package/dist/commands/capture.js +3 -4
  8. package/dist/commands/daily.js +3 -4
  9. package/dist/commands/delete.js +3 -4
  10. package/dist/commands/edit.js +3 -8
  11. package/dist/commands/export.js +3 -4
  12. package/dist/commands/hello.js +1 -2
  13. package/dist/commands/help.js +1 -2
  14. package/dist/commands/howto.js +0 -1
  15. package/dist/commands/import.js +3 -4
  16. package/dist/commands/interactive.js +45 -4
  17. package/dist/commands/login.js +2 -3
  18. package/dist/commands/logout.js +1 -2
  19. package/dist/commands/new.js +3 -4
  20. package/dist/commands/notes.js +3 -4
  21. package/dist/commands/restore.js +3 -4
  22. package/dist/commands/search.js +3 -4
  23. package/dist/commands/status.js +3 -4
  24. package/dist/commands/syntax.js +0 -1
  25. package/dist/commands/tags.js +3 -4
  26. package/dist/commands/today.js +3 -4
  27. package/dist/commands/trash/empty.js +4 -5
  28. package/dist/commands/trash/index.js +3 -4
  29. package/dist/commands/view.js +3 -4
  30. package/dist/commands/whoami.js +1 -2
  31. package/dist/index.js +0 -1
  32. package/dist/lib/client.js +3 -4
  33. package/dist/lib/config.js +1 -2
  34. package/dist/lib/file-cleanup.js +2 -3
  35. package/package.json +56 -54
  36. package/dist/chunk-HJR4UBO3.js.map +0 -1
  37. package/dist/chunk-JGE6NM2D.js.map +0 -1
  38. package/dist/chunk-PBF5EE4Y.js.map +0 -1
  39. package/dist/chunk-QEOOUDO3.js.map +0 -1
  40. package/dist/commands/capture.js.map +0 -1
  41. package/dist/commands/daily.js.map +0 -1
  42. package/dist/commands/delete.js.map +0 -1
  43. package/dist/commands/edit.js.map +0 -1
  44. package/dist/commands/export.js.map +0 -1
  45. package/dist/commands/hello.js.map +0 -1
  46. package/dist/commands/help.js.map +0 -1
  47. package/dist/commands/howto.js.map +0 -1
  48. package/dist/commands/import.js.map +0 -1
  49. package/dist/commands/interactive.js.map +0 -1
  50. package/dist/commands/login.js.map +0 -1
  51. package/dist/commands/logout.js.map +0 -1
  52. package/dist/commands/new.js.map +0 -1
  53. package/dist/commands/notes.js.map +0 -1
  54. package/dist/commands/restore.js.map +0 -1
  55. package/dist/commands/search.js.map +0 -1
  56. package/dist/commands/status.js.map +0 -1
  57. package/dist/commands/syntax.js.map +0 -1
  58. package/dist/commands/tags.js.map +0 -1
  59. package/dist/commands/today.js.map +0 -1
  60. package/dist/commands/trash/empty.js.map +0 -1
  61. package/dist/commands/trash/index.js.map +0 -1
  62. package/dist/commands/view.js.map +0 -1
  63. package/dist/commands/whoami.js.map +0 -1
  64. package/dist/index.js.map +0 -1
  65. package/dist/lib/client.js.map +0 -1
  66. package/dist/lib/config.js.map +0 -1
  67. package/dist/lib/file-cleanup.js.map +0 -1
  68. package/dist/lib/md-to-tiptap.js +0 -250
  69. package/dist/lib/md-to-tiptap.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/new.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { createNote } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nexport default class New extends Command {\n static override description = \"Create a new note\";\n\n static override args = {\n title: Args.string({ description: \"Note title\", default: \"Untitled\" }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(New);\n const client = await getClient();\n const userId = await getUserId();\n const note = await createNote(client, { user_id: userId, title: args.title });\n this.log(`Created: ${note.title} (${note.id})`);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAI9B,IAAqB,MAArB,MAAqB,aAAY,QAAQ;AAAA,EACvC,OAAgB,cAAc;AAAA,EAE9B,OAAgB,OAAO;AAAA,IACrB,OAAO,KAAK,OAAO,EAAE,aAAa,cAAc,SAAS,WAAW,CAAC;AAAA,EACvE;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,IAAG;AACrC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,OAAO,MAAM,WAAW,QAAQ,EAAE,SAAS,QAAQ,OAAO,KAAK,MAAM,CAAC;AAC5E,SAAK,IAAI,YAAY,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG;AAAA,EAChD;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/notes.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { listNotes } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nfunction formatDate(dateStr: string): string {\n const d = new Date(dateStr);\n return d.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", hour: \"2-digit\", minute: \"2-digit\" });\n}\n\nfunction pad(str: string, len: number): string {\n return str.length > len ? str.slice(0, len - 1) + \"…\" : str.padEnd(len);\n}\n\nexport default class Notes extends Command {\n static override description = \"List all notes\";\n\n async run(): Promise<void> {\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId });\n const active = notes.filter((n) => !n.deleted_at);\n\n if (active.length === 0) {\n this.log(\"No notes yet. Create one: vertex new\");\n return;\n }\n\n this.log(`\\n ${pad(\"Title\", 40)} ${pad(\"Type\", 10)} ${pad(\"Updated\", 20)}`);\n this.log(` ${\"─\".repeat(40)} ${\"─\".repeat(10)} ${\"─\".repeat(20)}`);\n for (const n of active) {\n const type = n.note_type === \"regular\" ? \"\" : n.note_type;\n this.log(` ${pad(n.title, 40)} ${pad(type, 10)} ${formatDate(n.updated_at)}`);\n }\n this.log(`\\n ${active.length} note(s)\\n`);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,eAAe;AAIxB,SAAS,WAAW,SAAyB;AAC3C,QAAM,IAAI,IAAI,KAAK,OAAO;AAC1B,SAAO,EAAE,mBAAmB,SAAS,EAAE,OAAO,SAAS,KAAK,WAAW,MAAM,WAAW,QAAQ,UAAU,CAAC;AAC7G;AAEA,SAAS,IAAI,KAAa,KAAqB;AAC7C,SAAO,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,WAAM,IAAI,OAAO,GAAG;AACxE;AAEA,IAAqB,QAArB,cAAmC,QAAQ;AAAA,EACzC,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,OAAO,CAAC;AACzD,UAAM,SAAS,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU;AAEhD,QAAI,OAAO,WAAW,GAAG;AACvB,WAAK,IAAI,sCAAsC;AAC/C;AAAA,IACF;AAEA,SAAK,IAAI;AAAA,IAAO,IAAI,SAAS,EAAE,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,EAAE;AAC3E,SAAK,IAAI,KAAK,SAAI,OAAO,EAAE,CAAC,IAAI,SAAI,OAAO,EAAE,CAAC,IAAI,SAAI,OAAO,EAAE,CAAC,EAAE;AAClE,eAAW,KAAK,QAAQ;AACtB,YAAM,OAAO,EAAE,cAAc,YAAY,KAAK,EAAE;AAChD,WAAK,IAAI,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,UAAU,CAAC,EAAE;AAAA,IAC/E;AACA,SAAK,IAAI;AAAA,IAAO,OAAO,MAAM;AAAA,CAAY;AAAA,EAC3C;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/restore.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { listNotes, restoreNote } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nexport default class Restore extends Command {\n static override description = \"Restore a note from trash\";\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(Restore);\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId, include_deleted: true });\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 trashed note matching \"${args.title}\"`);\n }\n\n await restoreNote(client, match.id);\n this.log(`Restored: ${match.title}`);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAI9B,IAAqB,UAArB,MAAqB,iBAAgB,QAAQ;AAAA,EAC3C,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,QAAO;AACzC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,QAAQ,iBAAiB,KAAK,CAAC;AAChF,UAAM,QAAQ,KAAK,MAAM,YAAY;AACrC,UAAM,QAAQ,MAAM,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC;AAErF,QAAI,CAAC,OAAO;AACV,WAAK,MAAM,6BAA6B,KAAK,KAAK,GAAG;AAAA,IACvD;AAEA,UAAM,YAAY,QAAQ,MAAM,EAAE;AAClC,SAAK,IAAI,aAAa,MAAM,KAAK,EAAE;AAAA,EACrC;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/search.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { executeQuery } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nexport default class Search extends Command {\n static override description = \"Search notes (#tag, type:todo, keywords)\";\n\n static override args = {\n query: Args.string({ description: \"Search query\", required: true }),\n };\n\n async run(): Promise<void> {\n const { args } = await this.parse(Search);\n const client = await getClient();\n const userId = await getUserId();\n const results = await executeQuery(client, userId, args.query);\n\n if (results.length === 0) {\n this.log(\"No results.\");\n return;\n }\n\n for (const r of results) {\n const preview = r.block.content.slice(0, 80).replace(/\\n/g, \" \");\n this.log(` [${r.block.type}] ${r.noteTitle}`);\n this.log(` ${preview}${r.block.content.length > 80 ? \"…\" : \"\"}`);\n this.log(\"\");\n }\n this.log(` ${results.length} result(s)`);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAI9B,IAAqB,SAArB,MAAqB,gBAAe,QAAQ;AAAA,EAC1C,OAAgB,cAAc;AAAA,EAE9B,OAAgB,OAAO;AAAA,IACrB,OAAO,KAAK,OAAO,EAAE,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,EACpE;AAAA,EAEA,MAAM,MAAqB;AACzB,UAAM,EAAE,KAAK,IAAI,MAAM,KAAK,MAAM,OAAM;AACxC,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,UAAU,MAAM,aAAa,QAAQ,QAAQ,KAAK,KAAK;AAE7D,QAAI,QAAQ,WAAW,GAAG;AACxB,WAAK,IAAI,aAAa;AACtB;AAAA,IACF;AAEA,eAAW,KAAK,SAAS;AACvB,YAAM,UAAU,EAAE,MAAM,QAAQ,MAAM,GAAG,EAAE,EAAE,QAAQ,OAAO,GAAG;AAC/D,WAAK,IAAI,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,SAAS,EAAE;AAC7C,WAAK,IAAI,OAAO,OAAO,GAAG,EAAE,MAAM,QAAQ,SAAS,KAAK,WAAM,EAAE,EAAE;AAClE,WAAK,IAAI,EAAE;AAAA,IACb;AACA,SAAK,IAAI,KAAK,QAAQ,MAAM,YAAY;AAAA,EAC1C;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/status.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { VERTEX_VERSION, listNotes, getStorageInfo, formatFileSize } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\nimport { loadConfig } from \"../lib/config.js\";\n\nexport default class Status extends Command {\n static override description = \"Show account status and storage usage\";\n\n async run(): Promise<void> {\n const config = loadConfig();\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId });\n const active = notes.filter((n) => !n.deleted_at);\n const trashed = notes.filter((n) => n.deleted_at);\n const { used, cap } = await getStorageInfo(client, userId);\n const pct = cap > 0 ? Math.round((used / cap) * 100) : 0;\n\n this.log(`\\n Vertex v${VERTEX_VERSION}`);\n this.log(` User: ${config.email ?? \"unknown\"}`);\n this.log(` Notes: ${active.length} active, ${trashed.length} trashed`);\n this.log(` Storage: ${formatFileSize(used)} / ${formatFileSize(cap)} (${pct}%)`);\n this.log(\"\");\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,eAAe;AAKxB,IAAqB,SAArB,cAAoC,QAAQ;AAAA,EAC1C,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,UAAM,SAAS,WAAW;AAC1B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,OAAO,CAAC;AACzD,UAAM,SAAS,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU;AAChD,UAAM,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU;AAChD,UAAM,EAAE,MAAM,IAAI,IAAI,MAAM,eAAe,QAAQ,MAAM;AACzD,UAAM,MAAM,MAAM,IAAI,KAAK,MAAO,OAAO,MAAO,GAAG,IAAI;AAEvD,SAAK,IAAI;AAAA,YAAe,cAAc,EAAE;AACxC,SAAK,IAAI,cAAc,OAAO,SAAS,SAAS,EAAE;AAClD,SAAK,IAAI,cAAc,OAAO,MAAM,YAAY,QAAQ,MAAM,UAAU;AACxE,SAAK,IAAI,cAAc,eAAe,IAAI,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,GAAG,IAAI;AAChF,SAAK,IAAI,EAAE;AAAA,EACb;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/syntax.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\n\nconst D = \"\\x1b[90m\";\nconst B = \"\\x1b[1m\";\nconst C = \"\\x1b[36m\";\nconst Y = \"\\x1b[33m\";\nconst G = \"\\x1b[32m\";\nconst P = \"\\x1b[35m\";\nconst R = \"\\x1b[0m\";\n\nexport default class Syntax extends Command {\n static override description = \"Show all Vertex markdown syntax for writing notes\";\n\n async run(): Promise<void> {\n this.log(`\n${B}${P} Vertex Markdown Syntax — Complete Reference${R}\n${D} For AI agents and humans writing Vertex notes from the terminal.${R}\n${D} ──────────────────────────────────────────────────────────${R}\n\n${C}${B} RULES${R}\n${D} • Each block must be separated by a blank line${R}\n${D} • First # Heading 1 in a note becomes the note title${R}\n${D} • Tags must start with a letter: #valid #123invalid${R}\n${D} • Wiki links are case-insensitive: [[My Note]] matches \"my note\"${R}\n${D} • Indent with spaces, not tabs${R}\n\n${C}${B} ━━━ TEXT & HEADINGS ━━━${R}\n\n${Y} # Heading 1${R} ${D}← note title${R}\n${Y} ## Heading 2${R} ${D}← section${R}\n${Y} ### Heading 3${R} ${D}← subsection${R}\n${Y} #### Heading 4${R} ${D}← minor heading${R}\n\n${Y} Plain paragraph text.${R} ${D}← just text on a line${R}\n${Y} **bold** *italic* \\`code\\` ~~strike~~${R}\n\n${C}${B} ━━━ LINKS & TAGS ━━━${R}\n\n${Y} [[Note Title]]${R} ${D}← wiki link (navigates to note)${R}\n${Y} #tagname${R} ${D}← tag (auto-created, purple pill)${R}\n${Y} #parent/child${R} ${D}← scoped tag (creates hierarchy)${R}\n${Y} #work/frontend${R} ${D}← example: parent=work, child=frontend${R}\n\n${C}${B} ━━━ LISTS ━━━${R}\n\n${Y} - Bullet item one${R}\n${Y} - Bullet item two${R}\n${Y} - Bullet item three${R}\n\n${Y} 1. Numbered item one${R}\n${Y} 2. Numbered item two${R}\n${Y} 3. Numbered item three${R}\n\n${Y} - [ ] Open todo task${R}\n${Y} - [x] Completed todo task${R}\n${Y} - [ ] Another open task #work${R} ${D}← tags work inside tasks${R}\n\n${C}${B} ━━━ BLOCKQUOTE ━━━${R}\n\n${Y} > Single line quote${R}\n\n${Y} > Multi-line quote${R}\n${Y} > continues with > prefix${R}\n${Y} > on each line${R}\n\n${C}${B} ━━━ DIVIDER ━━━${R}\n\n${Y} ---${R} ${D}← horizontal rule${R}\n\n${C}${B} ━━━ CODE BLOCK ━━━${R}\n\n${Y} \\`\\`\\`javascript${R}\n${Y} function greet(name) {${R}\n${Y} return \\`Hello, \\${name}!\\`;${R}\n${Y} }${R}\n${Y} \\`\\`\\`${R}\n\n${D} Languages: python, javascript, typescript, rust, go, java,${R}\n${D} c, cpp, csharp, ruby, php, swift, kotlin, sql, html, css,${R}\n${D} json, yaml, xml, markdown, bash, shell, dockerfile, graphql${R}\n\n${C}${B} ━━━ MERMAID DIAGRAM ━━━${R}\n${D} Use \\`\\`\\`mermaid to open, \\`\\`\\` to close. All Mermaid syntax works.${R}\n\n${D} Flowchart:${R}\n${Y} \\`\\`\\`mermaid${R}\n${Y} graph TD;${R}\n${Y} A[Start] --> B{Decision};${R}\n${Y} B -->|Yes| C[Do X];${R}\n${Y} B -->|No| D[Do Y];${R}\n${Y} C --> E[End];${R}\n${Y} D --> E;${R}\n${Y} \\`\\`\\`${R}\n\n${D} Sequence diagram:${R}\n${Y} \\`\\`\\`mermaid${R}\n${Y} sequenceDiagram${R}\n${Y} Client->>Server: Request${R}\n${Y} Server->>DB: Query${R}\n${Y} DB-->>Server: Result${R}\n${Y} Server-->>Client: Response${R}\n${Y} \\`\\`\\`${R}\n\n${D} ER diagram:${R}\n${Y} \\`\\`\\`mermaid${R}\n${Y} erDiagram${R}\n${Y} USER ||--o{ POST : writes${R}\n${Y} POST ||--o{ COMMENT : has${R}\n${Y} USER ||--o{ COMMENT : writes${R}\n${Y} \\`\\`\\`${R}\n\n${D} Class diagram:${R}\n${Y} \\`\\`\\`mermaid${R}\n${Y} classDiagram${R}\n${Y} class Animal {${R}\n${Y} +String name${R}\n${Y} +eat() void${R}\n${Y} }${R}\n${Y} Animal <|-- Dog${R}\n${Y} Animal <|-- Cat${R}\n${Y} \\`\\`\\`${R}\n\n${D} Also: gantt, pie, stateDiagram, flowchart, gitGraph, mindmap${R}\n\n${C}${B} ━━━ MATH (LaTeX) ━━━${R}\n\n${C} Inline math (within text):${R}\n${Y} The formula $E = mc^2$ is famous.${R}\n${Y} Solve for $x$ where $ax^2 + bx + c = 0$.${R}\n\n${C} Block math (standalone):${R}\n${D} Use $$ on its own line to open and close. KaTeX syntax.${R}\n\n${Y} $$${R}\n${Y} E = mc^2${R}\n${Y} $$${R}\n\n${Y} $$${R}\n${Y} \\\\frac{-b \\\\pm \\\\sqrt{b^2 - 4ac}}{2a}${R}\n${Y} $$${R}\n\n${Y} $$${R}\n${Y} \\\\sum_{i=1}^{n} i = \\\\frac{n(n+1)}{2}${R}\n${Y} $$${R}\n\n${Y} $$${R}\n${Y} \\\\int_0^\\\\infty e^{-x^2} dx = \\\\frac{\\\\sqrt{\\\\pi}}{2}${R}\n${Y} $$${R}\n\n${D} Common LaTeX: \\\\frac{a}{b} \\\\sqrt{x} x^{2} x_{i}${R}\n${D} \\\\sum \\\\prod \\\\int \\\\lim \\\\infty \\\\alpha \\\\beta \\\\pi${R}\n${D} \\\\text{label} \\\\mathbb{R} \\\\vec{v} \\\\hat{x} \\\\bar{x}${R}\n${D} Matrices: \\\\begin{pmatrix} a & b \\\\\\\\ c & d \\\\end{pmatrix}${R}\n\n${C}${B} ━━━ CALLOUT BLOCKS ━━━${R}\n${D} 4 variants: info, warning, error, tip${R}\n\n${Y} > [!info]${R}\n${Y} > This is an informational note.${R}\n\n${Y} > [!warning]${R}\n${Y} > Be careful about this.${R}\n\n${Y} > [!error]${R}\n${Y} > Something went wrong.${R}\n\n${Y} > [!tip]${R}\n${Y} > Helpful suggestion here.${R}\n\n${D} Multi-line callout:${R}\n${Y} > [!info]${R}\n${Y} > Line one of the callout.${R}\n${Y} > Line two continues here.${R}\n${Y} > Each line needs the > prefix.${R}\n\n${C}${B} ━━━ QUERY BLOCK (live search) ━━━${R}\n\n${Y} > [!query]${R}\n${Y} > type:todo status:open${R}\n\n${Y} > [!query]${R}\n${Y} > #work type:todo${R}\n\n${D} Queries: keyword, #tag, type:todo/code/heading, status:open/done${R}\n\n${C}${B} ━━━ INLINE LINK ━━━${R}\n\n${Y} [Link Text](https://example.com)${R}\n${D} Opens in new tab. Works in paragraphs, lists, todos, callouts.${R}\n\n${C}${B} ━━━ EMBED (link preview) ━━━${R}\n\n${Y} > [!embed]${R}\n${Y} > https://www.youtube.com/watch?v=VIDEO_ID${R}\n\n${Y} > [!embed]${R}\n${Y} > https://github.com/user/repo${R}\n${D} YouTube → embedded video player${R}\n${D} Other URLs → preview card with title, description, image${R}\n\n${C}${B} ━━━ IMAGE ━━━${R}\n\n${Y} ![alt text](https://example.com/image.png)${R}\n\n${C}${B} ━━━ FILE ATTACHMENT ━━━${R}\n\n${Y} > [!file]${R}\n${Y} > [document.pdf](https://example.com/file.pdf)${R}\n${Y} > application/pdf 149780${R}\n\n${D} Format: > [filename](url) then > mimetype size_in_bytes${R}\n\n${D} ──────────────────────────────────────────────────────────${R}\n\n${C}${B} COMMANDS${R}\n ${G}vertex new \"Title\"${R} ${D}← create empty note${R}\n ${G}vertex edit \"Title\"${R} ${D}← edit in $EDITOR${R}\n ${G}vertex import file.md${R} ${D}← import markdown as new note${R}\n ${G}vertex import file.md -t \"T\"${R} ${D}← import with custom title${R}\n ${G}vertex export \"Title\"${R} ${D}← print as markdown${R}\n ${G}vertex export \"Title\" -o out.md${R} ${D}← save to file${R}\n ${G}vertex view \"Title\"${R} ${D}← quick view (same as export)${R}\n ${G}vertex syntax${R} ${D}← this reference${R}\n\n${C}${B} AI USAGE${R}\n${D} Any AI can create Vertex notes. Write a .md file using${R}\n${D} the syntax above, then:${R}\n\n ${G}vertex import note.md -t \"My Note\"${R}\n\n${D} Or edit an existing note directly:${R}\n\n ${G}vertex edit \"My Note\"${R}\n\n${D} The note will render with rich blocks (mermaid diagrams,${R}\n${D} LaTeX math, syntax-highlighted code, callouts, etc.)${R}\n${D} in the Vertex web app at ${P}https://vertex-alu.pages.dev${R}\n\n${C}${B} FULL EXAMPLE${R}\n${D} ──────────────────────────────────────────────────────────${R}\n${Y} # Project Notes${R}\n${Y} ${R}\n${Y} Overview of the #project with [[Related Note]] link.${R}\n${Y} ${R}\n${Y} ## Architecture${R}\n${Y} ${R}\n${Y} \\`\\`\\`mermaid${R}\n${Y} graph LR;${R}\n${Y} Client --> API --> DB;${R}\n${Y} \\`\\`\\`${R}\n${Y} ${R}\n${Y} ## Key Formula${R}\n${Y} ${R}\n${Y} $$${R}\n${Y} O(n \\\\log n)${R}\n${Y} $$${R}\n${Y} ${R}\n${Y} ## Code${R}\n${Y} ${R}\n${Y} \\`\\`\\`python${R}\n${Y} print(\"hello\")${R}\n${Y} \\`\\`\\`${R}\n${Y} ${R}\n${Y} > [!tip]${R}\n${Y} > Remember to test edge cases.${R}\n${Y} ${R}\n${Y} ## Tasks${R}\n${Y} ${R}\n${Y} - [x] Design complete${R}\n${Y} - [ ] Implementation pending #work${R}\n${D} ──────────────────────────────────────────────────────────${R}\n`);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/tags.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { getUserTags } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nexport default class Tags extends Command {\n static override description = \"List all tags\";\n\n async run(): Promise<void> {\n const client = await getClient();\n const userId = await getUserId();\n const tags = await getUserTags(client, userId);\n\n if (tags.length === 0) {\n this.log(\"No tags yet.\");\n return;\n }\n\n for (const t of tags) {\n this.log(` #${t.name}`);\n }\n this.log(`\\n ${tags.length} tag(s)`);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,eAAe;AAIxB,IAAqB,OAArB,cAAkC,QAAQ;AAAA,EACxC,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,OAAO,MAAM,YAAY,QAAQ,MAAM;AAE7C,QAAI,KAAK,WAAW,GAAG;AACrB,WAAK,IAAI,cAAc;AACvB;AAAA,IACF;AAEA,eAAW,KAAK,MAAM;AACpB,WAAK,IAAI,MAAM,EAAE,IAAI,EAAE;AAAA,IACzB;AACA,SAAK,IAAI;AAAA,IAAO,KAAK,MAAM,SAAS;AAAA,EACtC;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/today.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { listNotes } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nexport default class Today extends Command {\n static override description = \"Open latest daily note in interactive mode\";\n\n async run(): Promise<void> {\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId, note_type: \"daily\" as \"daily\" });\n const dailies = notes.filter((n) => !n.deleted_at).sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n\n if (dailies.length === 0) {\n this.log(\"No daily notes yet. Create one: vertex daily\");\n return;\n }\n\n const { default: Interactive } = await import(\"./interactive.js\");\n const cmd = new Interactive(this.argv, this.config);\n await cmd.init();\n process.argv = [process.argv[0], process.argv[1], dailies[0].title];\n await Interactive.run([dailies[0].title]);\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,eAAe;AAIxB,IAAqB,QAArB,cAAmC,QAAQ;AAAA,EACzC,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,QAAQ,WAAW,QAAmB,CAAC;AACxF,UAAM,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AAErI,QAAI,QAAQ,WAAW,GAAG;AACxB,WAAK,IAAI,8CAA8C;AACvD;AAAA,IACF;AAEA,UAAM,EAAE,SAAS,YAAY,IAAI,MAAM,OAAO,kBAAkB;AAChE,UAAM,MAAM,IAAI,YAAY,KAAK,MAAM,KAAK,MAAM;AAClD,UAAM,IAAI,KAAK;AACf,YAAQ,OAAO,CAAC,QAAQ,KAAK,CAAC,GAAG,QAAQ,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,KAAK;AAClE,UAAM,YAAY,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC;AAAA,EAC1C;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/commands/trash/empty.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { emptyTrash } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../../lib/client.js\";\nimport { cleanupRemovedFiles } from \"../../lib/file-cleanup.js\";\n\nexport default class TrashEmpty extends Command {\n static override description = \"Permanently delete all trashed notes\";\n\n async run(): Promise<void> {\n const client = await getClient();\n const userId = await getUserId();\n const count = await emptyTrash(client, userId, cleanupRemovedFiles);\n this.log(`Permanently deleted ${count} note(s).`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,eAAe;AAKxB,IAAqB,aAArB,cAAwC,QAAQ;AAAA,EAC9C,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,WAAW,QAAQ,QAAQ,mBAAmB;AAClE,SAAK,IAAI,uBAAuB,KAAK,WAAW;AAAA,EAClD;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/commands/trash/index.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { listNotes } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../../lib/client.js\";\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n}\n\nexport default class Trash extends Command {\n static override description = \"List trashed notes\";\n\n async run(): Promise<void> {\n const client = await getClient();\n const userId = await getUserId();\n const notes = await listNotes(client, { user_id: userId, include_deleted: true });\n const trashed = notes.filter((n) => n.deleted_at);\n\n if (trashed.length === 0) {\n this.log(\"Trash is empty.\");\n return;\n }\n\n for (const n of trashed) {\n this.log(` ${n.title.padEnd(40)} deleted ${formatDate(n.deleted_at!)}`);\n }\n this.log(`\\n ${trashed.length} note(s) in trash`);\n this.log(\" Use: vertex restore <title> | vertex trash:empty\");\n }\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,eAAe;AAIxB,SAAS,WAAW,SAAyB;AAC3C,SAAO,IAAI,KAAK,OAAO,EAAE,mBAAmB,SAAS,EAAE,OAAO,SAAS,KAAK,UAAU,CAAC;AACzF;AAEA,IAAqB,QAArB,cAAmC,QAAQ;AAAA,EACzC,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,SAAS,MAAM,UAAU;AAC/B,UAAM,QAAQ,MAAM,UAAU,QAAQ,EAAE,SAAS,QAAQ,iBAAiB,KAAK,CAAC;AAChF,UAAM,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU;AAEhD,QAAI,QAAQ,WAAW,GAAG;AACxB,WAAK,IAAI,iBAAiB;AAC1B;AAAA,IACF;AAEA,eAAW,KAAK,SAAS;AACvB,WAAK,IAAI,KAAK,EAAE,MAAM,OAAO,EAAE,CAAC,YAAY,WAAW,EAAE,UAAW,CAAC,EAAE;AAAA,IACzE;AACA,SAAK,IAAI;AAAA,IAAO,QAAQ,MAAM,mBAAmB;AACjD,SAAK,IAAI,oDAAoD;AAAA,EAC/D;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/view.ts"],"sourcesContent":["import { Command, Args } from \"@oclif/core\";\nimport { listNotes, exportNoteAsMarkdown } from \"@vertex/core\";\nimport { getClient, getUserId } from \"../lib/client.js\";\n\nexport default class View extends Command {\n static override description = \"View a note as markdown\";\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(View);\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 md = await exportNoteAsMarkdown(client, match.id);\n this.log(md);\n }\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,SAAS,YAAY;AAI9B,IAAqB,OAArB,MAAqB,cAAa,QAAQ;AAAA,EACxC,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,KAAI;AACtC,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,KAAK,MAAM,qBAAqB,QAAQ,MAAM,EAAE;AACtD,SAAK,IAAI,EAAE;AAAA,EACb;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/commands/whoami.ts"],"sourcesContent":["import { Command } from \"@oclif/core\";\nimport { loadConfig, isLoggedIn } from \"../lib/config.js\";\n\nexport default class Whoami extends Command {\n static override description = \"Show logged-in user\";\n\n async run(): Promise<void> {\n if (!isLoggedIn()) {\n this.log(\"Not logged in. Run: vertex login\");\n return;\n }\n const config = loadConfig();\n this.log(config.email ?? \"Logged in (no email on file)\");\n }\n}\n"],"mappings":";;;;;;AAAA,SAAS,eAAe;AAGxB,IAAqB,SAArB,cAAoC,QAAQ;AAAA,EAC1C,OAAgB,cAAc;AAAA,EAE9B,MAAM,MAAqB;AACzB,QAAI,CAAC,WAAW,GAAG;AACjB,WAAK,IAAI,kCAAkC;AAC3C;AAAA,IACF;AACA,UAAM,SAAS,WAAW;AAC1B,SAAK,IAAI,OAAO,SAAS,8BAA8B;AAAA,EACzD;AACF;","names":[]}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { run } from \"@oclif/core\";\n"],"mappings":";AAAA,SAAS,WAAW;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,250 +0,0 @@
1
- // src/lib/md-to-tiptap.ts
2
- function markdownToTiptap(md) {
3
- const lines = md.split("\n");
4
- const nodes = [];
5
- let i = 0;
6
- while (i < lines.length) {
7
- const line = lines[i];
8
- if (line.match(/^#{1,4}\s/)) {
9
- const match = line.match(/^(#{1,4})\s(.*)$/);
10
- if (match) {
11
- nodes.push({
12
- type: "heading",
13
- attrs: { level: match[1].length },
14
- content: parseInline(match[2])
15
- });
16
- }
17
- i++;
18
- continue;
19
- }
20
- if (line.match(/^```mermaid/)) {
21
- const mermaidLines = [];
22
- i++;
23
- while (i < lines.length && !lines[i].startsWith("```")) {
24
- mermaidLines.push(lines[i]);
25
- i++;
26
- }
27
- if (i < lines.length) i++;
28
- nodes.push({
29
- type: "mermaidBlock",
30
- content: [{ type: "text", text: mermaidLines.join("\n") }]
31
- });
32
- continue;
33
- }
34
- if (line.startsWith("```")) {
35
- const langMatch = line.match(/^```(\w*)/);
36
- const language = langMatch?.[1] || "plaintext";
37
- const codeLines = [];
38
- i++;
39
- while (i < lines.length && !lines[i].startsWith("```")) {
40
- codeLines.push(lines[i]);
41
- i++;
42
- }
43
- if (i < lines.length) i++;
44
- nodes.push({
45
- type: "codeBlock",
46
- attrs: { language },
47
- content: [{ type: "text", text: codeLines.join("\n") }]
48
- });
49
- continue;
50
- }
51
- if (line.startsWith("$$")) {
52
- const mathLines = [];
53
- i++;
54
- while (i < lines.length && !lines[i].startsWith("$$")) {
55
- mathLines.push(lines[i]);
56
- i++;
57
- }
58
- if (i < lines.length) i++;
59
- nodes.push({
60
- type: "mathBlock",
61
- content: [{ type: "text", text: mathLines.join("\n") }]
62
- });
63
- continue;
64
- }
65
- if (line.match(/^>\s*\[!(\w+)\]\s*$/)) {
66
- const variantMatch = line.match(/^>\s*\[!(\w+)\]\s*$/);
67
- const variant = variantMatch?.[1] ?? "info";
68
- if (variant === "query") {
69
- const queryLines = [];
70
- i++;
71
- while (i < lines.length && lines[i].match(/^>\s/)) {
72
- queryLines.push(lines[i].replace(/^>\s?/, ""));
73
- i++;
74
- }
75
- nodes.push({
76
- type: "queryBlock",
77
- content: [{ type: "text", text: queryLines.join("\n") }]
78
- });
79
- continue;
80
- }
81
- if (variant === "embed") {
82
- i++;
83
- const embedUrl = lines[i]?.replace(/^>\s?/, "").trim() ?? "";
84
- i++;
85
- nodes.push({
86
- type: "linkPreview",
87
- attrs: { url: embedUrl }
88
- });
89
- continue;
90
- }
91
- if (variant === "file") {
92
- i++;
93
- const linkLine = lines[i]?.replace(/^>\s?/, "") ?? "";
94
- const linkMatch = linkLine.match(/^\[(.+?)\]\((.+?)\)$/);
95
- i++;
96
- const metaLine = lines[i]?.replace(/^>\s?/, "") ?? "";
97
- const metaParts = metaLine.split(" ");
98
- i++;
99
- nodes.push({
100
- type: "fileBlock",
101
- attrs: {
102
- filename: linkMatch?.[1] ?? "file",
103
- src: linkMatch?.[2] ?? "",
104
- filetype: metaParts[0] ?? "",
105
- filesize: parseInt(metaParts[1] ?? "0", 10) || 0
106
- }
107
- });
108
- continue;
109
- }
110
- const calloutLines = [];
111
- i++;
112
- while (i < lines.length && lines[i].match(/^>\s/)) {
113
- calloutLines.push(lines[i].replace(/^>\s?/, ""));
114
- i++;
115
- }
116
- nodes.push({
117
- type: "calloutBlock",
118
- attrs: { variant },
119
- content: [{ type: "paragraph", content: parseInline(calloutLines.join("\n")) }]
120
- });
121
- continue;
122
- }
123
- if (line.match(/^>\s/)) {
124
- const quoteLines = [];
125
- while (i < lines.length && lines[i].match(/^>\s?/)) {
126
- quoteLines.push(lines[i].replace(/^>\s?/, ""));
127
- i++;
128
- }
129
- nodes.push({
130
- type: "blockquote",
131
- content: [{ type: "paragraph", content: parseInline(quoteLines.join("\n")) }]
132
- });
133
- continue;
134
- }
135
- if (line.match(/^---\s*$/)) {
136
- nodes.push({ type: "horizontalRule" });
137
- i++;
138
- continue;
139
- }
140
- if (line.match(/^!\[.*?\]\(.*?\)$/)) {
141
- const imgMatch = line.match(/^!\[(.*?)\]\((.*?)\)$/);
142
- if (imgMatch) {
143
- nodes.push({
144
- type: "image",
145
- attrs: { src: imgMatch[2], alt: imgMatch[1] }
146
- });
147
- }
148
- i++;
149
- continue;
150
- }
151
- if (line.match(/^[-*]\s\[[ x]\]\s/)) {
152
- const taskItems = [];
153
- while (i < lines.length && lines[i].match(/^[-*]\s\[[ x]\]\s/)) {
154
- const m = lines[i].match(/^[-*]\s\[([ x])\]\s(.*)$/);
155
- if (m) {
156
- taskItems.push({
157
- type: "taskItem",
158
- attrs: { checked: m[1] === "x" },
159
- content: [{ type: "paragraph", content: parseInline(m[2]) }]
160
- });
161
- }
162
- i++;
163
- }
164
- nodes.push({ type: "taskList", content: taskItems });
165
- continue;
166
- }
167
- if (line.match(/^[-*]\s/)) {
168
- const items = [];
169
- while (i < lines.length && lines[i].match(/^[-*]\s/)) {
170
- const text = lines[i].replace(/^[-*]\s/, "");
171
- items.push({
172
- type: "listItem",
173
- content: [{ type: "paragraph", content: parseInline(text) }]
174
- });
175
- i++;
176
- }
177
- nodes.push({ type: "bulletList", content: items });
178
- continue;
179
- }
180
- if (line.match(/^\d+\.\s/)) {
181
- const items = [];
182
- while (i < lines.length && lines[i].match(/^\d+\.\s/)) {
183
- const text = lines[i].replace(/^\d+\.\s/, "");
184
- items.push({
185
- type: "listItem",
186
- content: [{ type: "paragraph", content: parseInline(text) }]
187
- });
188
- i++;
189
- }
190
- nodes.push({ type: "orderedList", content: items });
191
- continue;
192
- }
193
- if (line.trim() === "") {
194
- i++;
195
- continue;
196
- }
197
- const paraLines = [];
198
- while (i < lines.length && lines[i].trim() !== "" && !lines[i].match(/^#{1,4}\s/) && !lines[i].match(/^```/) && !lines[i].match(/^\$\$/) && !lines[i].match(/^---\s*$/) && !lines[i].match(/^[-*]\s/) && !lines[i].match(/^\d+\.\s/) && !lines[i].match(/^>\s/) && !lines[i].match(/^!\[/)) {
199
- paraLines.push(lines[i]);
200
- i++;
201
- }
202
- nodes.push({
203
- type: "paragraph",
204
- content: parseInline(paraLines.join("\n"))
205
- });
206
- }
207
- if (nodes.length === 0) {
208
- nodes.push({ type: "paragraph" });
209
- }
210
- return { type: "doc", content: nodes };
211
- }
212
- function parseInline(text) {
213
- if (!text) return [];
214
- if (text.length > 1e4) return [{ type: "text", text }];
215
- const nodes = [];
216
- const regex = /(\*\*([^*]+)\*\*|\*([^*]+)\*|`([^`]+)`|~~([^~]+)~~|\[\[([^\]]+)\]\]|#([a-zA-Z][a-zA-Z0-9_/-]*)|\[([^\]]+)\]\(([^)]+)\)|(?<!\$)\$([^\$\n]+)\$(?!\$))/g;
217
- let lastIndex = 0;
218
- let match;
219
- while ((match = regex.exec(text)) !== null) {
220
- if (match.index > lastIndex) {
221
- nodes.push({ type: "text", text: text.slice(lastIndex, match.index) });
222
- }
223
- if (match[2]) {
224
- nodes.push({ type: "text", text: match[2], marks: [{ type: "bold" }] });
225
- } else if (match[3]) {
226
- nodes.push({ type: "text", text: match[3], marks: [{ type: "italic" }] });
227
- } else if (match[4]) {
228
- nodes.push({ type: "text", text: match[4], marks: [{ type: "code" }] });
229
- } else if (match[5]) {
230
- nodes.push({ type: "text", text: match[5], marks: [{ type: "strike" }] });
231
- } else if (match[6]) {
232
- nodes.push({ type: "text", text: `[[${match[6]}]]` });
233
- } else if (match[7]) {
234
- nodes.push({ type: "text", text: `#${match[7]}` });
235
- } else if (match[8] && match[9]) {
236
- nodes.push({ type: "text", text: match[8], marks: [{ type: "link", attrs: { href: match[9], target: "_blank" } }] });
237
- } else if (match[10]) {
238
- nodes.push({ type: "inlineMath", attrs: { formula: match[10] } });
239
- }
240
- lastIndex = match.index + match[0].length;
241
- }
242
- if (lastIndex < text.length) {
243
- nodes.push({ type: "text", text: text.slice(lastIndex) });
244
- }
245
- return nodes.length > 0 ? nodes : [{ type: "text", text: text || " " }];
246
- }
247
- export {
248
- markdownToTiptap
249
- };
250
- //# sourceMappingURL=md-to-tiptap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/md-to-tiptap.ts"],"sourcesContent":["interface TiptapNode {\n type: string;\n attrs?: Record<string, unknown>;\n content?: TiptapNode[];\n text?: string;\n marks?: Array<{ type: string; attrs?: Record<string, unknown> }>;\n}\n\nexport function markdownToTiptap(md: string): Record<string, unknown> {\n const lines = md.split(\"\\n\");\n const nodes: TiptapNode[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n\n if (line.match(/^#{1,4}\\s/)) {\n const match = line.match(/^(#{1,4})\\s(.*)$/);\n if (match) {\n nodes.push({\n type: \"heading\",\n attrs: { level: match[1].length },\n content: parseInline(match[2]),\n });\n }\n i++;\n continue;\n }\n\n if (line.match(/^```mermaid/)) {\n const mermaidLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith(\"```\")) {\n mermaidLines.push(lines[i]);\n i++;\n }\n if (i < lines.length) i++;\n nodes.push({\n type: \"mermaidBlock\",\n content: [{ type: \"text\", text: mermaidLines.join(\"\\n\") }],\n });\n continue;\n }\n\n if (line.startsWith(\"```\")) {\n const langMatch = line.match(/^```(\\w*)/);\n const language = langMatch?.[1] || \"plaintext\";\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith(\"```\")) {\n codeLines.push(lines[i]);\n i++;\n }\n if (i < lines.length) i++;\n nodes.push({\n type: \"codeBlock\",\n attrs: { language },\n content: [{ type: \"text\", text: codeLines.join(\"\\n\") }],\n });\n continue;\n }\n\n if (line.startsWith(\"$$\")) {\n const mathLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith(\"$$\")) {\n mathLines.push(lines[i]);\n i++;\n }\n if (i < lines.length) i++;\n nodes.push({\n type: \"mathBlock\",\n content: [{ type: \"text\", text: mathLines.join(\"\\n\") }],\n });\n continue;\n }\n\n if (line.match(/^>\\s*\\[!(\\w+)\\]\\s*$/)) {\n const variantMatch = line.match(/^>\\s*\\[!(\\w+)\\]\\s*$/);\n const variant = variantMatch?.[1] ?? \"info\";\n\n if (variant === \"query\") {\n const queryLines: string[] = [];\n i++;\n while (i < lines.length && lines[i].match(/^>\\s/)) {\n queryLines.push(lines[i].replace(/^>\\s?/, \"\"));\n i++;\n }\n nodes.push({\n type: \"queryBlock\",\n content: [{ type: \"text\", text: queryLines.join(\"\\n\") }],\n });\n continue;\n }\n\n if (variant === \"embed\") {\n i++;\n const embedUrl = lines[i]?.replace(/^>\\s?/, \"\").trim() ?? \"\";\n i++;\n nodes.push({\n type: \"linkPreview\",\n attrs: { url: embedUrl },\n });\n continue;\n }\n\n if (variant === \"file\") {\n i++;\n const linkLine = lines[i]?.replace(/^>\\s?/, \"\") ?? \"\";\n const linkMatch = linkLine.match(/^\\[(.+?)\\]\\((.+?)\\)$/);\n i++;\n const metaLine = lines[i]?.replace(/^>\\s?/, \"\") ?? \"\";\n const metaParts = metaLine.split(\" \");\n i++;\n nodes.push({\n type: \"fileBlock\",\n attrs: {\n filename: linkMatch?.[1] ?? \"file\",\n src: linkMatch?.[2] ?? \"\",\n filetype: metaParts[0] ?? \"\",\n filesize: parseInt(metaParts[1] ?? \"0\", 10) || 0,\n },\n });\n continue;\n }\n\n const calloutLines: string[] = [];\n i++;\n while (i < lines.length && lines[i].match(/^>\\s/)) {\n calloutLines.push(lines[i].replace(/^>\\s?/, \"\"));\n i++;\n }\n nodes.push({\n type: \"calloutBlock\",\n attrs: { variant },\n content: [{ type: \"paragraph\", content: parseInline(calloutLines.join(\"\\n\")) }],\n });\n continue;\n }\n\n if (line.match(/^>\\s/)) {\n const quoteLines: string[] = [];\n while (i < lines.length && lines[i].match(/^>\\s?/)) {\n quoteLines.push(lines[i].replace(/^>\\s?/, \"\"));\n i++;\n }\n nodes.push({\n type: \"blockquote\",\n content: [{ type: \"paragraph\", content: parseInline(quoteLines.join(\"\\n\")) }],\n });\n continue;\n }\n\n if (line.match(/^---\\s*$/)) {\n nodes.push({ type: \"horizontalRule\" });\n i++;\n continue;\n }\n\n if (line.match(/^!\\[.*?\\]\\(.*?\\)$/)) {\n const imgMatch = line.match(/^!\\[(.*?)\\]\\((.*?)\\)$/);\n if (imgMatch) {\n nodes.push({\n type: \"image\",\n attrs: { src: imgMatch[2], alt: imgMatch[1] },\n });\n }\n i++;\n continue;\n }\n\n if (line.match(/^[-*]\\s\\[[ x]\\]\\s/)) {\n const taskItems: TiptapNode[] = [];\n while (i < lines.length && lines[i].match(/^[-*]\\s\\[[ x]\\]\\s/)) {\n const m = lines[i].match(/^[-*]\\s\\[([ x])\\]\\s(.*)$/);\n if (m) {\n taskItems.push({\n type: \"taskItem\",\n attrs: { checked: m[1] === \"x\" },\n content: [{ type: \"paragraph\", content: parseInline(m[2]) }],\n });\n }\n i++;\n }\n nodes.push({ type: \"taskList\", content: taskItems });\n continue;\n }\n\n if (line.match(/^[-*]\\s/)) {\n const items: TiptapNode[] = [];\n while (i < lines.length && lines[i].match(/^[-*]\\s/)) {\n const text = lines[i].replace(/^[-*]\\s/, \"\");\n items.push({\n type: \"listItem\",\n content: [{ type: \"paragraph\", content: parseInline(text) }],\n });\n i++;\n }\n nodes.push({ type: \"bulletList\", content: items });\n continue;\n }\n\n if (line.match(/^\\d+\\.\\s/)) {\n const items: TiptapNode[] = [];\n while (i < lines.length && lines[i].match(/^\\d+\\.\\s/)) {\n const text = lines[i].replace(/^\\d+\\.\\s/, \"\");\n items.push({\n type: \"listItem\",\n content: [{ type: \"paragraph\", content: parseInline(text) }],\n });\n i++;\n }\n nodes.push({ type: \"orderedList\", content: items });\n continue;\n }\n\n if (line.trim() === \"\") {\n i++;\n continue;\n }\n\n const paraLines: string[] = [];\n while (\n i < lines.length &&\n lines[i].trim() !== \"\" &&\n !lines[i].match(/^#{1,4}\\s/) &&\n !lines[i].match(/^```/) &&\n !lines[i].match(/^\\$\\$/) &&\n !lines[i].match(/^---\\s*$/) &&\n !lines[i].match(/^[-*]\\s/) &&\n !lines[i].match(/^\\d+\\.\\s/) &&\n !lines[i].match(/^>\\s/) &&\n !lines[i].match(/^!\\[/)\n ) {\n paraLines.push(lines[i]);\n i++;\n }\n nodes.push({\n type: \"paragraph\",\n content: parseInline(paraLines.join(\"\\n\")),\n });\n }\n\n if (nodes.length === 0) {\n nodes.push({ type: \"paragraph\" });\n }\n\n return { type: \"doc\", content: nodes };\n}\n\nfunction parseInline(text: string): TiptapNode[] {\n if (!text) return [];\n if (text.length > 10000) return [{ type: \"text\", text }];\n\n const nodes: TiptapNode[] = [];\n const regex = /(\\*\\*([^*]+)\\*\\*|\\*([^*]+)\\*|`([^`]+)`|~~([^~]+)~~|\\[\\[([^\\]]+)\\]\\]|#([a-zA-Z][a-zA-Z0-9_/-]*)|\\[([^\\]]+)\\]\\(([^)]+)\\)|(?<!\\$)\\$([^\\$\\n]+)\\$(?!\\$))/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n nodes.push({ type: \"text\", text: text.slice(lastIndex, match.index) });\n }\n\n if (match[2]) {\n nodes.push({ type: \"text\", text: match[2], marks: [{ type: \"bold\" }] });\n } else if (match[3]) {\n nodes.push({ type: \"text\", text: match[3], marks: [{ type: \"italic\" }] });\n } else if (match[4]) {\n nodes.push({ type: \"text\", text: match[4], marks: [{ type: \"code\" }] });\n } else if (match[5]) {\n nodes.push({ type: \"text\", text: match[5], marks: [{ type: \"strike\" }] });\n } else if (match[6]) {\n nodes.push({ type: \"text\", text: `[[${match[6]}]]` });\n } else if (match[7]) {\n nodes.push({ type: \"text\", text: `#${match[7]}` });\n } else if (match[8] && match[9]) {\n nodes.push({ type: \"text\", text: match[8], marks: [{ type: \"link\", attrs: { href: match[9], target: \"_blank\" } }] });\n } else if (match[10]) {\n nodes.push({ type: \"inlineMath\", attrs: { formula: match[10] } });\n }\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n nodes.push({ type: \"text\", text: text.slice(lastIndex) });\n }\n\n return nodes.length > 0 ? nodes : [{ type: \"text\", text: text || \" \" }];\n}\n"],"mappings":";AAQO,SAAS,iBAAiB,IAAqC;AACpE,QAAM,QAAQ,GAAG,MAAM,IAAI;AAC3B,QAAM,QAAsB,CAAC;AAC7B,MAAI,IAAI;AAER,SAAO,IAAI,MAAM,QAAQ;AACvB,UAAM,OAAO,MAAM,CAAC;AAEpB,QAAI,KAAK,MAAM,WAAW,GAAG;AAC3B,YAAM,QAAQ,KAAK,MAAM,kBAAkB;AAC3C,UAAI,OAAO;AACT,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,OAAO,EAAE,OAAO,MAAM,CAAC,EAAE,OAAO;AAAA,UAChC,SAAS,YAAY,MAAM,CAAC,CAAC;AAAA,QAC/B,CAAC;AAAA,MACH;AACA;AACA;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,aAAa,GAAG;AAC7B,YAAM,eAAyB,CAAC;AAChC;AACA,aAAO,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,GAAG;AACtD,qBAAa,KAAK,MAAM,CAAC,CAAC;AAC1B;AAAA,MACF;AACA,UAAI,IAAI,MAAM,OAAQ;AACtB,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,aAAa,KAAK,IAAI,EAAE,CAAC;AAAA,MAC3D,CAAC;AACD;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,KAAK,GAAG;AAC1B,YAAM,YAAY,KAAK,MAAM,WAAW;AACxC,YAAM,WAAW,YAAY,CAAC,KAAK;AACnC,YAAM,YAAsB,CAAC;AAC7B;AACA,aAAO,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,GAAG;AACtD,kBAAU,KAAK,MAAM,CAAC,CAAC;AACvB;AAAA,MACF;AACA,UAAI,IAAI,MAAM,OAAQ;AACtB,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO,EAAE,SAAS;AAAA,QAClB,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,KAAK,IAAI,EAAE,CAAC;AAAA,MACxD,CAAC;AACD;AAAA,IACF;AAEA,QAAI,KAAK,WAAW,IAAI,GAAG;AACzB,YAAM,YAAsB,CAAC;AAC7B;AACA,aAAO,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,IAAI,GAAG;AACrD,kBAAU,KAAK,MAAM,CAAC,CAAC;AACvB;AAAA,MACF;AACA,UAAI,IAAI,MAAM,OAAQ;AACtB,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,KAAK,IAAI,EAAE,CAAC;AAAA,MACxD,CAAC;AACD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,qBAAqB,GAAG;AACrC,YAAM,eAAe,KAAK,MAAM,qBAAqB;AACrD,YAAM,UAAU,eAAe,CAAC,KAAK;AAErC,UAAI,YAAY,SAAS;AACvB,cAAM,aAAuB,CAAC;AAC9B;AACA,eAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG;AACjD,qBAAW,KAAK,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE,CAAC;AAC7C;AAAA,QACF;AACA,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,WAAW,KAAK,IAAI,EAAE,CAAC;AAAA,QACzD,CAAC;AACD;AAAA,MACF;AAEA,UAAI,YAAY,SAAS;AACvB;AACA,cAAM,WAAW,MAAM,CAAC,GAAG,QAAQ,SAAS,EAAE,EAAE,KAAK,KAAK;AAC1D;AACA,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,OAAO,EAAE,KAAK,SAAS;AAAA,QACzB,CAAC;AACD;AAAA,MACF;AAEA,UAAI,YAAY,QAAQ;AACtB;AACA,cAAM,WAAW,MAAM,CAAC,GAAG,QAAQ,SAAS,EAAE,KAAK;AACnD,cAAM,YAAY,SAAS,MAAM,sBAAsB;AACvD;AACA,cAAM,WAAW,MAAM,CAAC,GAAG,QAAQ,SAAS,EAAE,KAAK;AACnD,cAAM,YAAY,SAAS,MAAM,GAAG;AACpC;AACA,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,OAAO;AAAA,YACL,UAAU,YAAY,CAAC,KAAK;AAAA,YAC5B,KAAK,YAAY,CAAC,KAAK;AAAA,YACvB,UAAU,UAAU,CAAC,KAAK;AAAA,YAC1B,UAAU,SAAS,UAAU,CAAC,KAAK,KAAK,EAAE,KAAK;AAAA,UACjD;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAEA,YAAM,eAAyB,CAAC;AAChC;AACA,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG;AACjD,qBAAa,KAAK,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE,CAAC;AAC/C;AAAA,MACF;AACA,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO,EAAE,QAAQ;AAAA,QACjB,SAAS,CAAC,EAAE,MAAM,aAAa,SAAS,YAAY,aAAa,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MAChF,CAAC;AACD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,MAAM,GAAG;AACtB,YAAM,aAAuB,CAAC;AAC9B,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,OAAO,GAAG;AAClD,mBAAW,KAAK,MAAM,CAAC,EAAE,QAAQ,SAAS,EAAE,CAAC;AAC7C;AAAA,MACF;AACA,YAAM,KAAK;AAAA,QACT,MAAM;AAAA,QACN,SAAS,CAAC,EAAE,MAAM,aAAa,SAAS,YAAY,WAAW,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,MAC9E,CAAC;AACD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,UAAU,GAAG;AAC1B,YAAM,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACrC;AACA;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,mBAAmB,GAAG;AACnC,YAAM,WAAW,KAAK,MAAM,uBAAuB;AACnD,UAAI,UAAU;AACZ,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,OAAO,EAAE,KAAK,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;AAAA,QAC9C,CAAC;AAAA,MACH;AACA;AACA;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,mBAAmB,GAAG;AACnC,YAAM,YAA0B,CAAC;AACjC,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,mBAAmB,GAAG;AAC9D,cAAM,IAAI,MAAM,CAAC,EAAE,MAAM,0BAA0B;AACnD,YAAI,GAAG;AACL,oBAAU,KAAK;AAAA,YACb,MAAM;AAAA,YACN,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,IAAI;AAAA,YAC/B,SAAS,CAAC,EAAE,MAAM,aAAa,SAAS,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;AAAA,UAC7D,CAAC;AAAA,QACH;AACA;AAAA,MACF;AACA,YAAM,KAAK,EAAE,MAAM,YAAY,SAAS,UAAU,CAAC;AACnD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,YAAM,QAAsB,CAAC;AAC7B,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,SAAS,GAAG;AACpD,cAAM,OAAO,MAAM,CAAC,EAAE,QAAQ,WAAW,EAAE;AAC3C,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,SAAS,CAAC,EAAE,MAAM,aAAa,SAAS,YAAY,IAAI,EAAE,CAAC;AAAA,QAC7D,CAAC;AACD;AAAA,MACF;AACA,YAAM,KAAK,EAAE,MAAM,cAAc,SAAS,MAAM,CAAC;AACjD;AAAA,IACF;AAEA,QAAI,KAAK,MAAM,UAAU,GAAG;AAC1B,YAAM,QAAsB,CAAC;AAC7B,aAAO,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,MAAM,UAAU,GAAG;AACrD,cAAM,OAAO,MAAM,CAAC,EAAE,QAAQ,YAAY,EAAE;AAC5C,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,SAAS,CAAC,EAAE,MAAM,aAAa,SAAS,YAAY,IAAI,EAAE,CAAC;AAAA,QAC7D,CAAC;AACD;AAAA,MACF;AACA,YAAM,KAAK,EAAE,MAAM,eAAe,SAAS,MAAM,CAAC;AAClD;AAAA,IACF;AAEA,QAAI,KAAK,KAAK,MAAM,IAAI;AACtB;AACA;AAAA,IACF;AAEA,UAAM,YAAsB,CAAC;AAC7B,WACE,IAAI,MAAM,UACV,MAAM,CAAC,EAAE,KAAK,MAAM,MACpB,CAAC,MAAM,CAAC,EAAE,MAAM,WAAW,KAC3B,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,KACtB,CAAC,MAAM,CAAC,EAAE,MAAM,OAAO,KACvB,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,KAC1B,CAAC,MAAM,CAAC,EAAE,MAAM,SAAS,KACzB,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,KAC1B,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,KACtB,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,GACtB;AACA,gBAAU,KAAK,MAAM,CAAC,CAAC;AACvB;AAAA,IACF;AACA,UAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,SAAS,YAAY,UAAU,KAAK,IAAI,CAAC;AAAA,IAC3C,CAAC;AAAA,EACH;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,KAAK,EAAE,MAAM,YAAY,CAAC;AAAA,EAClC;AAEA,SAAO,EAAE,MAAM,OAAO,SAAS,MAAM;AACvC;AAEA,SAAS,YAAY,MAA4B;AAC/C,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,MAAI,KAAK,SAAS,IAAO,QAAO,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC;AAEvD,QAAM,QAAsB,CAAC;AAC7B,QAAM,QAAQ;AACd,MAAI,YAAY;AAChB,MAAI;AAEJ,UAAQ,QAAQ,MAAM,KAAK,IAAI,OAAO,MAAM;AAC1C,QAAI,MAAM,QAAQ,WAAW;AAC3B,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,WAAW,MAAM,KAAK,EAAE,CAAC;AAAA,IACvE;AAEA,QAAI,MAAM,CAAC,GAAG;AACZ,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC;AAAA,IACxE,WAAW,MAAM,CAAC,GAAG;AACnB,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,SAAS,CAAC,EAAE,CAAC;AAAA,IAC1E,WAAW,MAAM,CAAC,GAAG;AACnB,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC;AAAA,IACxE,WAAW,MAAM,CAAC,GAAG;AACnB,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,SAAS,CAAC,EAAE,CAAC;AAAA,IAC1E,WAAW,MAAM,CAAC,GAAG;AACnB,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC;AAAA,IACtD,WAAW,MAAM,CAAC,GAAG;AACnB,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC;AAAA,IACnD,WAAW,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AAC/B,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,QAAQ,OAAO,EAAE,MAAM,MAAM,CAAC,GAAG,QAAQ,SAAS,EAAE,CAAC,EAAE,CAAC;AAAA,IACrH,WAAW,MAAM,EAAE,GAAG;AACpB,YAAM,KAAK,EAAE,MAAM,cAAc,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,CAAC;AAAA,IAClE;AAEA,gBAAY,MAAM,QAAQ,MAAM,CAAC,EAAE;AAAA,EACrC;AAEA,MAAI,YAAY,KAAK,QAAQ;AAC3B,UAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,EAAE,CAAC;AAAA,EAC1D;AAEA,SAAO,MAAM,SAAS,IAAI,QAAQ,CAAC,EAAE,MAAM,QAAQ,MAAM,QAAQ,IAAI,CAAC;AACxE;","names":[]}