@peaske7/readit 0.3.0-rc.0 → 0.3.0-rc.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 (373) hide show
  1. package/dist/.vite/manifest.json +1111 -0
  2. package/dist/assets/_basePickBy-BMMA4Tou.js +1 -0
  3. package/dist/assets/_baseUniq-D40qku1I.js +1 -0
  4. package/dist/assets/arc-Ckg65iy8.js +1 -0
  5. package/dist/assets/architecture-YZFGNWBL-Dv3EY0zV.js +1 -0
  6. package/dist/assets/architectureDiagram-Q4EWVU46-ClRss4cm.js +36 -0
  7. package/dist/assets/array-Bjz-wYpJ.js +1 -0
  8. package/dist/assets/blockDiagram-DXYQGD6D-CBcFvoK1.js +132 -0
  9. package/dist/assets/c4Diagram-AHTNJAMY-D4d3ZLam.js +10 -0
  10. package/dist/assets/channel-D9EJxDy_.js +1 -0
  11. package/dist/assets/chunk-2KRD3SAO-DaFfaCGO.js +1 -0
  12. package/dist/assets/chunk-336JU56O-yLEQoF0v.js +2 -0
  13. package/dist/assets/chunk-426QAEUC-Uyzd4wAA.js +1 -0
  14. package/dist/assets/chunk-4BX2VUAB-DRuTD7x5.js +1 -0
  15. package/dist/assets/chunk-4TB4RGXK-3xbpIi_o.js +206 -0
  16. package/dist/assets/chunk-55IACEB6-BExiaAoD.js +1 -0
  17. package/dist/assets/chunk-5FUZZQ4R-DatVvHnF.js +62 -0
  18. package/dist/assets/chunk-5PVQY5BW-BKgvrGh8.js +2 -0
  19. package/dist/assets/chunk-67CJDMHE-DMt8LNEX.js +1 -0
  20. package/dist/assets/chunk-7N4EOEYR-CzLGefVf.js +1 -0
  21. package/dist/assets/chunk-AA7GKIK3-B6GFAk4U.js +1 -0
  22. package/dist/assets/chunk-BSJP7CBP-BK29yehL.js +1 -0
  23. package/dist/assets/chunk-CIAEETIT-D7hBXImP.js +1 -0
  24. package/dist/assets/chunk-Dlc7tRH4.js +1 -0
  25. package/dist/assets/chunk-EDXVE4YY-PYJdlmyH.js +1 -0
  26. package/dist/assets/chunk-ENJZ2VHE-DUHKBv6x.js +10 -0
  27. package/dist/assets/chunk-FMBD7UC4-2FWyCCAV.js +15 -0
  28. package/dist/assets/chunk-FOC6F5B3-DKFHrt4K.js +1 -0
  29. package/dist/assets/chunk-ICPOFSXX-Bh__D0ec.js +122 -0
  30. package/dist/assets/chunk-K5T4RW27-D51O7IkG.js +94 -0
  31. package/dist/assets/chunk-KGLVRYIC-DMHSCH4T.js +1 -0
  32. package/dist/assets/chunk-LIHQZDEY-C2aANxt9.js +1 -0
  33. package/dist/assets/chunk-ORNJ4GCN-Db_37NRX.js +1 -0
  34. package/dist/assets/chunk-OYMX7WX6-BltXOJLJ.js +231 -0
  35. package/dist/assets/chunk-QZHKN3VN-8Lcg9gti.js +1 -0
  36. package/dist/assets/chunk-U2HBQHQK-ByS6tilY.js +70 -0
  37. package/dist/assets/chunk-X2U36JSP-Bm-4Gqg_.js +1 -0
  38. package/dist/assets/chunk-XPW4576I-Bqbompq4.js +32 -0
  39. package/dist/assets/chunk-YZCP3GAM-CsC0imPb.js +1 -0
  40. package/dist/assets/chunk-ZZ45TVLE-CG-CqfPC.js +1 -0
  41. package/dist/assets/classDiagram-6PBFFD2Q-Jy1uFUk4.js +1 -0
  42. package/dist/assets/classDiagram-v2-HSJHXN6E-ChiLl3rR.js +1 -0
  43. package/dist/assets/clone-BBjvuERA.js +1 -0
  44. package/dist/assets/cose-bilkent-S5V4N54A-q90QeGKv.js +1 -0
  45. package/dist/assets/cytoscape.esm-BfXff3fb.js +321 -0
  46. package/dist/assets/dagre-KV5264BT-BQWiLFJB.js +4 -0
  47. package/dist/assets/dagre-nn_aIZ2E.js +1 -0
  48. package/dist/assets/defaultLocale-BwmRmqJp.js +1 -0
  49. package/dist/assets/diagram-5BDNPKRD-CJa7Y97H.js +10 -0
  50. package/dist/assets/diagram-G4DWMVQ6-tVQGBWfY.js +24 -0
  51. package/dist/assets/diagram-MMDJMWI5-CpimFldm.js +43 -0
  52. package/dist/assets/diagram-TYMM5635-D11WQVgy.js +24 -0
  53. package/dist/assets/dist-BNz65Ibc.js +1 -0
  54. package/dist/assets/erDiagram-SMLLAGMA-C2bLd0jS.js +85 -0
  55. package/dist/assets/flowDiagram-DWJPFMVM-Kw3fOOLT.js +162 -0
  56. package/dist/assets/ganttDiagram-T4ZO3ILL-fyMhyE2X.js +292 -0
  57. package/dist/assets/gitGraph-7Q5UKJZL-BGFRt2qs.js +1 -0
  58. package/dist/assets/gitGraphDiagram-UUTBAWPF-D4JoiOvg.js +106 -0
  59. package/dist/assets/graphlib-DGcD9J2L.js +1 -0
  60. package/dist/assets/index-Cow3qpoq.css +2 -0
  61. package/dist/assets/index-DUf7okYi.js +14 -0
  62. package/dist/assets/info-OMHHGYJF-DI6-Z9vh.js +1 -0
  63. package/dist/assets/infoDiagram-42DDH7IO-D1ZkeMBy.js +2 -0
  64. package/dist/assets/init-TPm5RB77.js +1 -0
  65. package/dist/assets/isArrayLikeObject-69BLnVNM.js +1 -0
  66. package/dist/assets/isEmpty-DUS28g5f.js +1 -0
  67. package/dist/assets/ishikawaDiagram-UXIWVN3A-Dv8hzjZB.js +70 -0
  68. package/dist/assets/journeyDiagram-VCZTEJTY-COeB7F5r.js +139 -0
  69. package/dist/assets/kanban-definition-6JOO6SKY-BbYmxCYU.js +89 -0
  70. package/dist/assets/katex-5SGEXwpi.js +261 -0
  71. package/dist/assets/line-_v2NGEdn.js +1 -0
  72. package/dist/assets/linear-CXMqTN8N.js +1 -0
  73. package/dist/assets/mermaid-config-C8a4L22x.js +1 -0
  74. package/dist/assets/mermaid-parser.core-CFmphzPP.js +4 -0
  75. package/dist/assets/mermaid.core-DnHAupTp.js +11 -0
  76. package/dist/assets/mindmap-definition-QFDTVHPH-D7_lIep7.js +96 -0
  77. package/dist/assets/ordinal-D7l-8DAO.js +1 -0
  78. package/dist/assets/packet-4T2RLAQJ-DidW3JFc.js +1 -0
  79. package/dist/assets/path-BVpCanzE.js +1 -0
  80. package/dist/assets/pie-ZZUOXDRM-Bff2e5hg.js +1 -0
  81. package/dist/assets/pieDiagram-DEJITSTG-DDvYHCT_.js +30 -0
  82. package/dist/assets/quadrantDiagram-34T5L4WZ-DcLcIrdi.js +7 -0
  83. package/dist/assets/radar-PYXPWWZC-CsdZBH3M.js +1 -0
  84. package/dist/assets/requirementDiagram-MS252O5E-DLX6ld7D.js +84 -0
  85. package/dist/assets/rough.esm-BoTisKeL.js +1 -0
  86. package/dist/assets/sankeyDiagram-XADWPNL6-D-1GtsHM.js +10 -0
  87. package/dist/assets/sequenceDiagram-FGHM5R23-Bwxs0YQg.js +157 -0
  88. package/dist/assets/src-CrmkjRpa.js +1 -0
  89. package/dist/assets/stateDiagram-FHFEXIEX-DW7rOcnQ.js +1 -0
  90. package/dist/assets/stateDiagram-v2-QKLJ7IA2-Jm-24vQ2.js +1 -0
  91. package/dist/assets/timeline-definition-GMOUNBTQ-DVdHyzxS.js +120 -0
  92. package/dist/assets/treeView-SZITEDCU-DPKseaET.js +1 -0
  93. package/dist/assets/treemap-W4RFUUIX-DH-7GZe_.js +1 -0
  94. package/dist/assets/vennDiagram-DHZGUBPP-DJaC6xmI.js +34 -0
  95. package/dist/assets/wardley-RL74JXVD-AgyXyBN5.js +1 -0
  96. package/dist/assets/wardleyDiagram-NUSXRM2D-CTKERPKv.js +20 -0
  97. package/dist/assets/xychartDiagram-5P7HB3ND-BuExiLXc.js +7 -0
  98. package/{index.html → dist/index.html} +2 -1
  99. package/dist/index.js +2539 -0
  100. package/package.json +11 -1
  101. package/.agents/skills/remotion-best-practices/SKILL.md +0 -61
  102. package/.agents/skills/remotion-best-practices/rules/3d.md +0 -86
  103. package/.agents/skills/remotion-best-practices/rules/animations.md +0 -27
  104. package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +0 -178
  105. package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +0 -100
  106. package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +0 -108
  107. package/.agents/skills/remotion-best-practices/rules/assets.md +0 -78
  108. package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +0 -198
  109. package/.agents/skills/remotion-best-practices/rules/audio.md +0 -169
  110. package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +0 -134
  111. package/.agents/skills/remotion-best-practices/rules/can-decode.md +0 -75
  112. package/.agents/skills/remotion-best-practices/rules/charts.md +0 -120
  113. package/.agents/skills/remotion-best-practices/rules/compositions.md +0 -154
  114. package/.agents/skills/remotion-best-practices/rules/display-captions.md +0 -184
  115. package/.agents/skills/remotion-best-practices/rules/extract-frames.md +0 -229
  116. package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +0 -38
  117. package/.agents/skills/remotion-best-practices/rules/fonts.md +0 -152
  118. package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +0 -58
  119. package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +0 -68
  120. package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +0 -60
  121. package/.agents/skills/remotion-best-practices/rules/gifs.md +0 -141
  122. package/.agents/skills/remotion-best-practices/rules/images.md +0 -134
  123. package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +0 -69
  124. package/.agents/skills/remotion-best-practices/rules/light-leaks.md +0 -73
  125. package/.agents/skills/remotion-best-practices/rules/lottie.md +0 -70
  126. package/.agents/skills/remotion-best-practices/rules/maps.md +0 -412
  127. package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +0 -34
  128. package/.agents/skills/remotion-best-practices/rules/measuring-text.md +0 -140
  129. package/.agents/skills/remotion-best-practices/rules/parameters.md +0 -109
  130. package/.agents/skills/remotion-best-practices/rules/sequencing.md +0 -118
  131. package/.agents/skills/remotion-best-practices/rules/sfx.md +0 -26
  132. package/.agents/skills/remotion-best-practices/rules/subtitles.md +0 -36
  133. package/.agents/skills/remotion-best-practices/rules/tailwind.md +0 -11
  134. package/.agents/skills/remotion-best-practices/rules/text-animations.md +0 -20
  135. package/.agents/skills/remotion-best-practices/rules/timing.md +0 -179
  136. package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +0 -70
  137. package/.agents/skills/remotion-best-practices/rules/transitions.md +0 -197
  138. package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +0 -106
  139. package/.agents/skills/remotion-best-practices/rules/trimming.md +0 -51
  140. package/.agents/skills/remotion-best-practices/rules/videos.md +0 -171
  141. package/.agents/skills/remotion-best-practices/rules/voiceover.md +0 -99
  142. package/.agents/skills/simple/SKILL.md +0 -52
  143. package/.agents/skills/vercel-react-best-practices/AGENTS.md +0 -3254
  144. package/.agents/skills/vercel-react-best-practices/README.md +0 -123
  145. package/.agents/skills/vercel-react-best-practices/SKILL.md +0 -141
  146. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -55
  147. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +0 -42
  148. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -39
  149. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -38
  150. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -80
  151. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -51
  152. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +0 -28
  153. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -99
  154. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -59
  155. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -31
  156. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -49
  157. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -35
  158. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -50
  159. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -74
  160. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -71
  161. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -48
  162. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -56
  163. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -107
  164. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -80
  165. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -28
  166. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -70
  167. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -32
  168. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -50
  169. package/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +0 -60
  170. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -45
  171. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -37
  172. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -49
  173. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -82
  174. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -24
  175. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -57
  176. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -26
  177. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -47
  178. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -40
  179. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -38
  180. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -46
  181. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -82
  182. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +0 -30
  183. package/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +0 -85
  184. package/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +0 -68
  185. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -28
  186. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +0 -75
  187. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -39
  188. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -45
  189. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +0 -40
  190. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -29
  191. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -74
  192. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -58
  193. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +0 -38
  194. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -44
  195. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +0 -45
  196. package/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +0 -82
  197. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -35
  198. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -40
  199. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +0 -73
  200. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -73
  201. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -96
  202. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -41
  203. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -76
  204. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -65
  205. package/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +0 -142
  206. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -83
  207. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +0 -38
  208. package/.claude/CLAUDE.md +0 -184
  209. package/.claude/commands/review.md +0 -120
  210. package/.claude/commands/sync-docs.md +0 -71
  211. package/.claude/roadmap.md +0 -121
  212. package/.claude/rules/style-guide.md +0 -830
  213. package/.claude/settings.json +0 -18
  214. package/.claude/user-stories.md +0 -333
  215. package/AGENTS.md +0 -68
  216. package/Makefile +0 -32
  217. package/biome.json +0 -79
  218. package/bun.lock +0 -854
  219. package/bunfig.toml +0 -2
  220. package/docs/design.md +0 -563
  221. package/docs/perf-baseline.md +0 -130
  222. package/docs/plans/2026-03-13-client-mode-design.md +0 -86
  223. package/docs/plans/2026-03-13-client-mode-plan.md +0 -605
  224. package/docs/plans/2026-03-13-keyboard-shortcuts-design.md +0 -129
  225. package/docs/plans/2026-03-13-keyboard-shortcuts-plan.md +0 -1471
  226. package/docs/plans/2026-03-13-multi-document-design.md +0 -183
  227. package/docs/plans/2026-03-13-performance-benchmarks-design.md +0 -121
  228. package/docs/superpowers/plans/2026-03-26-surgical-pruning.md +0 -1176
  229. package/docs/superpowers/specs/2026-03-27-go-server-rewrite-design.md +0 -284
  230. package/e2e/comments.spec.ts +0 -81
  231. package/e2e/document-load.spec.ts +0 -32
  232. package/e2e/export.spec.ts +0 -58
  233. package/e2e/fixtures/sample.md +0 -7
  234. package/e2e/perf/add-comment.spec.ts +0 -116
  235. package/e2e/perf/fixtures/generate.ts +0 -327
  236. package/e2e/perf/initial-load.spec.ts +0 -49
  237. package/e2e/perf/perf.setup.ts +0 -23
  238. package/e2e/perf/perf.teardown.ts +0 -9
  239. package/e2e/perf/screenshot-final.png +0 -0
  240. package/e2e/perf/scroll.spec.ts +0 -39
  241. package/e2e/perf/tab-switch.spec.ts +0 -69
  242. package/e2e/perf/text-selection.spec.ts +0 -119
  243. package/e2e/perf/utils/metrics.ts +0 -350
  244. package/e2e/perf/utils/perf-cli.ts +0 -86
  245. package/e2e/persistence-file.spec.ts +0 -357
  246. package/e2e/utils/cli.ts +0 -84
  247. package/e2e/utils/selection.ts +0 -79
  248. package/go/cmd/readit/main.go +0 -416
  249. package/go/go.mod +0 -20
  250. package/go/go.sum +0 -41
  251. package/go/internal/server/anchor.go +0 -302
  252. package/go/internal/server/anchor_test.go +0 -111
  253. package/go/internal/server/comments.go +0 -390
  254. package/go/internal/server/documents.go +0 -113
  255. package/go/internal/server/embed.go +0 -17
  256. package/go/internal/server/headings.go +0 -33
  257. package/go/internal/server/headings_test.go +0 -75
  258. package/go/internal/server/htmltext.go +0 -123
  259. package/go/internal/server/markdown.go +0 -157
  260. package/go/internal/server/markdown_bench_test.go +0 -42
  261. package/go/internal/server/markdown_test.go +0 -79
  262. package/go/internal/server/server.go +0 -453
  263. package/go/internal/server/server_bench_test.go +0 -122
  264. package/go/internal/server/settings.go +0 -110
  265. package/go/internal/server/sse.go +0 -140
  266. package/go/internal/server/storage.go +0 -275
  267. package/go/internal/server/storage_test.go +0 -152
  268. package/go/internal/server/template.go +0 -66
  269. package/go/internal/server/types.go +0 -101
  270. package/go/internal/server/watcher.go +0 -74
  271. package/lefthook.yml +0 -8
  272. package/nvim-readit/lua/readit/health.lua +0 -64
  273. package/nvim-readit/lua/readit/init.lua +0 -463
  274. package/nvim-readit/plugin/readit.lua +0 -19
  275. package/playwright.config.ts +0 -34
  276. package/skills-lock.json +0 -20
  277. package/src/App.svelte +0 -890
  278. package/src/cli.ts +0 -881
  279. package/src/components/ActionsMenu.svelte +0 -95
  280. package/src/components/CommentBadge.svelte +0 -67
  281. package/src/components/CommentErrorBanner.svelte +0 -33
  282. package/src/components/CommentInput.svelte +0 -75
  283. package/src/components/CommentListItem.svelte +0 -95
  284. package/src/components/CommentManager.svelte +0 -129
  285. package/src/components/CommentNav.svelte +0 -109
  286. package/src/components/DocumentViewer.svelte +0 -233
  287. package/src/components/FloatingComment.svelte +0 -107
  288. package/src/components/Header.svelte +0 -76
  289. package/src/components/InlineEditor.svelte +0 -72
  290. package/src/components/MarginNote.svelte +0 -167
  291. package/src/components/MarginNotesContainer.svelte +0 -33
  292. package/src/components/MermaidEnhancer.svelte +0 -218
  293. package/src/components/MermaidModal.svelte +0 -67
  294. package/src/components/RawModal.svelte +0 -126
  295. package/src/components/ReanchorConfirm.svelte +0 -30
  296. package/src/components/SettingsModal.svelte +0 -220
  297. package/src/components/ShortcutCapture.svelte +0 -82
  298. package/src/components/ShortcutList.svelte +0 -145
  299. package/src/components/TabBar.svelte +0 -52
  300. package/src/components/TableOfContents.svelte +0 -125
  301. package/src/components/ui/ActionLink.svelte +0 -40
  302. package/src/components/ui/Button.svelte +0 -53
  303. package/src/components/ui/Dialog.svelte +0 -97
  304. package/src/components/ui/DropdownMenu.svelte +0 -85
  305. package/src/components/ui/DropdownMenuItem.svelte +0 -38
  306. package/src/components/ui/DropdownMenuSeparator.svelte +0 -11
  307. package/src/components/ui/Text.svelte +0 -42
  308. package/src/env.d.ts +0 -6
  309. package/src/index.css +0 -859
  310. package/src/lib/__fixtures__/bench-data.ts +0 -114
  311. package/src/lib/anchor.bench.ts +0 -91
  312. package/src/lib/anchor.test.ts +0 -527
  313. package/src/lib/anchor.ts +0 -381
  314. package/src/lib/comment-storage.bench.ts +0 -49
  315. package/src/lib/comment-storage.test.ts +0 -694
  316. package/src/lib/comment-storage.ts +0 -226
  317. package/src/lib/export.bench.ts +0 -21
  318. package/src/lib/export.ts +0 -36
  319. package/src/lib/fetch-or-throw.test.ts +0 -59
  320. package/src/lib/fetch-or-throw.ts +0 -12
  321. package/src/lib/headings.test.ts +0 -103
  322. package/src/lib/headings.ts +0 -44
  323. package/src/lib/highlight/core.test.ts +0 -93
  324. package/src/lib/highlight/dom.ts +0 -187
  325. package/src/lib/highlight/highlight-registry.ts +0 -221
  326. package/src/lib/highlight/highlight.bench.ts +0 -92
  327. package/src/lib/highlight/highlighter.ts +0 -247
  328. package/src/lib/highlight/resolver.ts +0 -38
  329. package/src/lib/highlight/types.ts +0 -17
  330. package/src/lib/html-text.test.ts +0 -162
  331. package/src/lib/html-text.ts +0 -161
  332. package/src/lib/i18n/en.ts +0 -124
  333. package/src/lib/i18n/index.ts +0 -3
  334. package/src/lib/i18n/ja.ts +0 -126
  335. package/src/lib/i18n/translations.ts +0 -27
  336. package/src/lib/i18n/types.ts +0 -130
  337. package/src/lib/key-lock.test.ts +0 -104
  338. package/src/lib/key-lock.ts +0 -23
  339. package/src/lib/margin-layout.bench.ts +0 -61
  340. package/src/lib/margin-layout.ts +0 -71
  341. package/src/lib/markdown-renderer.test.ts +0 -154
  342. package/src/lib/markdown-renderer.ts +0 -178
  343. package/src/lib/mermaid-config.ts +0 -38
  344. package/src/lib/mermaid-renderer.ts +0 -162
  345. package/src/lib/mermaid-worker.ts +0 -60
  346. package/src/lib/positions.ts +0 -157
  347. package/src/lib/shortcut-registry.ts +0 -244
  348. package/src/lib/utils.ts +0 -15
  349. package/src/main.ts +0 -16
  350. package/src/schema.ts +0 -92
  351. package/src/server.ts +0 -1216
  352. package/src/stores/app.svelte.ts +0 -231
  353. package/src/stores/locale.svelte.ts +0 -46
  354. package/src/stores/settings.svelte.ts +0 -90
  355. package/src/stores/shortcuts.svelte.ts +0 -104
  356. package/src/stores/ui.svelte.ts +0 -12
  357. package/src/template.ts +0 -104
  358. package/src/test-setup.ts +0 -48
  359. package/svelte.config.js +0 -5
  360. package/test.md +0 -74
  361. package/tsconfig.cli.json +0 -12
  362. package/tsconfig.json +0 -20
  363. package/vite.config.ts +0 -47
  364. package/vitest.config.ts +0 -15
  365. package/vscode-readit/.mcp.json +0 -7
  366. package/vscode-readit/.vscodeignore +0 -7
  367. package/vscode-readit/bun.lock +0 -78
  368. package/vscode-readit/icon.svg +0 -10
  369. package/vscode-readit/package.json +0 -110
  370. package/vscode-readit/src/extension.ts +0 -117
  371. package/vscode-readit/src/server-manager.ts +0 -272
  372. package/vscode-readit/src/webview-provider.ts +0 -204
  373. package/vscode-readit/tsconfig.json +0 -20
@@ -1,157 +0,0 @@
1
- import type { Highlighter } from "./highlight/highlighter";
2
- import { resolveMarginNotePositions } from "./margin-layout";
3
-
4
- type Listener = () => void;
5
-
6
- export class Positions {
7
- private relative = new Map<string, number>();
8
- private absolute = new Map<string, number>();
9
- private snapshot: Record<string, number> = {};
10
- private notes = new Map<string, HTMLElement>();
11
- private ids: string[] = [];
12
- private pendingTop: number | undefined;
13
- private listeners = new Set<Listener>();
14
- private root: HTMLElement | null = null;
15
- private container: HTMLElement | null = null;
16
- private highlighter: Highlighter | null = null;
17
- private resizeRaf: number | null = null;
18
- private cacheRaf: number | null = null;
19
- private unsubCache: (() => void) | null = null;
20
-
21
- attach(root: HTMLElement, container: HTMLElement, highlighter: Highlighter) {
22
- this.root = root;
23
- this.container = container;
24
- this.highlighter = highlighter;
25
- window.addEventListener("resize", this.onResize);
26
-
27
- this.unsubCache = highlighter.onCacheInvalidated(() => {
28
- if (this.cacheRaf !== null) return;
29
- this.cacheRaf = requestAnimationFrame(() => {
30
- this.cacheRaf = null;
31
- this.cache();
32
- });
33
- });
34
- }
35
-
36
- detach() {
37
- window.removeEventListener("resize", this.onResize);
38
- if (this.resizeRaf !== null) cancelAnimationFrame(this.resizeRaf);
39
- if (this.cacheRaf !== null) cancelAnimationFrame(this.cacheRaf);
40
- this.resizeRaf = null;
41
- this.cacheRaf = null;
42
- this.unsubCache?.();
43
- this.unsubCache = null;
44
- this.root = null;
45
- this.container = null;
46
- this.highlighter = null;
47
- }
48
-
49
- cache() {
50
- if (!this.root || !this.container || !this.highlighter) return;
51
-
52
- const highlightedIds = this.highlighter.getHighlightedIds();
53
- if (highlightedIds.length === 0) return;
54
-
55
- const ref = this.container.getBoundingClientRect();
56
- const scrollY = window.scrollY;
57
-
58
- this.relative.clear();
59
- this.absolute.clear();
60
-
61
- const positions = this.highlighter.getPositions(ref);
62
- for (const [id, relTop] of positions) {
63
- this.relative.set(id, relTop);
64
- this.absolute.set(id, relTop + ref.top + scrollY);
65
- }
66
-
67
- const snap: Record<string, number> = {};
68
- for (const [id, top] of this.absolute) snap[id] = top;
69
- this.snapshot = snap;
70
-
71
- this.apply();
72
- this.notify();
73
- this.exposeReady();
74
- }
75
-
76
- setIds(ids: string[]) {
77
- this.ids = ids;
78
- }
79
-
80
- setPending(top: number | undefined) {
81
- if (this.pendingTop === top) return;
82
- this.pendingTop = top;
83
- this.apply();
84
- }
85
-
86
- register(id: string, el: HTMLElement) {
87
- this.notes.set(id, el);
88
- const top = this.resolve().get(id);
89
- if (top !== undefined) {
90
- el.style.top = `${top}px`;
91
- el.style.visibility = "visible";
92
- } else {
93
- el.style.visibility = "hidden";
94
- }
95
- }
96
-
97
- unregister(id: string) {
98
- this.notes.delete(id);
99
- }
100
-
101
- getAbsolute(): Record<string, number> {
102
- return this.snapshot;
103
- }
104
-
105
- subscribe(fn: Listener): () => void {
106
- this.listeners.add(fn);
107
- return () => this.listeners.delete(fn);
108
- }
109
-
110
- dispose() {
111
- this.detach();
112
- this.relative.clear();
113
- this.absolute.clear();
114
- this.snapshot = {};
115
- this.notes.clear();
116
- this.listeners.clear();
117
- this.ids = [];
118
- }
119
-
120
- private resolve(): Map<string, number> {
121
- const pos: Record<string, number> = {};
122
- for (const [id, top] of this.relative) pos[id] = top;
123
- return resolveMarginNotePositions(this.ids, pos, this.pendingTop);
124
- }
125
-
126
- private apply() {
127
- const resolved = this.resolve();
128
- for (const [id, el] of this.notes) {
129
- const top = resolved.get(id);
130
- if (top !== undefined) {
131
- el.style.top = `${top}px`;
132
- el.style.visibility = "visible";
133
- } else {
134
- el.style.visibility = "hidden";
135
- }
136
- }
137
- }
138
-
139
- private onResize = () => {
140
- if (this.resizeRaf !== null) return;
141
- this.resizeRaf = requestAnimationFrame(() => {
142
- this.resizeRaf = null;
143
- this.cache();
144
- });
145
- };
146
-
147
- private notify() {
148
- for (const fn of this.listeners) fn();
149
- }
150
-
151
- private exposeReady() {
152
- if (typeof window !== "undefined") {
153
- (window as unknown as Record<string, unknown>).__readitPositionsReady =
154
- performance.now();
155
- }
156
- }
157
- }
@@ -1,244 +0,0 @@
1
- import type { KeybindingOverride, ShortcutBinding } from "../schema";
2
- import type { TranslationKey } from "./i18n/types";
3
-
4
- const IS_MAC =
5
- typeof navigator !== "undefined" && navigator.platform.includes("Mac");
6
-
7
- export const ShortcutActions = {
8
- COPY_ALL: "copyAll",
9
- COPY_ALL_RAW: "copyAllRaw",
10
- NAVIGATE_NEXT: "navigateNext",
11
- NAVIGATE_PREVIOUS: "navigatePrevious",
12
- COPY_SELECTION_RAW: "copySelectionRaw",
13
- COPY_SELECTION_LLM: "copySelectionLLM",
14
- CLEAR_SELECTION: "clearSelection",
15
- } as const;
16
-
17
- export type ShortcutAction =
18
- (typeof ShortcutActions)[keyof typeof ShortcutActions];
19
-
20
- export interface ShortcutDefinition {
21
- id: ShortcutAction;
22
- label: TranslationKey;
23
- description: TranslationKey;
24
- defaultBinding: ShortcutBinding;
25
- binding: ShortcutBinding;
26
- enabled: boolean;
27
- }
28
-
29
- export const DEFAULT_SHORTCUTS: ShortcutDefinition[] = [
30
- {
31
- id: ShortcutActions.COPY_ALL,
32
- label: "shortcut.copyAll.label",
33
- description: "shortcut.copyAll.description",
34
- defaultBinding: { key: "c", alt: true },
35
- binding: { key: "c", alt: true },
36
- enabled: true,
37
- },
38
- {
39
- id: ShortcutActions.COPY_ALL_RAW,
40
- label: "shortcut.copyAllRaw.label",
41
- description: "shortcut.copyAllRaw.description",
42
- defaultBinding: { key: "c", alt: true, shift: true },
43
- binding: { key: "c", alt: true, shift: true },
44
- enabled: true,
45
- },
46
- {
47
- id: ShortcutActions.NAVIGATE_NEXT,
48
- label: "shortcut.navigateNext.label",
49
- description: "shortcut.navigateNext.description",
50
- defaultBinding: { key: "ArrowDown", alt: true },
51
- binding: { key: "ArrowDown", alt: true },
52
- enabled: true,
53
- },
54
- {
55
- id: ShortcutActions.NAVIGATE_PREVIOUS,
56
- label: "shortcut.navigatePrevious.label",
57
- description: "shortcut.navigatePrevious.description",
58
- defaultBinding: { key: "ArrowUp", alt: true },
59
- binding: { key: "ArrowUp", alt: true },
60
- enabled: true,
61
- },
62
- {
63
- id: ShortcutActions.COPY_SELECTION_RAW,
64
- label: "shortcut.copySelectionRaw.label",
65
- description: "shortcut.copySelectionRaw.description",
66
- defaultBinding: IS_MAC
67
- ? { key: "c", meta: true, shift: true }
68
- : { key: "c", ctrl: true, shift: true },
69
- binding: IS_MAC
70
- ? { key: "c", meta: true, shift: true }
71
- : { key: "c", ctrl: true, shift: true },
72
- enabled: true,
73
- },
74
- {
75
- id: ShortcutActions.COPY_SELECTION_LLM,
76
- label: "shortcut.copySelectionLLM.label",
77
- description: "shortcut.copySelectionLLM.description",
78
- defaultBinding: IS_MAC
79
- ? { key: "c", meta: true, alt: true }
80
- : { key: "c", ctrl: true, alt: true },
81
- binding: IS_MAC
82
- ? { key: "c", meta: true, alt: true }
83
- : { key: "c", ctrl: true, alt: true },
84
- enabled: true,
85
- },
86
- {
87
- id: ShortcutActions.CLEAR_SELECTION,
88
- label: "shortcut.clearSelection.label",
89
- description: "shortcut.clearSelection.description",
90
- defaultBinding: { key: "Escape" },
91
- binding: { key: "Escape" },
92
- enabled: true,
93
- },
94
- ];
95
-
96
- export function matchesBinding(
97
- event: KeyboardEvent,
98
- binding: ShortcutBinding,
99
- ): boolean {
100
- if (event.key.toLowerCase() !== binding.key.toLowerCase()) return false;
101
- if (!!binding.alt !== event.altKey) return false;
102
- if (!!binding.ctrl !== event.ctrlKey) return false;
103
- if (!!binding.meta !== event.metaKey) return false;
104
- if (!!binding.shift !== event.shiftKey) return false;
105
- return true;
106
- }
107
-
108
- export function formatBinding(
109
- binding: ShortcutBinding,
110
- isMac: boolean,
111
- ): string {
112
- const parts: string[] = [];
113
-
114
- if (binding.ctrl) {
115
- parts.push(isMac ? "\u2303" : "Ctrl");
116
- }
117
- if (binding.meta) {
118
- parts.push(isMac ? "\u2318" : "Meta");
119
- }
120
- if (binding.alt) {
121
- parts.push(isMac ? "\u2325" : "Alt");
122
- }
123
- if (binding.shift) {
124
- parts.push(isMac ? "\u21E7" : "Shift");
125
- }
126
-
127
- const keyDisplay = KEY_DISPLAY_MAP[binding.key] ?? binding.key.toUpperCase();
128
- parts.push(keyDisplay);
129
-
130
- return parts.join(isMac ? "" : "+");
131
- }
132
-
133
- const KEY_DISPLAY_MAP: Record<string, string> = {
134
- ArrowUp: "\u2191",
135
- ArrowDown: "\u2193",
136
- ArrowLeft: "\u2190",
137
- ArrowRight: "\u2192",
138
- Escape: "Esc",
139
- Enter: "\u21B5",
140
- Backspace: "\u232B",
141
- Delete: "\u2326",
142
- Tab: "\u21E5",
143
- " ": "Space",
144
- };
145
-
146
- export function resolveShortcuts(
147
- overrides: KeybindingOverride[],
148
- ): ShortcutDefinition[] {
149
- return DEFAULT_SHORTCUTS.map((def) => {
150
- const override = overrides.find((o) => o.id === def.id);
151
- if (!override) return { ...def };
152
- return {
153
- ...def,
154
- binding: override.binding ?? def.defaultBinding,
155
- enabled: override.enabled,
156
- };
157
- });
158
- }
159
-
160
- // Mac-specific reserved bindings (Cmd+key)
161
- export const RESERVED_BINDINGS_MAC: ShortcutBinding[] = [
162
- { key: "r", meta: true },
163
- { key: "w", meta: true },
164
- { key: "t", meta: true },
165
- { key: "n", meta: true },
166
- { key: "q", meta: true },
167
- { key: "l", meta: true },
168
- { key: "a", meta: true },
169
- { key: "f", meta: true },
170
- { key: "p", meta: true },
171
- ];
172
-
173
- // Windows/Linux reserved bindings (Ctrl+key consumed by browser)
174
- export const RESERVED_BINDINGS_OTHER: ShortcutBinding[] = [
175
- { key: "r", ctrl: true },
176
- { key: "w", ctrl: true },
177
- { key: "t", ctrl: true },
178
- { key: "n", ctrl: true },
179
- { key: "l", ctrl: true },
180
- { key: "a", ctrl: true },
181
- { key: "f", ctrl: true },
182
- { key: "p", ctrl: true },
183
- ];
184
-
185
- export function isReservedBinding(
186
- binding: ShortcutBinding,
187
- isMac: boolean,
188
- ): boolean {
189
- const reserved = isMac ? RESERVED_BINDINGS_MAC : RESERVED_BINDINGS_OTHER;
190
- // Ignore shift when checking reserved bindings because browsers also
191
- // consume the shifted variants (e.g. Cmd+Shift+R, Ctrl+Shift+T).
192
- return reserved.some(
193
- (r) =>
194
- r.key.toLowerCase() === binding.key.toLowerCase() &&
195
- !!r.alt === !!binding.alt &&
196
- !!r.ctrl === !!binding.ctrl &&
197
- !!r.meta === !!binding.meta,
198
- );
199
- }
200
-
201
- export function eventToBinding(event: KeyboardEvent): ShortcutBinding {
202
- return {
203
- key: event.key,
204
- ...(event.altKey && { alt: true }),
205
- ...(event.ctrlKey && { ctrl: true }),
206
- ...(event.metaKey && { meta: true }),
207
- ...(event.shiftKey && { shift: true }),
208
- };
209
- }
210
-
211
- export function bindingsEqual(a: ShortcutBinding, b: ShortcutBinding): boolean {
212
- return (
213
- a.key.toLowerCase() === b.key.toLowerCase() &&
214
- !!a.alt === !!b.alt &&
215
- !!a.ctrl === !!b.ctrl &&
216
- !!a.meta === !!b.meta &&
217
- !!a.shift === !!b.shift
218
- );
219
- }
220
-
221
- export interface ShortcutGroup {
222
- label: TranslationKey;
223
- ids: ShortcutAction[];
224
- }
225
-
226
- export const SHORTCUT_GROUPS: ShortcutGroup[] = [
227
- {
228
- label: "shortcutGroup.copy",
229
- ids: [
230
- ShortcutActions.COPY_ALL,
231
- ShortcutActions.COPY_ALL_RAW,
232
- ShortcutActions.COPY_SELECTION_RAW,
233
- ShortcutActions.COPY_SELECTION_LLM,
234
- ],
235
- },
236
- {
237
- label: "shortcutGroup.navigate",
238
- ids: [ShortcutActions.NAVIGATE_NEXT, ShortcutActions.NAVIGATE_PREVIOUS],
239
- },
240
- {
241
- label: "shortcutGroup.other",
242
- ids: [ShortcutActions.CLEAR_SELECTION],
243
- },
244
- ];
package/src/lib/utils.ts DELETED
@@ -1,15 +0,0 @@
1
- import { type ClassValue, clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
3
-
4
- export function isMarkdownFile(filePath: string): boolean {
5
- return filePath.endsWith(".md") || filePath.endsWith(".markdown");
6
- }
7
-
8
- export function cn(...inputs: ReadonlyArray<ClassValue>) {
9
- return twMerge(clsx(inputs));
10
- }
11
-
12
- export function truncate(text: string, maxLength = 30): string {
13
- if (text.length <= maxLength) return text;
14
- return `${text.slice(0, maxLength)}…`;
15
- }
package/src/main.ts DELETED
@@ -1,16 +0,0 @@
1
- import { mount } from "svelte";
2
- import "./index.css";
3
- import App from "./App.svelte";
4
- import { hydrateFromInlineData } from "./stores/app.svelte";
5
- import { initSettings } from "./stores/settings.svelte";
6
- import { initShortcuts } from "./stores/shortcuts.svelte";
7
-
8
- const dataEl = document.getElementById("__readit");
9
- if (dataEl) {
10
- const data = JSON.parse(dataEl.textContent ?? "{}");
11
- hydrateFromInlineData(data);
12
- initSettings(data.settings);
13
- initShortcuts(data.settings?.keybindings ?? []);
14
- }
15
-
16
- mount(App, { target: document.getElementById("app")! });
package/src/schema.ts DELETED
@@ -1,92 +0,0 @@
1
- export const AnchorConfidences = {
2
- EXACT: "exact",
3
- NORMALIZED: "normalized",
4
- FUZZY: "fuzzy",
5
- UNRESOLVED: "unresolved",
6
- } as const;
7
-
8
- export type AnchorConfidence =
9
- (typeof AnchorConfidences)[keyof typeof AnchorConfidences];
10
-
11
- export type ResolvedAnchorConfidence = Exclude<
12
- AnchorConfidence,
13
- typeof AnchorConfidences.UNRESOLVED
14
- >;
15
-
16
- export interface Comment {
17
- id: string;
18
- selectedText: string;
19
- comment: string;
20
- createdAt?: string;
21
- startOffset: number;
22
- endOffset: number;
23
- lineHint?: string;
24
- anchorConfidence?: AnchorConfidence;
25
- anchorPrefix?: string;
26
- }
27
-
28
- export interface CommentFile {
29
- source: string;
30
- hash: string;
31
- version: number;
32
- comments: Comment[];
33
- }
34
-
35
- export interface Anchor {
36
- start: number;
37
- end: number;
38
- line: number;
39
- confidence: ResolvedAnchorConfidence;
40
- distance?: number;
41
- }
42
-
43
- export interface SelectionRange {
44
- startOffset: number;
45
- endOffset: number;
46
- }
47
-
48
- export interface Selection extends SelectionRange {
49
- text: string;
50
- }
51
-
52
- export interface Document {
53
- html: string;
54
- filePath: string;
55
- fileName: string;
56
- clean: boolean;
57
- }
58
-
59
- export const FontFamilies = {
60
- SERIF: "serif",
61
- SANS_SERIF: "sans-serif",
62
- } as const;
63
-
64
- export type FontFamily = (typeof FontFamilies)[keyof typeof FontFamilies];
65
-
66
- export const ThemeModes = {
67
- LIGHT: "light",
68
- DARK: "dark",
69
- SYSTEM: "system",
70
- } as const;
71
-
72
- export type ThemeMode = (typeof ThemeModes)[keyof typeof ThemeModes];
73
-
74
- export interface DocumentSettings {
75
- version: number;
76
- fontFamily: FontFamily;
77
- onboarded?: boolean;
78
- }
79
-
80
- export interface ShortcutBinding {
81
- key: string;
82
- alt?: boolean;
83
- ctrl?: boolean;
84
- meta?: boolean;
85
- shift?: boolean;
86
- }
87
-
88
- export interface KeybindingOverride {
89
- id: string;
90
- binding?: ShortcutBinding;
91
- enabled: boolean;
92
- }