@peaske7/readit 0.2.1 → 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 (367) 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 -118
  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 -881
  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 -218
  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/RawModal.svelte +0 -126
  293. package/src/components/ReanchorConfirm.svelte +0 -30
  294. package/src/components/SettingsModal.svelte +0 -220
  295. package/src/components/ShortcutCapture.svelte +0 -82
  296. package/src/components/ShortcutList.svelte +0 -145
  297. package/src/components/TabBar.svelte +0 -52
  298. package/src/components/TableOfContents.svelte +0 -125
  299. package/src/components/ui/ActionLink.svelte +0 -40
  300. package/src/components/ui/Button.svelte +0 -53
  301. package/src/components/ui/Dialog.svelte +0 -97
  302. package/src/components/ui/DropdownMenu.svelte +0 -85
  303. package/src/components/ui/DropdownMenuItem.svelte +0 -38
  304. package/src/components/ui/DropdownMenuSeparator.svelte +0 -11
  305. package/src/components/ui/Text.svelte +0 -42
  306. package/src/env.d.ts +0 -6
  307. package/src/index.css +0 -754
  308. package/src/lib/__fixtures__/bench-data.ts +0 -114
  309. package/src/lib/anchor.bench.ts +0 -91
  310. package/src/lib/anchor.test.ts +0 -527
  311. package/src/lib/anchor.ts +0 -381
  312. package/src/lib/comment-storage.bench.ts +0 -49
  313. package/src/lib/comment-storage.test.ts +0 -632
  314. package/src/lib/comment-storage.ts +0 -222
  315. package/src/lib/export.bench.ts +0 -21
  316. package/src/lib/export.ts +0 -36
  317. package/src/lib/headings.test.ts +0 -103
  318. package/src/lib/headings.ts +0 -44
  319. package/src/lib/highlight/core.test.ts +0 -93
  320. package/src/lib/highlight/dom.ts +0 -187
  321. package/src/lib/highlight/highlight-registry.ts +0 -221
  322. package/src/lib/highlight/highlight.bench.ts +0 -92
  323. package/src/lib/highlight/highlighter.ts +0 -247
  324. package/src/lib/highlight/resolver.ts +0 -38
  325. package/src/lib/highlight/types.ts +0 -17
  326. package/src/lib/html-text.test.ts +0 -162
  327. package/src/lib/html-text.ts +0 -161
  328. package/src/lib/i18n/en.ts +0 -116
  329. package/src/lib/i18n/index.ts +0 -3
  330. package/src/lib/i18n/ja.ts +0 -118
  331. package/src/lib/i18n/translations.ts +0 -27
  332. package/src/lib/i18n/types.ts +0 -122
  333. package/src/lib/margin-layout.bench.ts +0 -61
  334. package/src/lib/margin-layout.ts +0 -71
  335. package/src/lib/markdown-renderer.test.ts +0 -154
  336. package/src/lib/markdown-renderer.ts +0 -177
  337. package/src/lib/mermaid-config.ts +0 -38
  338. package/src/lib/mermaid-renderer.ts +0 -162
  339. package/src/lib/mermaid-worker.ts +0 -60
  340. package/src/lib/positions.ts +0 -157
  341. package/src/lib/shortcut-registry.ts +0 -244
  342. package/src/lib/utils.ts +0 -15
  343. package/src/main.ts +0 -16
  344. package/src/schema.ts +0 -92
  345. package/src/server.ts +0 -1220
  346. package/src/stores/app.svelte.ts +0 -231
  347. package/src/stores/locale.svelte.ts +0 -46
  348. package/src/stores/settings.svelte.ts +0 -90
  349. package/src/stores/shortcuts.svelte.ts +0 -104
  350. package/src/stores/ui.svelte.ts +0 -12
  351. package/src/template.ts +0 -104
  352. package/src/test-setup.ts +0 -48
  353. package/svelte.config.js +0 -5
  354. package/test.md +0 -74
  355. package/tsconfig.cli.json +0 -12
  356. package/tsconfig.json +0 -20
  357. package/vite.config.ts +0 -47
  358. package/vitest.config.ts +0 -15
  359. package/vscode-readit/.mcp.json +0 -7
  360. package/vscode-readit/.vscodeignore +0 -7
  361. package/vscode-readit/bun.lock +0 -78
  362. package/vscode-readit/icon.svg +0 -10
  363. package/vscode-readit/package.json +0 -110
  364. package/vscode-readit/src/extension.ts +0 -117
  365. package/vscode-readit/src/server-manager.ts +0 -272
  366. package/vscode-readit/src/webview-provider.ts +0 -204
  367. package/vscode-readit/tsconfig.json +0 -20
package/src/lib/anchor.ts DELETED
@@ -1,381 +0,0 @@
1
- import { type Anchor, AnchorConfidences } from "../schema";
2
- import { getLineNumber } from "./comment-storage";
3
-
4
- const DEFAULT_SEARCH_WINDOW = 500;
5
- const DEFAULT_FUZZY_THRESHOLD = 5;
6
- const MAX_FUZZY_TEXT_LENGTH = 200;
7
- const FUZZY_SEARCH_WINDOW = 2000;
8
-
9
- export interface FindAnchorParams {
10
- source: string;
11
- selectedText: string;
12
- lineHint: string;
13
- searchWindow?: number;
14
- }
15
-
16
- export interface FindAnchorFuzzyParams {
17
- source: string;
18
- selectedText: string;
19
- lineHint?: string;
20
- threshold?: number;
21
- }
22
-
23
- export interface FindAnchorWithFallbackParams {
24
- source: string;
25
- selectedText: string;
26
- lineHint: string;
27
- fuzzyThreshold?: number;
28
- }
29
-
30
- export function normalizeWhitespace(text: string): string {
31
- return text.replace(/\s+/g, " ").trim();
32
- }
33
-
34
- export function levenshteinDistance(
35
- a: string,
36
- b: string,
37
- maxDistance?: number,
38
- ): number {
39
- if (a.length > b.length) {
40
- [a, b] = [b, a];
41
- }
42
-
43
- const m = a.length;
44
- const n = b.length;
45
-
46
- if (m === 0) return n;
47
- if (n === 0) return m;
48
-
49
- if (maxDistance !== undefined && Math.abs(m - n) > maxDistance) {
50
- return Number.POSITIVE_INFINITY;
51
- }
52
-
53
- let prevRow = new Array(m + 1);
54
- let currRow = new Array(m + 1);
55
-
56
- for (let i = 0; i <= m; i++) {
57
- prevRow[i] = i;
58
- }
59
-
60
- for (let j = 1; j <= n; j++) {
61
- currRow[0] = j;
62
-
63
- let rowMin = currRow[0];
64
-
65
- for (let i = 1; i <= m; i++) {
66
- const cost = a[i - 1] === b[j - 1] ? 0 : 1;
67
- currRow[i] = Math.min(
68
- prevRow[i] + 1,
69
- currRow[i - 1] + 1,
70
- prevRow[i - 1] + cost,
71
- );
72
- rowMin = Math.min(rowMin, currRow[i]);
73
- }
74
-
75
- if (maxDistance !== undefined && rowMin > maxDistance) {
76
- return Number.POSITIVE_INFINITY;
77
- }
78
-
79
- [prevRow, currRow] = [currRow, prevRow];
80
- }
81
-
82
- return prevRow[m];
83
- }
84
-
85
- export function getLineOffset(content: string, lineNumber: number): number {
86
- if (lineNumber <= 1) return 0;
87
-
88
- let currentLine = 1;
89
-
90
- for (let i = 0; i < content.length; i++) {
91
- if (content[i] === "\n") {
92
- currentLine++;
93
- if (currentLine === lineNumber) {
94
- return i + 1;
95
- }
96
- }
97
- }
98
-
99
- return content.length;
100
- }
101
-
102
- export function parseLineHint(lineHint: string): {
103
- start: number;
104
- end: number;
105
- } {
106
- const match = lineHint.match(/^L(\d+)(?:-L?(\d+))?$/);
107
- if (!match) {
108
- return { start: 1, end: 1 };
109
- }
110
-
111
- const start = Number.parseInt(match[1], 10);
112
- const end = match[2] ? Number.parseInt(match[2], 10) : start;
113
- return { start, end };
114
- }
115
-
116
- export function findAnchor({
117
- source,
118
- selectedText,
119
- lineHint,
120
- searchWindow = DEFAULT_SEARCH_WINDOW,
121
- }: FindAnchorParams): Anchor | undefined {
122
- if (!selectedText || !source) {
123
- return undefined;
124
- }
125
- const { start: hintLine } = parseLineHint(lineHint);
126
-
127
- const lineOffset = getLineOffset(source, hintLine);
128
- const windowStart = Math.max(0, lineOffset - searchWindow);
129
- const windowEnd = Math.min(source.length, lineOffset + searchWindow);
130
- const window = source.slice(windowStart, windowEnd);
131
-
132
- const localIndex = window.indexOf(selectedText);
133
- if (localIndex !== -1) {
134
- const start = windowStart + localIndex;
135
- const end = start + selectedText.length;
136
- return {
137
- start,
138
- end,
139
- line: getLineNumber(source, start),
140
- confidence: AnchorConfidences.EXACT,
141
- };
142
- }
143
-
144
- const globalIndex = source.indexOf(selectedText);
145
- if (globalIndex !== -1) {
146
- return {
147
- start: globalIndex,
148
- end: globalIndex + selectedText.length,
149
- line: getLineNumber(source, globalIndex),
150
- confidence: AnchorConfidences.EXACT,
151
- };
152
- }
153
-
154
- return undefined;
155
- }
156
-
157
- function buildNormalizedPositionMap(text: string): {
158
- normalized: string;
159
- toOriginal: number[];
160
- } {
161
- const toOriginal: number[] = [];
162
- let normalized = "";
163
- let inWhitespace = false;
164
-
165
- for (let i = 0; i < text.length; i++) {
166
- const char = text[i];
167
- const isSpace = /\s/.test(char);
168
-
169
- if (isSpace) {
170
- if (!inWhitespace && normalized.length > 0) {
171
- normalized += " ";
172
- toOriginal.push(i);
173
- }
174
- inWhitespace = true;
175
- } else {
176
- normalized += char;
177
- toOriginal.push(i);
178
- inWhitespace = false;
179
- }
180
- }
181
-
182
- if (normalized.endsWith(" ")) {
183
- normalized = normalized.slice(0, -1);
184
- toOriginal.pop();
185
- }
186
-
187
- return { normalized, toOriginal };
188
- }
189
-
190
- export function findAnchorNormalized({
191
- source,
192
- selectedText,
193
- lineHint,
194
- searchWindow = FUZZY_SEARCH_WINDOW,
195
- }: FindAnchorParams): Anchor | undefined {
196
- if (!selectedText || !source) {
197
- return undefined;
198
- }
199
-
200
- const normalizedText = normalizeWhitespace(selectedText);
201
- if (!normalizedText) {
202
- return undefined;
203
- }
204
-
205
- if (normalizedText === selectedText) {
206
- return undefined;
207
- }
208
- const { start: hintLine } = parseLineHint(lineHint);
209
- const lineOffset = getLineOffset(source, hintLine);
210
-
211
- const windowStart = Math.max(0, lineOffset - searchWindow);
212
- const windowEnd = Math.min(source.length, lineOffset + searchWindow);
213
- const window = source.slice(windowStart, windowEnd);
214
-
215
- const { normalized: normalizedWindow, toOriginal } =
216
- buildNormalizedPositionMap(window);
217
-
218
- const normalizedIndex = normalizedWindow.indexOf(normalizedText);
219
- if (normalizedIndex !== -1) {
220
- const originalStart = windowStart + toOriginal[normalizedIndex];
221
- const endNormIndex = normalizedIndex + normalizedText.length - 1;
222
- let originalEnd = windowStart + toOriginal[endNormIndex] + 1;
223
- while (originalEnd < source.length && /\s/.test(source[originalEnd])) {
224
- originalEnd++;
225
- }
226
-
227
- return {
228
- start: originalStart,
229
- end: originalEnd,
230
- line: getLineNumber(source, originalStart),
231
- confidence: AnchorConfidences.NORMALIZED,
232
- };
233
- }
234
-
235
- const { normalized: fullNormalized, toOriginal: fullToOriginal } =
236
- buildNormalizedPositionMap(source);
237
- const globalIndex = fullNormalized.indexOf(normalizedText);
238
- if (globalIndex !== -1) {
239
- const originalStart = fullToOriginal[globalIndex];
240
- const endNormIndex = globalIndex + normalizedText.length - 1;
241
- let originalEnd = fullToOriginal[endNormIndex] + 1;
242
- while (originalEnd < source.length && /\s/.test(source[originalEnd])) {
243
- originalEnd++;
244
- }
245
-
246
- return {
247
- start: originalStart,
248
- end: originalEnd,
249
- line: getLineNumber(source, originalStart),
250
- confidence: AnchorConfidences.NORMALIZED,
251
- };
252
- }
253
-
254
- return undefined;
255
- }
256
-
257
- export function findAnchorFuzzy({
258
- source,
259
- selectedText,
260
- lineHint,
261
- threshold = DEFAULT_FUZZY_THRESHOLD,
262
- }: FindAnchorFuzzyParams): Anchor | undefined {
263
- if (!selectedText || !source) {
264
- return undefined;
265
- }
266
-
267
- const textLen = selectedText.length;
268
-
269
- if (textLen > MAX_FUZZY_TEXT_LENGTH) {
270
- return undefined;
271
- }
272
-
273
- let bestMatch: Anchor | undefined;
274
- let bestDistance = threshold + 1;
275
-
276
- let searchStart = 0;
277
- let searchEnd = source.length;
278
-
279
- if (lineHint) {
280
- const { start: hintLine } = parseLineHint(lineHint);
281
- const lineOffset = getLineOffset(source, hintLine);
282
- searchStart = Math.max(0, lineOffset - FUZZY_SEARCH_WINDOW);
283
- searchEnd = Math.min(source.length, lineOffset + FUZZY_SEARCH_WINDOW);
284
- }
285
-
286
- const minLen = Math.max(1, textLen - threshold);
287
- const maxLen = textLen + threshold;
288
-
289
- for (let len = minLen; len <= maxLen; len++) {
290
- for (let i = searchStart; i <= searchEnd - len; i++) {
291
- const candidate = source.slice(i, i + len);
292
- const distance = levenshteinDistance(
293
- selectedText,
294
- candidate,
295
- bestDistance - 1,
296
- );
297
-
298
- if (distance < bestDistance) {
299
- bestDistance = distance;
300
- bestMatch = {
301
- start: i,
302
- end: i + len,
303
- line: getLineNumber(source, i),
304
- confidence: AnchorConfidences.FUZZY,
305
- distance,
306
- };
307
-
308
- if (distance === 0) {
309
- return bestMatch;
310
- }
311
- }
312
- }
313
- }
314
-
315
- return bestMatch;
316
- }
317
-
318
- export function findAnchorWithFallback({
319
- source,
320
- selectedText,
321
- lineHint,
322
- fuzzyThreshold,
323
- }: FindAnchorWithFallbackParams): Anchor | undefined {
324
- const exactMatch = findAnchor({ source, selectedText, lineHint });
325
- if (exactMatch) {
326
- return exactMatch;
327
- }
328
-
329
- const normalizedMatch = findAnchorNormalized({
330
- source,
331
- selectedText,
332
- lineHint,
333
- });
334
- if (normalizedMatch) {
335
- return normalizedMatch;
336
- }
337
-
338
- return findAnchorFuzzy({
339
- source,
340
- selectedText,
341
- lineHint,
342
- threshold: fuzzyThreshold,
343
- });
344
- }
345
-
346
- export function findClosestOccurrence({
347
- source,
348
- selectedText,
349
- lineHint,
350
- }: Omit<FindAnchorParams, "searchWindow">): Anchor | undefined {
351
- if (!selectedText || !source) {
352
- return undefined;
353
- }
354
-
355
- const { start: hintLine } = parseLineHint(lineHint);
356
- const targetOffset = getLineOffset(source, hintLine);
357
-
358
- let bestMatch: Anchor | undefined;
359
- let bestDistance = Number.POSITIVE_INFINITY;
360
- let index = 0;
361
-
362
- while (true) {
363
- const foundIndex = source.indexOf(selectedText, index);
364
- if (foundIndex === -1) break;
365
-
366
- const distance = Math.abs(foundIndex - targetOffset);
367
- if (distance < bestDistance) {
368
- bestDistance = distance;
369
- bestMatch = {
370
- start: foundIndex,
371
- end: foundIndex + selectedText.length,
372
- line: getLineNumber(source, foundIndex),
373
- confidence: AnchorConfidences.EXACT,
374
- };
375
- }
376
-
377
- index = foundIndex + 1;
378
- }
379
-
380
- return bestMatch;
381
- }
@@ -1,49 +0,0 @@
1
- import { bench, describe } from "vitest";
2
- import {
3
- COMMENT_FILE_LARGE,
4
- COMMENT_FILE_MEDIUM,
5
- COMMENT_FILE_OBJ_LARGE,
6
- COMMENT_FILE_OBJ_MEDIUM,
7
- COMMENT_FILE_OBJ_SMALL,
8
- COMMENT_FILE_SMALL,
9
- LARGE_DOC,
10
- } from "./__fixtures__/bench-data";
11
- import {
12
- computeHash,
13
- parseCommentFile,
14
- serializeComments,
15
- } from "./comment-storage";
16
-
17
- describe("parseCommentFile", () => {
18
- bench("1 comment", () => {
19
- parseCommentFile(COMMENT_FILE_SMALL);
20
- });
21
-
22
- bench("10 comments", () => {
23
- parseCommentFile(COMMENT_FILE_MEDIUM);
24
- });
25
-
26
- bench("50 comments", () => {
27
- parseCommentFile(COMMENT_FILE_LARGE);
28
- });
29
- });
30
-
31
- describe("serializeComments", () => {
32
- bench("1 comment", () => {
33
- serializeComments(COMMENT_FILE_OBJ_SMALL);
34
- });
35
-
36
- bench("10 comments", () => {
37
- serializeComments(COMMENT_FILE_OBJ_MEDIUM);
38
- });
39
-
40
- bench("50 comments", () => {
41
- serializeComments(COMMENT_FILE_OBJ_LARGE);
42
- });
43
- });
44
-
45
- describe("computeHash", () => {
46
- bench("300-line document", () => {
47
- computeHash(LARGE_DOC);
48
- });
49
- });