@peaske7/readit 0.1.4 → 0.1.6

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 (322) hide show
  1. package/.agents/skills/remotion-best-practices/SKILL.md +61 -0
  2. package/.agents/skills/remotion-best-practices/rules/3d.md +86 -0
  3. package/.agents/skills/remotion-best-practices/rules/animations.md +27 -0
  4. package/.agents/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +178 -0
  5. package/.agents/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  6. package/.agents/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
  7. package/.agents/skills/remotion-best-practices/rules/assets.md +78 -0
  8. package/.agents/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  9. package/.agents/skills/remotion-best-practices/rules/audio.md +169 -0
  10. package/.agents/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  11. package/.agents/skills/remotion-best-practices/rules/can-decode.md +75 -0
  12. package/.agents/skills/remotion-best-practices/rules/charts.md +120 -0
  13. package/.agents/skills/remotion-best-practices/rules/compositions.md +154 -0
  14. package/.agents/skills/remotion-best-practices/rules/display-captions.md +184 -0
  15. package/.agents/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  16. package/.agents/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  17. package/.agents/skills/remotion-best-practices/rules/fonts.md +152 -0
  18. package/.agents/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  19. package/.agents/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  20. package/.agents/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  21. package/.agents/skills/remotion-best-practices/rules/gifs.md +141 -0
  22. package/.agents/skills/remotion-best-practices/rules/images.md +134 -0
  23. package/.agents/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  24. package/.agents/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  25. package/.agents/skills/remotion-best-practices/rules/lottie.md +70 -0
  26. package/.agents/skills/remotion-best-practices/rules/maps.md +412 -0
  27. package/.agents/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  28. package/.agents/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  29. package/.agents/skills/remotion-best-practices/rules/parameters.md +109 -0
  30. package/.agents/skills/remotion-best-practices/rules/sequencing.md +118 -0
  31. package/.agents/skills/remotion-best-practices/rules/sfx.md +26 -0
  32. package/.agents/skills/remotion-best-practices/rules/subtitles.md +36 -0
  33. package/.agents/skills/remotion-best-practices/rules/tailwind.md +11 -0
  34. package/.agents/skills/remotion-best-practices/rules/text-animations.md +20 -0
  35. package/.agents/skills/remotion-best-practices/rules/timing.md +179 -0
  36. package/.agents/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  37. package/.agents/skills/remotion-best-practices/rules/transitions.md +197 -0
  38. package/.agents/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  39. package/.agents/skills/remotion-best-practices/rules/trimming.md +51 -0
  40. package/.agents/skills/remotion-best-practices/rules/videos.md +171 -0
  41. package/.agents/skills/remotion-best-practices/rules/voiceover.md +99 -0
  42. package/.agents/skills/simple/SKILL.md +52 -0
  43. package/.agents/skills/vercel-react-best-practices/AGENTS.md +3254 -0
  44. package/.agents/skills/vercel-react-best-practices/README.md +123 -0
  45. package/.agents/skills/vercel-react-best-practices/SKILL.md +141 -0
  46. package/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  47. package/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  48. package/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  49. package/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  50. package/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
  51. package/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  52. package/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  53. package/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  54. package/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
  55. package/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  56. package/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  57. package/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  58. package/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  59. package/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  60. package/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  61. package/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  62. package/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  63. package/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  64. package/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  65. package/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  66. package/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  67. package/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  68. package/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  69. package/.agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  70. package/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  71. package/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  72. package/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  73. package/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  74. package/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  75. package/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  76. package/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  77. package/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  78. package/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  79. package/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  80. package/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  81. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  82. package/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  83. package/.agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  84. package/.agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  85. package/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  86. package/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  87. package/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  88. package/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  89. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  90. package/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  91. package/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  92. package/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  93. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  94. package/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  95. package/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  96. package/.agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  97. package/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  98. package/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  99. package/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  100. package/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  101. package/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  102. package/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  103. package/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  104. package/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  105. package/.agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
  106. package/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  107. package/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  108. package/.claude/CLAUDE.md +142 -0
  109. package/.claude/commands/review.md +120 -0
  110. package/.claude/commands/sync-docs.md +71 -0
  111. package/.claude/roadmap.md +98 -0
  112. package/.claude/rules/style-guide.md +830 -0
  113. package/.claude/settings.json +18 -0
  114. package/.claude/user-stories.md +248 -0
  115. package/AGENTS.md +64 -0
  116. package/README.md +7 -7
  117. package/biome.json +69 -0
  118. package/bun.lock +1124 -0
  119. package/docs/design.md +563 -0
  120. package/docs/plans/2026-03-13-client-mode-design.md +86 -0
  121. package/docs/plans/2026-03-13-client-mode-plan.md +605 -0
  122. package/docs/plans/2026-03-13-keyboard-shortcuts-design.md +129 -0
  123. package/docs/plans/2026-03-13-keyboard-shortcuts-plan.md +1471 -0
  124. package/docs/plans/2026-03-13-multi-document-design.md +183 -0
  125. package/docs/plans/2026-03-13-performance-benchmarks-design.md +121 -0
  126. package/e2e/comments.spec.ts +125 -0
  127. package/e2e/document-load.spec.ts +54 -0
  128. package/e2e/export.spec.ts +58 -0
  129. package/e2e/fixtures/sample.html +13 -0
  130. package/e2e/fixtures/sample.md +7 -0
  131. package/e2e/persistence-file.spec.ts +342 -0
  132. package/e2e/utils/cli.ts +84 -0
  133. package/e2e/utils/selection.ts +135 -0
  134. package/{dist/index.html → index.html} +8 -2
  135. package/lefthook.yml +8 -0
  136. package/package.json +17 -39
  137. package/playwright.config.ts +22 -0
  138. package/skills-lock.json +20 -0
  139. package/src/App.tsx +396 -0
  140. package/src/cli/index.ts +467 -0
  141. package/src/components/ActionsMenu.tsx +110 -0
  142. package/src/components/DocumentViewer/CodeBlock.tsx +83 -0
  143. package/src/components/DocumentViewer/DocumentViewer.tsx +257 -0
  144. package/src/components/DocumentViewer/IframeContainer.tsx +251 -0
  145. package/src/components/DocumentViewer/MermaidDiagram.tsx +137 -0
  146. package/src/components/DocumentViewer/index.ts +1 -0
  147. package/src/components/FloatingTOC.tsx +59 -0
  148. package/src/components/Header.tsx +63 -0
  149. package/src/components/InlineEditor.tsx +72 -0
  150. package/src/components/MarginNote.tsx +198 -0
  151. package/src/components/MarginNotes.tsx +50 -0
  152. package/src/components/RawModal.tsx +141 -0
  153. package/src/components/ReanchorConfirm.tsx +33 -0
  154. package/src/components/SettingsModal.tsx +221 -0
  155. package/src/components/ShortcutCapture.tsx +45 -0
  156. package/src/components/ShortcutList.tsx +157 -0
  157. package/src/components/TabBar.tsx +60 -0
  158. package/src/components/TableOfContents.tsx +108 -0
  159. package/src/components/comments/CommentBadge.tsx +43 -0
  160. package/src/components/comments/CommentInput.tsx +119 -0
  161. package/src/components/comments/CommentListItem.tsx +82 -0
  162. package/src/components/comments/CommentManager.tsx +106 -0
  163. package/src/components/comments/CommentMinimap.tsx +62 -0
  164. package/src/components/comments/CommentNav.tsx +104 -0
  165. package/src/components/ui/ActionBar.tsx +16 -0
  166. package/src/components/ui/ActionLink.tsx +32 -0
  167. package/src/components/ui/Button.tsx +55 -0
  168. package/src/components/ui/Dialog.tsx +156 -0
  169. package/src/components/ui/DropdownMenu.tsx +114 -0
  170. package/src/components/ui/SeparatorDot.tsx +9 -0
  171. package/src/components/ui/Text.tsx +54 -0
  172. package/src/contexts/CommentContext.tsx +222 -0
  173. package/src/contexts/LayoutContext.tsx +76 -0
  174. package/src/hooks/useClickOutside.ts +35 -0
  175. package/src/hooks/useClipboard.ts +79 -0
  176. package/src/hooks/useCommentNavigation.ts +130 -0
  177. package/src/hooks/useComments.ts +323 -0
  178. package/src/hooks/useDocument.ts +141 -0
  179. package/src/hooks/useFontPreference.ts +76 -0
  180. package/src/hooks/useHeadings.test.ts +159 -0
  181. package/src/hooks/useHeadings.ts +129 -0
  182. package/src/hooks/useKeybindings.ts +120 -0
  183. package/src/hooks/useKeyboardShortcuts.ts +63 -0
  184. package/src/hooks/useLayoutMode.ts +44 -0
  185. package/src/hooks/useReanchorMode.ts +33 -0
  186. package/src/hooks/useScrollMetrics.ts +56 -0
  187. package/src/hooks/useScrollSpy.ts +81 -0
  188. package/src/hooks/useTextSelection.ts +123 -0
  189. package/src/hooks/useThemePreference.ts +66 -0
  190. package/src/index.css +823 -0
  191. package/src/lib/__fixtures__/bench-data.ts +167 -0
  192. package/src/lib/anchor.bench.ts +112 -0
  193. package/src/lib/anchor.test.ts +531 -0
  194. package/src/lib/anchor.ts +465 -0
  195. package/src/lib/comment-storage.bench.ts +63 -0
  196. package/src/lib/comment-storage.test.ts +624 -0
  197. package/src/lib/comment-storage.ts +263 -0
  198. package/src/lib/context.bench.ts +41 -0
  199. package/src/lib/context.test.ts +224 -0
  200. package/src/lib/context.ts +193 -0
  201. package/src/lib/export.bench.ts +35 -0
  202. package/src/lib/export.ts +43 -0
  203. package/src/lib/highlight/colors.ts +37 -0
  204. package/src/lib/highlight/core.test.ts +98 -0
  205. package/src/lib/highlight/core.ts +54 -0
  206. package/src/lib/highlight/dom.ts +342 -0
  207. package/src/lib/highlight/highlighter.ts +427 -0
  208. package/src/lib/highlight/index.ts +23 -0
  209. package/src/lib/highlight/script-builder.ts +485 -0
  210. package/src/lib/highlight/types.ts +57 -0
  211. package/src/lib/html-processor.test.tsx +170 -0
  212. package/src/lib/html-processor.tsx +95 -0
  213. package/src/lib/layout-constants.ts +12 -0
  214. package/src/lib/margin-layout.bench.ts +28 -0
  215. package/src/lib/margin-layout.ts +100 -0
  216. package/src/lib/scroll.test.ts +118 -0
  217. package/src/lib/scroll.ts +47 -0
  218. package/src/lib/shortcut-registry.test.ts +173 -0
  219. package/src/lib/shortcut-registry.ts +209 -0
  220. package/src/lib/utils.test.ts +110 -0
  221. package/src/lib/utils.ts +61 -0
  222. package/src/main.tsx +10 -0
  223. package/src/server/index.ts +883 -0
  224. package/src/store/index.test.ts +220 -0
  225. package/src/store/index.ts +234 -0
  226. package/src/test-setup.ts +1 -0
  227. package/src/types/index.ts +115 -0
  228. package/test.md +74 -0
  229. package/tsconfig.cli.json +12 -0
  230. package/tsconfig.json +20 -0
  231. package/vite.config.ts +19 -0
  232. package/vitest.config.ts +15 -0
  233. package/dist/assets/_basePickBy-hOr-yGsE.js +0 -1
  234. package/dist/assets/_baseUniq-b7bzdUSn.js +0 -1
  235. package/dist/assets/arc-D65wG9gm.js +0 -1
  236. package/dist/assets/architecture-PBZL5I3N-DBa6CAv_.js +0 -1
  237. package/dist/assets/architectureDiagram-2XIMDMQ5-Djwpsh98.js +0 -36
  238. package/dist/assets/array-DOVTz2Mq.js +0 -1
  239. package/dist/assets/blockDiagram-WCTKOSBZ-BdW5TTxj.js +0 -132
  240. package/dist/assets/c4Diagram-IC4MRINW-DTmkHEXu.js +0 -10
  241. package/dist/assets/channel-B3MUFipN.js +0 -1
  242. package/dist/assets/chunk-4BX2VUAB-DEqzsvDc.js +0 -1
  243. package/dist/assets/chunk-55IACEB6-BzVuSUV8.js +0 -1
  244. package/dist/assets/chunk-7E7YKBS2-CZ8IcA4c.js +0 -1
  245. package/dist/assets/chunk-7R4GIKGN-CWVVC8HX.js +0 -79
  246. package/dist/assets/chunk-C72U2L5F-B1Tso5TH.js +0 -1
  247. package/dist/assets/chunk-EGIJ26TM-Cx_7CFik.js +0 -1
  248. package/dist/assets/chunk-FMBD7UC4-Cfk_iGhv.js +0 -15
  249. package/dist/assets/chunk-GEFDOKGD-C_5hRbJt.js +0 -2
  250. package/dist/assets/chunk-GLR3WWYH-CkY7IyBj.js +0 -2
  251. package/dist/assets/chunk-HHEYEP7N-B0I4X5cr.js +0 -1
  252. package/dist/assets/chunk-JSJVCQXG-CAjwlVLg.js +0 -1
  253. package/dist/assets/chunk-KX2RTZJC-DWqnZZ02.js +0 -1
  254. package/dist/assets/chunk-KYZI473N-gjRVhJgJ.js +0 -53
  255. package/dist/assets/chunk-L3YUKLVL-D7C9GuxL.js +0 -1
  256. package/dist/assets/chunk-MX3YWQON-i-77iuVj.js +0 -1
  257. package/dist/assets/chunk-NQ4KR5QH-B22Pvemm.js +0 -220
  258. package/dist/assets/chunk-O4XLMI2P-ZQd5L6ZD.js +0 -7
  259. package/dist/assets/chunk-OZEHJAEY-BaPKTELw.js +0 -1
  260. package/dist/assets/chunk-PQ6SQG4A-DqE1eupT.js +0 -1
  261. package/dist/assets/chunk-PU5JKC2W-BTqWqedh.js +0 -70
  262. package/dist/assets/chunk-QZHKN3VN-Nm9TvMss.js +0 -1
  263. package/dist/assets/chunk-R5LLSJPH-DkiNs1dN.js +0 -1
  264. package/dist/assets/chunk-WL4C6EOR-CioD2fv2.js +0 -189
  265. package/dist/assets/chunk-XIRO2GV7-B4GGQONY.js +0 -1
  266. package/dist/assets/chunk-XPW4576I-C0IbbQos.js +0 -32
  267. package/dist/assets/chunk-XZSTWKYB-DMOqFWmT.js +0 -94
  268. package/dist/assets/chunk-YBOYWFTD-CoeQgeVY.js +0 -1
  269. package/dist/assets/classDiagram-VBA2DB6C-DV9ltQ7h.js +0 -1
  270. package/dist/assets/classDiagram-v2-RAHNMMFH-C6nD9wmM.js +0 -1
  271. package/dist/assets/clone-DuY6BQEm.js +0 -1
  272. package/dist/assets/cose-bilkent-S5V4N54A-B6FexK6p.js +0 -1
  273. package/dist/assets/cytoscape.esm-DoTFyJaN.js +0 -321
  274. package/dist/assets/dagre-CCcocoCU.js +0 -1
  275. package/dist/assets/dagre-KLK3FWXG-DIELowj9.js +0 -4
  276. package/dist/assets/defaultLocale-Ck2Xxk-C.js +0 -1
  277. package/dist/assets/diagram-E7M64L7V-D1mm0PoO.js +0 -24
  278. package/dist/assets/diagram-IFDJBPK2-7DVjly8y.js +0 -43
  279. package/dist/assets/diagram-P4PSJMXO-jO7pfyMb.js +0 -24
  280. package/dist/assets/dist-BywRdrPx.js +0 -1
  281. package/dist/assets/erDiagram-INFDFZHY-DSRxlRFy.js +0 -70
  282. package/dist/assets/flowDiagram-PKNHOUZH-CgKzzNdR.js +0 -162
  283. package/dist/assets/ganttDiagram-A5KZAMGK-CtsE7Y4E.js +0 -292
  284. package/dist/assets/gitGraph-HDMCJU4V-BU9uhwtz.js +0 -1
  285. package/dist/assets/gitGraphDiagram-K3NZZRJ6-DOU8RGdw.js +0 -65
  286. package/dist/assets/graphlib-WkJoBgka.js +0 -1
  287. package/dist/assets/index-CKVArt9D.js +0 -562
  288. package/dist/assets/index-DzRKJazf.css +0 -2
  289. package/dist/assets/info-3K5VOQVL-CPpvM-SG.js +0 -1
  290. package/dist/assets/infoDiagram-LFFYTUFH-VKLs5DsF.js +0 -2
  291. package/dist/assets/init-Bft5Ffpj.js +0 -1
  292. package/dist/assets/isArrayLikeObject-icl0H0jo.js +0 -1
  293. package/dist/assets/isEmpty-Du8sNmkE.js +0 -1
  294. package/dist/assets/ishikawaDiagram-PHBUUO56-CsWvEjux.js +0 -70
  295. package/dist/assets/journeyDiagram-4ABVD52K-BzJGTdIT.js +0 -139
  296. package/dist/assets/kanban-definition-K7BYSVSG-B_9ClJ1A.js +0 -89
  297. package/dist/assets/katex-BJrMXEjr.js +0 -261
  298. package/dist/assets/line-CC_tDGId.js +0 -1
  299. package/dist/assets/linear-Cts_d04Y.js +0 -1
  300. package/dist/assets/math-CNhlSIO3.js +0 -1
  301. package/dist/assets/mermaid-parser.core-Vb9KKv1R.js +0 -4
  302. package/dist/assets/mermaid.core-C_7xsp3d.js +0 -11
  303. package/dist/assets/mindmap-definition-YRQLILUH-BWmfy5wB.js +0 -68
  304. package/dist/assets/ordinal-DIg8h6NI.js +0 -1
  305. package/dist/assets/packet-RMMSAZCW-Q-WG6o3b.js +0 -1
  306. package/dist/assets/path-DfRbCp9y.js +0 -1
  307. package/dist/assets/pie-UPGHQEXC-Cwi2tLlt.js +0 -1
  308. package/dist/assets/pieDiagram-SKSYHLDU-Dyf3X_in.js +0 -30
  309. package/dist/assets/quadrantDiagram-337W2JSQ-B5_5m61Q.js +0 -7
  310. package/dist/assets/radar-KQ55EAFF-Dtw2VzxY.js +0 -1
  311. package/dist/assets/requirementDiagram-Z7DCOOCP-BSERBnlW.js +0 -73
  312. package/dist/assets/rough.esm-KjoEK0it.js +0 -1
  313. package/dist/assets/sankeyDiagram-WA2Y5GQK-CMcEY8Cz.js +0 -10
  314. package/dist/assets/sequenceDiagram-2WXFIKYE-D28qcXwC.js +0 -145
  315. package/dist/assets/src-C8kkzlHX.js +0 -1
  316. package/dist/assets/stateDiagram-RAJIS63D-7oVrCmRl.js +0 -1
  317. package/dist/assets/stateDiagram-v2-FVOUBMTO-DtFptQAd.js +0 -1
  318. package/dist/assets/timeline-definition-YZTLITO2-rbCfBEvG.js +0 -61
  319. package/dist/assets/treemap-KZPCXAKY-BlRvF0um.js +0 -1
  320. package/dist/assets/vennDiagram-LZ73GAT5-DBit3zWa.js +0 -34
  321. package/dist/assets/xychartDiagram-JWTSCODW-BVYXv51y.js +0 -7
  322. package/dist/index.js +0 -1040
@@ -0,0 +1,18 @@
1
+ {
2
+ "project": {
3
+ "name": "readit",
4
+ "description": "CLI tool for reviewing Markdown documents with inline comments",
5
+ "version": "0.1.0"
6
+ },
7
+ "context": {
8
+ "entryPoints": ["src/cli.ts", "src/App.tsx"],
9
+ "documentation": ["CLAUDE.md", ".claude/user-stories.md"],
10
+ "testFile": "test.md"
11
+ },
12
+ "preferences": {
13
+ "language": "typescript",
14
+ "style": "functional",
15
+ "formatting": "prettier",
16
+ "imports": "esm"
17
+ }
18
+ }
@@ -0,0 +1,248 @@
1
+ # User Stories
2
+
3
+ ## Core Workflow
4
+
5
+ ### US-001: View Document in Browser
6
+
7
+ **As a** writer/reviewer
8
+ **I want to** view my Markdown or HTML document rendered in a browser
9
+ **So that** I can review the content in a more readable format
10
+
11
+ **Acceptance Criteria:**
12
+
13
+ - Run `readit document.md` or `readit document.html` and browser opens with rendered content
14
+ - react-markdown for Markdown, unified/rehype for HTML (client-side rendering)
15
+ - Clean light theme with good typography for reading
16
+
17
+ ---
18
+
19
+ ### US-002: Add Comment to Selected Text
20
+
21
+ **As a** reviewer
22
+ **I want to** select text and add a comment
23
+ **So that** I can note feedback or changes needed
24
+
25
+ **Acceptance Criteria:**
26
+
27
+ - Select any text in the document
28
+ - Input area appears in margin to enter comment
29
+ - ⌘+Enter saves the comment
30
+ - Comment appears as margin note next to highlighted text
31
+ - Selection is preserved as reference
32
+
33
+ ---
34
+
35
+ ### US-003: Manage Comments
36
+
37
+ **As a** reviewer
38
+ **I want to** edit, delete, and copy individual comments
39
+ **So that** I can refine my feedback
40
+
41
+ **Acceptance Criteria:**
42
+
43
+ - Each margin note shows: selected text (truncated) + comment text
44
+ - Click to edit → inline textarea editing
45
+ - Delete button → removes comment and highlight
46
+ - Copy button → copies "Selected: ... Comment: ..." format
47
+
48
+ ---
49
+
50
+ ### US-004: Export All Comments
51
+
52
+ **As a** reviewer
53
+ **I want to** export all comments at once
54
+ **So that** I can use them with AI or share with others
55
+
56
+ **Acceptance Criteria:**
57
+
58
+ - "Copy All" button copies formatted prompt to clipboard
59
+ - "Export JSON" button downloads JSON file with all comments
60
+ - Format is AI-friendly (clear structure)
61
+
62
+ ---
63
+
64
+ ### US-005: Persistent Comments ✅
65
+
66
+ **As a** reviewer
67
+ **I want to** close and reopen the tool without losing comments
68
+ **So that** I can continue review sessions
69
+
70
+ **Acceptance Criteria:**
71
+
72
+ - Comments saved to `.comments.md` files in `~/.readit/comments/`
73
+ - Comments restored when reopening same file
74
+ - Different files have separate comment storage
75
+ - Human-readable markdown format for LLM/git compatibility
76
+
77
+ **Status:** Implemented (file-based storage)
78
+
79
+ ---
80
+
81
+ ## Planned Features
82
+
83
+ ### US-006: File-Based Comment Storage ✅
84
+
85
+ **As a** reviewer
86
+ **I want to** have my comments stored in a plain markdown file
87
+ **So that** I can version them with git, share them, and use them with LLMs and other tools
88
+
89
+ **Acceptance Criteria:**
90
+
91
+ - Comments stored in `~/.readit/comments/{hashed-path}/{filename}.comments.md`
92
+ - Format is human-readable markdown (selected text as quote, comment below)
93
+ - ~~Existing localStorage comments migrated on first run~~ (localStorage removed)
94
+ - Comments auto-save to file on add/edit/delete
95
+ - ~~`--storage local|file` flag~~ (file-only, no flag needed)
96
+ - File can be edited manually and changes reflected on refresh
97
+
98
+ **Status:** Implemented
99
+
100
+ ---
101
+
102
+ ### US-007: Comment Resolution Workflow
103
+
104
+ **As a** reviewer
105
+ **I want to** mark comments as resolved/unresolved and navigate between them
106
+ **So that** I can systematically address feedback with LLM assistance
107
+
108
+ **Acceptance Criteria:**
109
+
110
+ - Each comment has `unresolved` or `resolved` status
111
+ - New comments default to `unresolved`
112
+ - Visual indicators: yellow = unresolved, green/muted = resolved
113
+ - Navigate to next/previous unresolved comment (keyboard shortcuts)
114
+ - Unresolved count displayed in header
115
+ - Copy single comment with context for LLM discussion (⌘⇧C on margin note)
116
+ - Toggle status with one click, optionally auto-navigate to next
117
+
118
+ **Status:** Not implemented (planned for v0.3.0)
119
+
120
+ ---
121
+
122
+ ### US-008: Highlight Commented Text ✅
123
+
124
+ **As a** reviewer
125
+ **I want to** see which parts of the document have comments
126
+ **So that** I can quickly identify reviewed sections
127
+
128
+ **Acceptance Criteria:**
129
+
130
+ - Text with comments has yellow background highlight (`<mark>` tags)
131
+ - Margin notes are positioned next to their corresponding highlights
132
+ - Clicking highlight scrolls to margin note
133
+ - Clicking quoted text in margin note scrolls to highlight
134
+
135
+ **Status:** Implemented
136
+
137
+ ---
138
+
139
+ ### US-009: Comment Categories
140
+
141
+ **As a** reviewer
142
+ **I want to** categorize comments (TODO, Question, Suggestion, etc.)
143
+ **So that** I can organize and filter feedback
144
+
145
+ **Acceptance Criteria:**
146
+
147
+ - Dropdown to select category when adding comment
148
+ - Visual indicator (color/icon) per category
149
+ - Filter sidebar by category
150
+ - Export includes category information
151
+
152
+ **Status:** Not implemented
153
+
154
+ ---
155
+
156
+ ### US-010: Review Multiple Files
157
+
158
+ **As a** reviewer
159
+ **I want to** review multiple Markdown files in one session
160
+ **So that** I can review an entire document set
161
+
162
+ **Acceptance Criteria:**
163
+
164
+ - `readit docs/*.md` opens multi-file view
165
+ - File tabs or sidebar navigation
166
+ - Comments stored per file
167
+ - Bulk export across all files
168
+
169
+ **Status:** Not implemented
170
+
171
+ ---
172
+
173
+ ### US-011: Collaborative Review
174
+
175
+ **As a** team lead
176
+ **I want to** share review sessions with teammates
177
+ **So that** we can collaborate on document feedback
178
+
179
+ **Acceptance Criteria:**
180
+
181
+ - Generate shareable link
182
+ - Real-time sync of comments
183
+ - Author attribution on comments
184
+ - Conflict resolution for simultaneous edits
185
+
186
+ **Status:** Not implemented (future consideration)
187
+
188
+ ---
189
+
190
+ ### US-012: Export Document as PDF with Comments
191
+
192
+ **As a** reviewer
193
+ **I want to** export the current document view as a PDF
194
+ **So that** I can share or archive the reviewed document with all highlights and comments visible
195
+
196
+ **Acceptance Criteria:**
197
+
198
+ - "Export PDF" button in the header
199
+ - PDF includes the rendered document with highlighted text
200
+ - Margin notes are included next to their corresponding highlights
201
+ - PDF preserves the visual layout of the review interface
202
+ - Filename follows pattern: `{original-filename}-reviewed.pdf`
203
+
204
+ **Status:** Not implemented (future consideration)
205
+
206
+ ---
207
+
208
+ ## Technical Stories
209
+
210
+ ### TS-001: CLI Argument Parsing
211
+
212
+ - Use Commander.js for CLI
213
+ - Main command: `<file>`, `--port`, `--host`, `--no-open`, `--clean`
214
+ - Subcommands: `list` (show all commented files), `show <file>` (display comments for a file)
215
+ - Validate file exists and is Markdown (.md) or HTML (.html)
216
+ - Graceful error messages
217
+
218
+ ### TS-002: Server Architecture
219
+
220
+ - Express server serves API + static files
221
+ - `/api/document` returns `{ content, type, filePath, fileName, clean }`
222
+ - `/api/heartbeat` SSE for browser disconnect detection
223
+ - Development mode proxies to Vite
224
+ - Production mode serves built assets from dist/
225
+
226
+ ### TS-003: Build System
227
+
228
+ - Vite for frontend bundling
229
+ - tsup for CLI bundling
230
+ - Single `npm run build` produces complete distributable
231
+ - `npx readit` works without global install
232
+
233
+ ### TS-004: File-Based Comment Storage
234
+
235
+ - Store comments in `~/.readit/comments/{hashed-path}/{filename}.comments.md`
236
+ - Markdown format for human/LLM readability:
237
+
238
+ ```markdown
239
+ ## Comment 1
240
+ > Selected text here
241
+
242
+ Comment text here
243
+
244
+ ---
245
+ ```
246
+
247
+ - API endpoints: `GET/POST/PUT/DELETE /api/comments` for CRUD operations
248
+ - Watch file for external changes (optional)
package/AGENTS.md ADDED
@@ -0,0 +1,64 @@
1
+ # AGENTS.md
2
+
3
+ Instructions for AI coding agents working on this project.
4
+
5
+ ## Project Context
6
+
7
+ readit is a CLI tool for reviewing Markdown documents with inline comments. The workflow is:
8
+
9
+ 1. User runs `readit document.md`
10
+ 2. CLI converts Markdown to HTML using Pandoc
11
+ 3. Express server starts and opens browser
12
+ 4. User selects text and adds comments
13
+ 5. Comments are saved to localStorage
14
+ 6. User can export comments for AI or apply back to Markdown
15
+
16
+ ## Development Commands
17
+
18
+ ```bash
19
+ pnpm install # Install dependencies
20
+ pnpm dev # Start development (Vite + CLI hot reload)
21
+ pnpm build # Build for production
22
+ pnpm test # Run tests
23
+ pnpm typecheck # TypeScript check
24
+ pnpm check # Biome lint + format check
25
+ pnpm check:fix # Fix issues
26
+ pnpm format # Format code
27
+ ```
28
+
29
+ ## Code Organization
30
+
31
+ - `src/cli/` - CLI entry point, argument parsing
32
+ - `src/server/` - Express server, Pandoc integration
33
+ - `src/components/` - React UI components
34
+ - `src/hooks/` - Custom React hooks
35
+ - `src/lib/` - Utility functions
36
+ - `src/types/` - TypeScript types
37
+
38
+ ## Testing
39
+
40
+ - Tests are co-located with source files (`*.test.ts`)
41
+ - Use Vitest for testing
42
+ - Run `pnpm test` before committing
43
+
44
+ ## Commit Guidelines
45
+
46
+ - Use conventional commits (feat:, fix:, docs:, etc.)
47
+ - Keep commits focused and atomic
48
+ - Run `pnpm typecheck && pnpm check` before committing
49
+
50
+ ## Adding Features
51
+
52
+ 1. Check `.claude/user-stories.md` for planned features
53
+ 2. Update types in `src/types/` first
54
+ 3. Create/update hooks if needed
55
+ 4. Create/update components
56
+ 5. Add tests
57
+ 6. Update CHANGELOG.md
58
+
59
+ ## Key Files to Review
60
+
61
+ - `CLAUDE.md` - Project overview and architecture
62
+ - `.claude/user-stories.md` - User stories and acceptance criteria
63
+ - `.claude/roadmap.md` - Development roadmap
64
+ - `package.json` - Scripts and dependencies
package/README.md CHANGED
@@ -13,12 +13,12 @@ Inspired by [difit](https://github.com/yoshiko-pg/difit).
13
13
 
14
14
  ## Requirements
15
15
 
16
- - Node.js >= 22.0.0
16
+ - [Bun](https://bun.sh) >= 1.0
17
17
 
18
18
  ## Quick Start
19
19
 
20
20
  ```bash
21
- npx readit document.md
21
+ bunx readit document.md
22
22
  ```
23
23
 
24
24
  ## Usage
@@ -39,11 +39,11 @@ Select text to add comments. Comments appear as margin notes. Copy all comments
39
39
  ## Development
40
40
 
41
41
  ```bash
42
- pnpm install # Install dependencies
43
- pnpm dev # Start dev server
44
- pnpm build # Build for production
45
- pnpm test # Run tests
46
- pnpm check # Lint and format (Biome)
42
+ bun install # Install dependencies
43
+ bun dev # Start dev server
44
+ bun run build # Build for production
45
+ bun run test # Run tests
46
+ bun run check # Lint and format (Biome)
47
47
  ```
48
48
 
49
49
  ## License
package/biome.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.4.6/schema.json",
3
+ "vcs": {
4
+ "enabled": true,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": true
7
+ },
8
+ "formatter": {
9
+ "enabled": true,
10
+ "indentWidth": 2,
11
+ "indentStyle": "space"
12
+ },
13
+ "assist": {
14
+ "enabled": true
15
+ },
16
+ "linter": {
17
+ "enabled": true,
18
+ "rules": {
19
+ "style": {
20
+ "noNonNullAssertion": "off"
21
+ },
22
+ "correctness": {
23
+ "useExhaustiveDependencies": "warn"
24
+ },
25
+ "complexity": {
26
+ "noForEach": "off",
27
+ "noImportantStyles": "off"
28
+ },
29
+ "suspicious": {
30
+ "noArrayIndexKey": "warn",
31
+ "noExplicitAny": "warn",
32
+ "noUnknownAtRules": "off"
33
+ },
34
+ "a11y": {
35
+ "useKeyWithClickEvents": "off",
36
+ "noSvgWithoutTitle": "off",
37
+ "useSemanticElements": "warn",
38
+ "useFocusableInteractive": "warn"
39
+ },
40
+ "security": {
41
+ "noDangerouslySetInnerHtml": "warn"
42
+ }
43
+ }
44
+ },
45
+ "css": {
46
+ "parser": {
47
+ "tailwindDirectives": true
48
+ }
49
+ },
50
+ "files": {
51
+ "includes": [
52
+ "**",
53
+ "!!**/dist",
54
+ "!!**/build",
55
+ "!!**/node_modules",
56
+ "!!**/generated",
57
+ "!!**/prisma/generated",
58
+ "!!**/supabase/generated",
59
+ "!!**/.next",
60
+ "!!**/.turbo",
61
+ "!!**/.git",
62
+ "!!**/.temp",
63
+ "!!**/.wrangler",
64
+ "!!**/playwright-report",
65
+ "!!**/test-results"
66
+ ],
67
+ "ignoreUnknown": true
68
+ }
69
+ }