@vibefield/rosetta-room 0.0.0-stage → 0.1.0

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 (435) hide show
  1. package/README.md +247 -2
  2. package/dist/HistoryRoom.d.ts +98 -0
  3. package/dist/HistoryRoom.js +440 -0
  4. package/dist/TranscriptReader.d.ts +22 -0
  5. package/dist/TranscriptReader.js +72 -0
  6. package/dist/components/ColdStart.d.ts +4 -0
  7. package/dist/components/ColdStart.js +5 -0
  8. package/dist/components/FilterChips.d.ts +4 -0
  9. package/dist/components/FilterChips.js +5 -0
  10. package/dist/components/HostAct.d.ts +9 -0
  11. package/dist/components/HostAct.js +16 -0
  12. package/dist/components/HostMenu.d.ts +41 -0
  13. package/dist/components/HostMenu.js +216 -0
  14. package/dist/components/IngestStatus.d.ts +4 -0
  15. package/dist/components/IngestStatus.js +20 -0
  16. package/dist/components/ListActivityNotice.d.ts +5 -0
  17. package/dist/components/ListActivityNotice.js +4 -0
  18. package/dist/components/ListSections.d.ts +20 -0
  19. package/dist/components/ListSections.js +39 -0
  20. package/dist/components/RenameHeading.d.ts +9 -0
  21. package/dist/components/RenameHeading.js +75 -0
  22. package/dist/components/SearchStrip.d.ts +5 -0
  23. package/dist/components/SearchStrip.js +8 -0
  24. package/dist/components/SummaryMetrics.d.ts +13 -0
  25. package/dist/components/SummaryMetrics.js +9 -0
  26. package/dist/components/SummaryPanels.d.ts +35 -0
  27. package/dist/components/SummaryPanels.js +117 -0
  28. package/dist/components/Transcript.d.ts +46 -0
  29. package/dist/components/Transcript.js +358 -0
  30. package/dist/components/charts/ActivityChartDetail.d.ts +13 -0
  31. package/dist/components/charts/ActivityChartDetail.js +78 -0
  32. package/dist/components/charts/CalendarHeatmap.d.ts +16 -0
  33. package/dist/components/charts/CalendarHeatmap.js +55 -0
  34. package/dist/components/charts/DayActivityChart.d.ts +8 -0
  35. package/dist/components/charts/DayActivityChart.js +71 -0
  36. package/dist/components/charts/ModelsChartDetail.d.ts +7 -0
  37. package/dist/components/charts/ModelsChartDetail.js +19 -0
  38. package/dist/components/charts/ProjectChartDialog.d.ts +19 -0
  39. package/dist/components/charts/ProjectChartDialog.js +39 -0
  40. package/dist/components/charts/Streamgraph.d.ts +16 -0
  41. package/dist/components/charts/Streamgraph.js +94 -0
  42. package/dist/components/charts/Treemap.d.ts +26 -0
  43. package/dist/components/charts/Treemap.js +81 -0
  44. package/dist/components/charts/index.d.ts +9 -0
  45. package/dist/components/charts/index.js +4 -0
  46. package/dist/components/charts/streamgraph-layout.d.ts +23 -0
  47. package/dist/components/charts/streamgraph-layout.js +114 -0
  48. package/dist/components/charts/treemap-layout.d.ts +32 -0
  49. package/dist/components/charts/treemap-layout.js +140 -0
  50. package/dist/components/charts/types.d.ts +65 -0
  51. package/dist/components/charts/types.js +8 -0
  52. package/dist/components/file-viewer/FileViewerBrowsers.d.ts +10 -0
  53. package/dist/components/file-viewer/FileViewerBrowsers.js +65 -0
  54. package/dist/components/file-viewer/FileViewerDialog.d.ts +33 -0
  55. package/dist/components/file-viewer/FileViewerDialog.js +82 -0
  56. package/dist/components/file-viewer/FileViewerHeader.d.ts +26 -0
  57. package/dist/components/file-viewer/FileViewerHeader.js +17 -0
  58. package/dist/components/file-viewer/ImageGalleryDialog.d.ts +14 -0
  59. package/dist/components/file-viewer/ImageGalleryDialog.js +98 -0
  60. package/dist/components/file-viewer/diff/index.d.ts +2 -0
  61. package/dist/components/file-viewer/diff/index.js +2 -0
  62. package/dist/components/file-viewer/diff/parse.d.ts +2 -0
  63. package/dist/components/file-viewer/diff/parse.js +164 -0
  64. package/dist/components/file-viewer/diff/types.d.ts +44 -0
  65. package/dist/components/file-viewer/diff/types.js +7 -0
  66. package/dist/components/file-viewer/gallery-source.d.ts +11 -0
  67. package/dist/components/file-viewer/gallery-source.js +75 -0
  68. package/dist/components/file-viewer/image-resource.d.ts +19 -0
  69. package/dist/components/file-viewer/image-resource.js +60 -0
  70. package/dist/components/file-viewer/index.d.ts +5 -0
  71. package/dist/components/file-viewer/index.js +8 -0
  72. package/dist/components/file-viewer/markdown/blocks.d.ts +2 -0
  73. package/dist/components/file-viewer/markdown/blocks.js +277 -0
  74. package/dist/components/file-viewer/markdown/index.d.ts +4 -0
  75. package/dist/components/file-viewer/markdown/index.js +35 -0
  76. package/dist/components/file-viewer/markdown/inline.d.ts +10 -0
  77. package/dist/components/file-viewer/markdown/inline.js +178 -0
  78. package/dist/components/file-viewer/markdown/render.d.ts +9 -0
  79. package/dist/components/file-viewer/markdown/render.js +78 -0
  80. package/dist/components/file-viewer/markdown/types.d.ts +57 -0
  81. package/dist/components/file-viewer/markdown/types.js +11 -0
  82. package/dist/components/file-viewer/minimap/CodeMinimap.d.ts +10 -0
  83. package/dist/components/file-viewer/minimap/CodeMinimap.js +296 -0
  84. package/dist/components/file-viewer/minimap/layout.d.ts +60 -0
  85. package/dist/components/file-viewer/minimap/layout.js +117 -0
  86. package/dist/components/file-viewer/minimap/palette.d.ts +2 -0
  87. package/dist/components/file-viewer/minimap/palette.js +73 -0
  88. package/dist/components/file-viewer/minimap/raster.d.ts +19 -0
  89. package/dist/components/file-viewer/minimap/raster.js +122 -0
  90. package/dist/components/file-viewer/registry.d.ts +25 -0
  91. package/dist/components/file-viewer/registry.js +182 -0
  92. package/dist/components/file-viewer/syntax/grammars.d.ts +16 -0
  93. package/dist/components/file-viewer/syntax/grammars.js +221 -0
  94. package/dist/components/file-viewer/syntax/index.d.ts +8 -0
  95. package/dist/components/file-viewer/syntax/index.js +9 -0
  96. package/dist/components/file-viewer/syntax/languages.d.ts +14 -0
  97. package/dist/components/file-viewer/syntax/languages.js +115 -0
  98. package/dist/components/file-viewer/syntax/tokenize-config.d.ts +2 -0
  99. package/dist/components/file-viewer/syntax/tokenize-config.js +132 -0
  100. package/dist/components/file-viewer/syntax/tokenize-css.d.ts +2 -0
  101. package/dist/components/file-viewer/syntax/tokenize-css.js +169 -0
  102. package/dist/components/file-viewer/syntax/tokenize-markup.d.ts +2 -0
  103. package/dist/components/file-viewer/syntax/tokenize-markup.js +124 -0
  104. package/dist/components/file-viewer/syntax/tokenize.d.ts +9 -0
  105. package/dist/components/file-viewer/syntax/tokenize.js +289 -0
  106. package/dist/components/file-viewer/syntax/types.d.ts +74 -0
  107. package/dist/components/file-viewer/syntax/types.js +13 -0
  108. package/dist/components/file-viewer/types.d.ts +111 -0
  109. package/dist/components/file-viewer/types.js +8 -0
  110. package/dist/components/file-viewer/use-file-content.d.ts +26 -0
  111. package/dist/components/file-viewer/use-file-content.js +144 -0
  112. package/dist/components/file-viewer/views/BinaryView.d.ts +2 -0
  113. package/dist/components/file-viewer/views/BinaryView.js +34 -0
  114. package/dist/components/file-viewer/views/CodeView.d.ts +2 -0
  115. package/dist/components/file-viewer/views/CodeView.js +46 -0
  116. package/dist/components/file-viewer/views/DiffBody.d.ts +7 -0
  117. package/dist/components/file-viewer/views/DiffBody.js +77 -0
  118. package/dist/components/file-viewer/views/DiffView.d.ts +2 -0
  119. package/dist/components/file-viewer/views/DiffView.js +11 -0
  120. package/dist/components/file-viewer/views/ImageView.d.ts +9 -0
  121. package/dist/components/file-viewer/views/ImageView.js +28 -0
  122. package/dist/components/file-viewer/views/MarkdownView.d.ts +9 -0
  123. package/dist/components/file-viewer/views/MarkdownView.js +20 -0
  124. package/dist/components/file-viewer/views/SvgView.d.ts +9 -0
  125. package/dist/components/file-viewer/views/SvgView.js +10 -0
  126. package/dist/components/git/ChangeTree.d.ts +20 -0
  127. package/dist/components/git/ChangeTree.js +35 -0
  128. package/dist/components/git/CommitViewer.d.ts +12 -0
  129. package/dist/components/git/CommitViewer.js +85 -0
  130. package/dist/components/git/GitChanges.d.ts +17 -0
  131. package/dist/components/git/GitChanges.js +70 -0
  132. package/dist/components/git/GitHistory.d.ts +9 -0
  133. package/dist/components/git/GitHistory.js +58 -0
  134. package/dist/components/git/co-author.d.ts +14 -0
  135. package/dist/components/git/co-author.js +55 -0
  136. package/dist/components/git/git-file-source.d.ts +18 -0
  137. package/dist/components/git/git-file-source.js +53 -0
  138. package/dist/components/git/git-host.d.ts +24 -0
  139. package/dist/components/git/git-host.js +130 -0
  140. package/dist/components/git/index.d.ts +10 -0
  141. package/dist/components/git/index.js +12 -0
  142. package/dist/components/git/path-tree.d.ts +23 -0
  143. package/dist/components/git/path-tree.js +73 -0
  144. package/dist/components/git/session-files.d.ts +9 -0
  145. package/dist/components/git/session-files.js +50 -0
  146. package/dist/components/git/types.d.ts +92 -0
  147. package/dist/components/git/types.js +9 -0
  148. package/dist/components/projects/ProjectActivitySparkline.d.ts +6 -0
  149. package/dist/components/projects/ProjectActivitySparkline.js +12 -0
  150. package/dist/components/projects/ProjectList.d.ts +25 -0
  151. package/dist/components/projects/ProjectList.js +43 -0
  152. package/dist/components/projects/ProjectListItem.d.ts +19 -0
  153. package/dist/components/projects/ProjectListItem.js +78 -0
  154. package/dist/components/projects/ProjectsColumn.d.ts +19 -0
  155. package/dist/components/projects/ProjectsColumn.js +36 -0
  156. package/dist/components/projects/index.d.ts +8 -0
  157. package/dist/components/projects/index.js +4 -0
  158. package/dist/components/search/MatchStepper.d.ts +9 -0
  159. package/dist/components/search/MatchStepper.js +14 -0
  160. package/dist/components/search/SearchLauncher.d.ts +12 -0
  161. package/dist/components/search/SearchLauncher.js +13 -0
  162. package/dist/components/search/SearchSheet.d.ts +29 -0
  163. package/dist/components/search/SearchSheet.js +230 -0
  164. package/dist/components/search/index.d.ts +8 -0
  165. package/dist/components/search/index.js +4 -0
  166. package/dist/components/search/shortcut.d.ts +25 -0
  167. package/dist/components/search/shortcut.js +32 -0
  168. package/dist/components/sessions/SessionList.d.ts +24 -0
  169. package/dist/components/sessions/SessionList.js +76 -0
  170. package/dist/components/sessions/SessionListItem.d.ts +13 -0
  171. package/dist/components/sessions/SessionListItem.js +58 -0
  172. package/dist/components/sessions/SessionsColumn.d.ts +26 -0
  173. package/dist/components/sessions/SessionsColumn.js +32 -0
  174. package/dist/components/sessions/index.d.ts +9 -0
  175. package/dist/components/sessions/index.js +4 -0
  176. package/dist/components/sessions/session-display.d.ts +8 -0
  177. package/dist/components/sessions/session-display.js +18 -0
  178. package/dist/components/sessions/types.d.ts +7 -0
  179. package/dist/components/sessions/types.js +1 -0
  180. package/dist/components/transcript/Activity.d.ts +45 -0
  181. package/dist/components/transcript/Activity.js +75 -0
  182. package/dist/components/transcript/Anchor.d.ts +8 -0
  183. package/dist/components/transcript/Anchor.js +23 -0
  184. package/dist/components/transcript/Attachments.d.ts +21 -0
  185. package/dist/components/transcript/Attachments.js +138 -0
  186. package/dist/components/transcript/AuthoredMessage.d.ts +19 -0
  187. package/dist/components/transcript/AuthoredMessage.js +17 -0
  188. package/dist/components/transcript/Compaction.d.ts +9 -0
  189. package/dist/components/transcript/Compaction.js +50 -0
  190. package/dist/components/transcript/DayPill.d.ts +38 -0
  191. package/dist/components/transcript/DayPill.js +68 -0
  192. package/dist/components/transcript/Document.d.ts +32 -0
  193. package/dist/components/transcript/Document.js +503 -0
  194. package/dist/components/transcript/Favicon.d.ts +32 -0
  195. package/dist/components/transcript/Favicon.js +71 -0
  196. package/dist/components/transcript/HeadOfDocument.d.ts +19 -0
  197. package/dist/components/transcript/HeadOfDocument.js +44 -0
  198. package/dist/components/transcript/Ledger.d.ts +53 -0
  199. package/dist/components/transcript/Ledger.js +182 -0
  200. package/dist/components/transcript/LineDetail.d.ts +24 -0
  201. package/dist/components/transcript/LineDetail.js +81 -0
  202. package/dist/components/transcript/Marker.d.ts +33 -0
  203. package/dist/components/transcript/Marker.js +21 -0
  204. package/dist/components/transcript/MessagePreview.d.ts +12 -0
  205. package/dist/components/transcript/MessagePreview.js +58 -0
  206. package/dist/components/transcript/Prompt.d.ts +20 -0
  207. package/dist/components/transcript/Prompt.js +55 -0
  208. package/dist/components/transcript/Prose.d.ts +19 -0
  209. package/dist/components/transcript/Prose.js +109 -0
  210. package/dist/components/transcript/ReceiptPill.d.ts +10 -0
  211. package/dist/components/transcript/ReceiptPill.js +10 -0
  212. package/dist/components/transcript/ResponseHead.d.ts +9 -0
  213. package/dist/components/transcript/ResponseHead.js +36 -0
  214. package/dist/components/transcript/Subthread.d.ts +19 -0
  215. package/dist/components/transcript/Subthread.js +96 -0
  216. package/dist/components/transcript/Team.d.ts +53 -0
  217. package/dist/components/transcript/Team.js +185 -0
  218. package/dist/components/transcript/Thinking.d.ts +24 -0
  219. package/dist/components/transcript/Thinking.js +50 -0
  220. package/dist/components/transcript/TimelineMeta.d.ts +9 -0
  221. package/dist/components/transcript/TimelineMeta.js +161 -0
  222. package/dist/components/transcript/TranscriptLoading.d.ts +10 -0
  223. package/dist/components/transcript/TranscriptLoading.js +10 -0
  224. package/dist/components/transcript/WebDetail.d.ts +8 -0
  225. package/dist/components/transcript/WebDetail.js +29 -0
  226. package/dist/components/transcript/Workflow.d.ts +12 -0
  227. package/dist/components/transcript/Workflow.js +208 -0
  228. package/dist/components/transcript/activity-plan.d.ts +84 -0
  229. package/dist/components/transcript/activity-plan.js +209 -0
  230. package/dist/components/transcript/attachment-file-source.d.ts +23 -0
  231. package/dist/components/transcript/attachment-file-source.js +103 -0
  232. package/dist/components/transcript/attachment-gallery.d.ts +12 -0
  233. package/dist/components/transcript/attachment-gallery.js +33 -0
  234. package/dist/components/transcript/detail-parts.d.ts +50 -0
  235. package/dist/components/transcript/detail-parts.js +295 -0
  236. package/dist/components/transcript/disclosure-state.d.ts +6 -0
  237. package/dist/components/transcript/disclosure-state.js +32 -0
  238. package/dist/components/transcript/disclosure-store.d.ts +8 -0
  239. package/dist/components/transcript/disclosure-store.js +31 -0
  240. package/dist/components/transcript/document-model.d.ts +15 -0
  241. package/dist/components/transcript/document-model.js +104 -0
  242. package/dist/components/transcript/document-plan.d.ts +28 -0
  243. package/dist/components/transcript/document-plan.js +145 -0
  244. package/dist/components/transcript/fold-preference.d.ts +17 -0
  245. package/dist/components/transcript/fold-preference.js +63 -0
  246. package/dist/components/transcript/glyphs.d.ts +15 -0
  247. package/dist/components/transcript/glyphs.js +47 -0
  248. package/dist/components/transcript/index.d.ts +23 -0
  249. package/dist/components/transcript/index.js +22 -0
  250. package/dist/components/transcript/message-file-source.d.ts +15 -0
  251. package/dist/components/transcript/message-file-source.js +31 -0
  252. package/dist/components/transcript/message-preview.d.ts +9 -0
  253. package/dist/components/transcript/message-preview.js +46 -0
  254. package/dist/components/transcript/read-file-source.d.ts +7 -0
  255. package/dist/components/transcript/read-file-source.js +34 -0
  256. package/dist/components/transcript/reader-context.d.ts +13 -0
  257. package/dist/components/transcript/reader-context.js +55 -0
  258. package/dist/components/transcript/reading-identity.d.ts +2 -0
  259. package/dist/components/transcript/reading-identity.js +52 -0
  260. package/dist/components/transcript/scroll-to-row.d.ts +2 -0
  261. package/dist/components/transcript/scroll-to-row.js +13 -0
  262. package/dist/components/transcript/thread-index.d.ts +14 -0
  263. package/dist/components/transcript/thread-index.js +40 -0
  264. package/dist/components/transcript/thread-navigation.d.ts +5 -0
  265. package/dist/components/transcript/thread-navigation.js +3 -0
  266. package/dist/components/transcript/timeline-meta-file-source.d.ts +6 -0
  267. package/dist/components/transcript/timeline-meta-file-source.js +55 -0
  268. package/dist/components/transcript/timeline-meta-state.d.ts +12 -0
  269. package/dist/components/transcript/timeline-meta-state.js +24 -0
  270. package/dist/components/ui/ColumnHeading.d.ts +27 -0
  271. package/dist/components/ui/ColumnHeading.js +7 -0
  272. package/dist/components/ui/ConfirmDialog.d.ts +14 -0
  273. package/dist/components/ui/ConfirmDialog.js +22 -0
  274. package/dist/components/ui/DialogShell.d.ts +18 -0
  275. package/dist/components/ui/DialogShell.js +40 -0
  276. package/dist/components/ui/EmptyState.d.ts +10 -0
  277. package/dist/components/ui/EmptyState.js +6 -0
  278. package/dist/components/ui/ListSummaryHeader.d.ts +9 -0
  279. package/dist/components/ui/ListSummaryHeader.js +6 -0
  280. package/dist/components/ui/ListToolbar.d.ts +6 -0
  281. package/dist/components/ui/ListToolbar.js +5 -0
  282. package/dist/components/ui/ResultGroupHeader.d.ts +9 -0
  283. package/dist/components/ui/ResultGroupHeader.js +5 -0
  284. package/dist/components/ui/SegmentedControl.d.ts +16 -0
  285. package/dist/components/ui/SegmentedControl.js +9 -0
  286. package/dist/components/ui/SummaryMetric.d.ts +13 -0
  287. package/dist/components/ui/SummaryMetric.js +10 -0
  288. package/dist/components/ui/Veil.d.ts +7 -0
  289. package/dist/components/ui/Veil.js +5 -0
  290. package/dist/components/ui/index.d.ts +20 -0
  291. package/dist/components/ui/index.js +10 -0
  292. package/dist/components/worktree/WorktreeColumn.d.ts +22 -0
  293. package/dist/components/worktree/WorktreeColumn.js +170 -0
  294. package/dist/components/worktree/WorktreeFileTree.d.ts +19 -0
  295. package/dist/components/worktree/WorktreeFileTree.js +60 -0
  296. package/dist/components/worktree/WorktreeHeader.d.ts +32 -0
  297. package/dist/components/worktree/WorktreeHeader.js +81 -0
  298. package/dist/components/worktree/WorktreeList.d.ts +8 -0
  299. package/dist/components/worktree/WorktreeList.js +12 -0
  300. package/dist/components/worktree/index.d.ts +12 -0
  301. package/dist/components/worktree/index.js +7 -0
  302. package/dist/components/worktree/types.d.ts +17 -0
  303. package/dist/components/worktree/types.js +3 -0
  304. package/dist/components/worktree/use-worktree-guest.d.ts +21 -0
  305. package/dist/components/worktree/use-worktree-guest.js +92 -0
  306. package/dist/components/worktree/worktree-file-commands.d.ts +19 -0
  307. package/dist/components/worktree/worktree-file-commands.js +112 -0
  308. package/dist/components/worktree/worktree-file-source.d.ts +15 -0
  309. package/dist/components/worktree/worktree-file-source.js +75 -0
  310. package/dist/components/worktree/worktree-host.d.ts +31 -0
  311. package/dist/components/worktree/worktree-host.js +242 -0
  312. package/dist/fixtures/index.d.ts +24 -0
  313. package/dist/fixtures/index.js +292 -0
  314. package/dist/host-inputs.d.ts +231 -0
  315. package/dist/host-inputs.js +35 -0
  316. package/dist/index.d.ts +18 -0
  317. package/dist/index.js +14 -0
  318. package/dist/lib/activity-details.d.ts +23 -0
  319. package/dist/lib/activity-details.js +78 -0
  320. package/dist/lib/activity-order.d.ts +32 -0
  321. package/dist/lib/activity-order.js +86 -0
  322. package/dist/lib/agent-paths.d.ts +6 -0
  323. package/dist/lib/agent-paths.js +19 -0
  324. package/dist/lib/agents.d.ts +15 -0
  325. package/dist/lib/agents.js +60 -0
  326. package/dist/lib/catalog-status.d.ts +3 -0
  327. package/dist/lib/catalog-status.js +10 -0
  328. package/dist/lib/chart-data.d.ts +14 -0
  329. package/dist/lib/chart-data.js +151 -0
  330. package/dist/lib/day-activity.d.ts +21 -0
  331. package/dist/lib/day-activity.js +56 -0
  332. package/dist/lib/format.d.ts +24 -0
  333. package/dist/lib/format.js +116 -0
  334. package/dist/lib/hooks.d.ts +118 -0
  335. package/dist/lib/hooks.js +608 -0
  336. package/dist/lib/icons.d.ts +21 -0
  337. package/dist/lib/icons.js +49 -0
  338. package/dist/lib/image-media.d.ts +6 -0
  339. package/dist/lib/image-media.js +30 -0
  340. package/dist/lib/ingest-activity.d.ts +50 -0
  341. package/dist/lib/ingest-activity.js +151 -0
  342. package/dist/lib/ingest.d.ts +25 -0
  343. package/dist/lib/ingest.js +70 -0
  344. package/dist/lib/model-labels.d.ts +5 -0
  345. package/dist/lib/model-labels.js +28 -0
  346. package/dist/lib/model.d.ts +73 -0
  347. package/dist/lib/model.js +141 -0
  348. package/dist/lib/motion.d.ts +13 -0
  349. package/dist/lib/motion.js +80 -0
  350. package/dist/lib/room-storage.d.ts +13 -0
  351. package/dist/lib/room-storage.js +40 -0
  352. package/dist/lib/search-results.d.ts +27 -0
  353. package/dist/lib/search-results.js +83 -0
  354. package/dist/lib/search-sheet.d.ts +119 -0
  355. package/dist/lib/search-sheet.js +282 -0
  356. package/dist/lib/sections.d.ts +19 -0
  357. package/dist/lib/sections.js +36 -0
  358. package/dist/lib/session-activity.d.ts +5 -0
  359. package/dist/lib/session-activity.js +15 -0
  360. package/dist/lib/session-leases.d.ts +15 -0
  361. package/dist/lib/session-leases.js +61 -0
  362. package/dist/lib/spend.d.ts +42 -0
  363. package/dist/lib/spend.js +112 -0
  364. package/dist/lib/tint.d.ts +9 -0
  365. package/dist/lib/tint.js +53 -0
  366. package/dist/lib/transcript/collaboration.d.ts +97 -0
  367. package/dist/lib/transcript/collaboration.js +423 -0
  368. package/dist/lib/transcript/families.d.ts +212 -0
  369. package/dist/lib/transcript/families.js +906 -0
  370. package/dist/lib/transcript/favicons.d.ts +54 -0
  371. package/dist/lib/transcript/favicons.js +183 -0
  372. package/dist/lib/transcript/head-of-document.d.ts +27 -0
  373. package/dist/lib/transcript/head-of-document.js +274 -0
  374. package/dist/lib/transcript/head-state.d.ts +182 -0
  375. package/dist/lib/transcript/head-state.js +305 -0
  376. package/dist/lib/transcript/history-window.d.ts +13 -0
  377. package/dist/lib/transcript/history-window.js +52 -0
  378. package/dist/lib/transcript/images.d.ts +8 -0
  379. package/dist/lib/transcript/images.js +60 -0
  380. package/dist/lib/transcript/index.d.ts +15 -0
  381. package/dist/lib/transcript/index.js +8 -0
  382. package/dist/lib/transcript/ledger.d.ts +143 -0
  383. package/dist/lib/transcript/ledger.js +513 -0
  384. package/dist/lib/transcript/protocol.d.ts +23 -0
  385. package/dist/lib/transcript/protocol.js +1 -0
  386. package/dist/lib/transcript/sittings.d.ts +75 -0
  387. package/dist/lib/transcript/sittings.js +147 -0
  388. package/dist/lib/transcript/tail-scroll.d.ts +36 -0
  389. package/dist/lib/transcript/tail-scroll.js +167 -0
  390. package/dist/lib/transcript/tail-state.d.ts +17 -0
  391. package/dist/lib/transcript/tail-state.js +30 -0
  392. package/dist/lib/transcript/turns.d.ts +192 -0
  393. package/dist/lib/transcript/turns.js +576 -0
  394. package/dist/lib/transcript/use-transcript-opening.d.ts +12 -0
  395. package/dist/lib/transcript/use-transcript-opening.js +31 -0
  396. package/dist/lib/transcript/use-transcript-tail.d.ts +25 -0
  397. package/dist/lib/transcript/use-transcript-tail.js +158 -0
  398. package/dist/lib/transcript/vocabulary.d.ts +119 -0
  399. package/dist/lib/transcript/vocabulary.js +293 -0
  400. package/dist/lib/transcript/web-address.d.ts +6 -0
  401. package/dist/lib/transcript/web-address.js +18 -0
  402. package/dist/lib/transcript/workflow.d.ts +31 -0
  403. package/dist/lib/transcript/workflow.js +133 -0
  404. package/dist/lib/use-activity-order.d.ts +2 -0
  405. package/dist/lib/use-activity-order.js +23 -0
  406. package/dist/lib/use-day-usage.d.ts +8 -0
  407. package/dist/lib/use-day-usage.js +31 -0
  408. package/dist/lib/use-deferred-list-order.d.ts +26 -0
  409. package/dist/lib/use-deferred-list-order.js +142 -0
  410. package/dist/lib/use-ingest-activity.d.ts +2 -0
  411. package/dist/lib/use-ingest-activity.js +49 -0
  412. package/dist/lib/use-list-motion.d.ts +4 -0
  413. package/dist/lib/use-list-motion.js +67 -0
  414. package/dist/ports.d.ts +222 -0
  415. package/dist/ports.js +3 -0
  416. package/dist/room-context.d.ts +60 -0
  417. package/dist/room-context.js +87 -0
  418. package/dist/styles/activity-chart.css +127 -0
  419. package/dist/styles/attachments.css +29 -0
  420. package/dist/styles/favicon.css +73 -0
  421. package/dist/styles/history-room.css +18 -0
  422. package/dist/styles/host-inputs.css +250 -0
  423. package/dist/styles/image-gallery.css +30 -0
  424. package/dist/styles/ingest.css +51 -0
  425. package/dist/styles/message-preview.css +34 -0
  426. package/dist/styles/models-chart.css +66 -0
  427. package/dist/styles/project-chart.css +19 -0
  428. package/dist/styles/reader.css +33 -0
  429. package/dist/styles/room.css +1411 -0
  430. package/dist/styles/search.css +252 -0
  431. package/dist/styles/transcript-activity.css +70 -0
  432. package/dist/styles/transcript-head.css +220 -0
  433. package/dist/styles/transcript-loading.css +57 -0
  434. package/dist/styles/transcript.css +1226 -0
  435. package/package.json +61 -4
@@ -0,0 +1,10 @@
1
+ import type { RefObject } from "react";
2
+ import type { TokenLine } from "../syntax/index.js";
3
+ export interface CodeMinimapProps {
4
+ readonly lines: readonly TokenLine[];
5
+ readonly lineHeight: number;
6
+ readonly tabColumns: number;
7
+ readonly scrollerRef: RefObject<HTMLDivElement | null>;
8
+ readonly scrollToLine: (lineIndex: number) => void;
9
+ }
10
+ export declare function CodeMinimap({ lines, lineHeight, tabColumns, scrollerRef, scrollToLine, }: CodeMinimapProps): import("react").JSX.Element | null;
@@ -0,0 +1,296 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // A read-only source map inside CodeView's native scrollbar gutters.
3
+ //
4
+ // Text is painted only on file/theme/size changes. Scroll moves one DOM
5
+ // thumb, derived from the native scroller's real geometry. Sampling changes
6
+ // which lines become pixels; it never changes navigation.
7
+ import { useLayoutEffect, useRef, useState } from "react";
8
+ import { computeScrollbarInsets, computeThumbGeometry, createRasterLayout, lineIndexForMapOffset, needsMinimap, scrollTopForThumbDelta, wheelDeltaPixels, } from "./layout.js";
9
+ import { resolveMinimapPalette } from "./palette.js";
10
+ import { rasterizeMinimap } from "./raster.js";
11
+ const MAX_RENDER_SCALE = 2;
12
+ function renderScale() {
13
+ const ratio = Number.isFinite(window.devicePixelRatio) ? window.devicePixelRatio : 1;
14
+ return Math.min(MAX_RENDER_SCALE, Math.max(1, ratio));
15
+ }
16
+ export function CodeMinimap({ lines, lineHeight, tabColumns, scrollerRef, scrollToLine, }) {
17
+ const hostRef = useRef(null);
18
+ const stageRef = useRef(null);
19
+ const canvasRef = useRef(null);
20
+ const thumbRef = useRef(null);
21
+ const [visible, setVisible] = useState(false);
22
+ const [supported, setSupported] = useState(true);
23
+ // This effect remains alive when the minimap returns null. That is what
24
+ // lets a newly overflowing scroller bring the host into existence without
25
+ // requiring an already measurable canvas.
26
+ useLayoutEffect(() => {
27
+ const scroller = scrollerRef.current;
28
+ if (scroller === null || lines.length === 0 || !supported) {
29
+ setVisible(false);
30
+ return;
31
+ }
32
+ let frame = 0;
33
+ const measure = () => {
34
+ frame = 0;
35
+ const next = needsMinimap(scroller.scrollHeight, scroller.clientHeight);
36
+ setVisible((current) => (current === next ? current : next));
37
+ };
38
+ const schedule = () => {
39
+ if (frame === 0)
40
+ frame = requestAnimationFrame(measure);
41
+ };
42
+ measure();
43
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(schedule);
44
+ observer?.observe(scroller);
45
+ if (scroller.firstElementChild instanceof HTMLElement) {
46
+ observer?.observe(scroller.firstElementChild);
47
+ }
48
+ window.addEventListener("resize", schedule);
49
+ return () => {
50
+ observer?.disconnect();
51
+ window.removeEventListener("resize", schedule);
52
+ if (frame !== 0)
53
+ cancelAnimationFrame(frame);
54
+ };
55
+ }, [lines.length, scrollerRef, supported]);
56
+ useLayoutEffect(() => {
57
+ if (!visible || !supported)
58
+ return;
59
+ const scroller = scrollerRef.current;
60
+ const host = hostRef.current;
61
+ const stage = stageRef.current;
62
+ const canvas = canvasRef.current;
63
+ const thumb = thumbRef.current;
64
+ if (scroller === null ||
65
+ host === null ||
66
+ stage === null ||
67
+ canvas === null ||
68
+ thumb === null) {
69
+ return;
70
+ }
71
+ const context = canvas.getContext("2d", { alpha: false });
72
+ const initialPalette = resolveMinimapPalette(host);
73
+ if (context === null || initialPalette === null) {
74
+ setSupported(false);
75
+ return;
76
+ }
77
+ let palette = initialPalette;
78
+ let trackHeight = 0;
79
+ let geometry = null;
80
+ let drag = null;
81
+ let frame = 0;
82
+ let paintPending = false;
83
+ let palettePending = false;
84
+ const alignToScrollport = () => {
85
+ const insets = computeScrollbarInsets({
86
+ offsetWidth: scroller.offsetWidth,
87
+ clientWidth: scroller.clientWidth,
88
+ offsetHeight: scroller.offsetHeight,
89
+ clientHeight: scroller.clientHeight,
90
+ });
91
+ host.style.right = `${insets.right}px`;
92
+ host.style.bottom = `${insets.bottom}px`;
93
+ };
94
+ const syncThumb = () => {
95
+ geometry = computeThumbGeometry({
96
+ scrollTop: scroller.scrollTop,
97
+ scrollHeight: scroller.scrollHeight,
98
+ clientHeight: scroller.clientHeight,
99
+ trackHeight,
100
+ });
101
+ thumb.style.height = `${geometry.height.toFixed(3)}px`;
102
+ thumb.style.transform = `translate3d(0, ${geometry.top.toFixed(3)}px, 0)`;
103
+ };
104
+ const paint = () => {
105
+ alignToScrollport();
106
+ const scale = renderScale();
107
+ const cssWidth = host.clientWidth;
108
+ const availableHeight = host.clientHeight;
109
+ const layout = createRasterLayout(lines.length, availableHeight, scale);
110
+ if (cssWidth <= 0 || layout === null) {
111
+ trackHeight = 0;
112
+ stage.style.height = "0px";
113
+ syncThumb();
114
+ return;
115
+ }
116
+ const backingWidth = Math.max(1, Math.round(cssWidth * scale));
117
+ if (canvas.width !== backingWidth)
118
+ canvas.width = backingWidth;
119
+ if (canvas.height !== layout.backingHeight)
120
+ canvas.height = layout.backingHeight;
121
+ trackHeight = layout.cssHeight;
122
+ stage.style.height = `${trackHeight}px`;
123
+ const image = context.createImageData(backingWidth, layout.backingHeight);
124
+ rasterizeMinimap({
125
+ pixels: new Uint32Array(image.data.buffer),
126
+ width: backingWidth,
127
+ height: layout.backingHeight,
128
+ lines,
129
+ lineIndexes: layout.lineIndexes,
130
+ tabColumns,
131
+ palette,
132
+ });
133
+ context.putImageData(image, 0, 0);
134
+ syncThumb();
135
+ };
136
+ const flush = () => {
137
+ frame = 0;
138
+ if (palettePending) {
139
+ palettePending = false;
140
+ const resolved = resolveMinimapPalette(host);
141
+ if (resolved === null) {
142
+ setSupported(false);
143
+ return;
144
+ }
145
+ palette = resolved;
146
+ }
147
+ if (paintPending) {
148
+ paintPending = false;
149
+ paint();
150
+ }
151
+ else {
152
+ syncThumb();
153
+ }
154
+ };
155
+ const schedule = () => {
156
+ if (frame === 0)
157
+ frame = requestAnimationFrame(flush);
158
+ };
159
+ const schedulePaint = () => {
160
+ paintPending = true;
161
+ schedule();
162
+ };
163
+ const schedulePalette = () => {
164
+ palettePending = true;
165
+ paintPending = true;
166
+ schedule();
167
+ };
168
+ const onScroll = () => schedule();
169
+ const onWheel = (event) => {
170
+ const delta = wheelDeltaPixels(event.deltaY, event.deltaMode, lineHeight, scroller.clientHeight);
171
+ if (delta === 0)
172
+ return;
173
+ event.preventDefault();
174
+ scroller.scrollTop += delta;
175
+ schedule();
176
+ };
177
+ const onStagePointerDown = (event) => {
178
+ if (event.button !== 0 || event.target === thumb)
179
+ return;
180
+ event.preventDefault();
181
+ const bounds = stage.getBoundingClientRect();
182
+ if (bounds.height <= 0 || trackHeight <= 0)
183
+ return;
184
+ const offset = (event.clientY - bounds.top) * (trackHeight / bounds.height);
185
+ scrollToLine(lineIndexForMapOffset({
186
+ offset,
187
+ trackHeight,
188
+ lineCount: lines.length,
189
+ }));
190
+ schedule();
191
+ };
192
+ const onThumbPointerDown = (event) => {
193
+ if (event.button !== 0)
194
+ return;
195
+ event.preventDefault();
196
+ event.stopPropagation();
197
+ syncThumb();
198
+ if (geometry === null)
199
+ return;
200
+ const bounds = stage.getBoundingClientRect();
201
+ drag = {
202
+ pointerId: event.pointerId,
203
+ startY: event.clientY,
204
+ startScrollTop: scroller.scrollTop,
205
+ coordinateScale: bounds.height > 0 ? trackHeight / bounds.height : 1,
206
+ geometry,
207
+ };
208
+ thumb.classList.add("is-dragging");
209
+ thumb.setPointerCapture(event.pointerId);
210
+ };
211
+ const onThumbPointerMove = (event) => {
212
+ if (drag === null || drag.pointerId !== event.pointerId)
213
+ return;
214
+ const delta = (event.clientY - drag.startY) * drag.coordinateScale;
215
+ scroller.scrollTop = scrollTopForThumbDelta(drag.startScrollTop, delta, drag.geometry);
216
+ schedule();
217
+ };
218
+ const finishDrag = (event, release) => {
219
+ if (drag === null || drag.pointerId !== event.pointerId)
220
+ return;
221
+ const pointerId = drag.pointerId;
222
+ drag = null;
223
+ thumb.classList.remove("is-dragging");
224
+ if (release && thumb.hasPointerCapture(pointerId)) {
225
+ thumb.releasePointerCapture(pointerId);
226
+ }
227
+ schedule();
228
+ };
229
+ const onThumbPointerUp = (event) => finishDrag(event, true);
230
+ const onThumbLostCapture = (event) => finishDrag(event, false);
231
+ scroller.addEventListener("scroll", onScroll, { passive: true });
232
+ host.addEventListener("wheel", onWheel, { passive: false });
233
+ stage.addEventListener("pointerdown", onStagePointerDown);
234
+ thumb.addEventListener("pointerdown", onThumbPointerDown);
235
+ thumb.addEventListener("pointermove", onThumbPointerMove);
236
+ thumb.addEventListener("pointerup", onThumbPointerUp);
237
+ thumb.addEventListener("pointercancel", onThumbPointerUp);
238
+ thumb.addEventListener("lostpointercapture", onThumbLostCapture);
239
+ const resizeObserver = typeof ResizeObserver === "undefined"
240
+ ? null
241
+ : new ResizeObserver((entries) => {
242
+ if (entries.some((entry) => entry.target === host || entry.target === scroller)) {
243
+ schedulePaint();
244
+ }
245
+ else {
246
+ // Dynamically measured wrapped rows change scrollHeight, but not
247
+ // the immutable source raster. Only the viewport thumb moves.
248
+ schedule();
249
+ }
250
+ });
251
+ resizeObserver?.observe(host);
252
+ resizeObserver?.observe(scroller);
253
+ if (scroller.firstElementChild instanceof HTMLElement) {
254
+ resizeObserver?.observe(scroller.firstElementChild);
255
+ }
256
+ const themeObserver = typeof MutationObserver === "undefined"
257
+ ? null
258
+ : new MutationObserver(schedulePalette);
259
+ themeObserver?.observe(document.documentElement, {
260
+ attributes: true,
261
+ attributeFilter: ["class", "data-theme"],
262
+ });
263
+ let densityQuery = null;
264
+ const onDensityChange = () => {
265
+ armDensityObserver();
266
+ schedulePaint();
267
+ };
268
+ const armDensityObserver = () => {
269
+ densityQuery?.removeEventListener("change", onDensityChange);
270
+ densityQuery = window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);
271
+ densityQuery.addEventListener("change", onDensityChange);
272
+ };
273
+ armDensityObserver();
274
+ window.addEventListener("resize", schedulePaint);
275
+ paint();
276
+ return () => {
277
+ scroller.removeEventListener("scroll", onScroll);
278
+ host.removeEventListener("wheel", onWheel);
279
+ stage.removeEventListener("pointerdown", onStagePointerDown);
280
+ thumb.removeEventListener("pointerdown", onThumbPointerDown);
281
+ thumb.removeEventListener("pointermove", onThumbPointerMove);
282
+ thumb.removeEventListener("pointerup", onThumbPointerUp);
283
+ thumb.removeEventListener("pointercancel", onThumbPointerUp);
284
+ thumb.removeEventListener("lostpointercapture", onThumbLostCapture);
285
+ resizeObserver?.disconnect();
286
+ themeObserver?.disconnect();
287
+ densityQuery?.removeEventListener("change", onDensityChange);
288
+ window.removeEventListener("resize", schedulePaint);
289
+ if (frame !== 0)
290
+ cancelAnimationFrame(frame);
291
+ };
292
+ }, [lineHeight, lines, scrollerRef, scrollToLine, supported, tabColumns, visible]);
293
+ if (!visible || !supported)
294
+ return null;
295
+ return (_jsx("div", { className: "ah-code-minimap", ref: hostRef, "aria-hidden": "true", role: "presentation", children: _jsxs("div", { className: "ah-code-minimap__stage", ref: stageRef, children: [_jsx("canvas", { className: "ah-code-minimap__text", ref: canvasRef }), _jsx("div", { className: "ah-code-minimap__slider", ref: thumbRef })] }) }));
296
+ }
@@ -0,0 +1,60 @@
1
+ export declare const MINIMAP_ROW_DEVICE_PIXELS = 2;
2
+ export declare const MINIMAP_MIN_THUMB_CSS_PIXELS = 8;
3
+ export interface MinimapRasterLayout {
4
+ readonly rowCount: number;
5
+ readonly backingHeight: number;
6
+ readonly cssHeight: number;
7
+ /** Zero-based source line for each painted row. `null` means identity. */
8
+ readonly lineIndexes: Uint32Array | null;
9
+ }
10
+ export interface MinimapThumbGeometry {
11
+ readonly top: number;
12
+ readonly height: number;
13
+ readonly maxTop: number;
14
+ readonly maxScroll: number;
15
+ readonly scrollPerTrackPixel: number;
16
+ }
17
+ export interface MinimapScrollbarInsets {
18
+ /** Width occupied by the native vertical scrollbar. */
19
+ readonly right: number;
20
+ /** Height occupied by the native horizontal scrollbar. */
21
+ readonly bottom: number;
22
+ }
23
+ /** The browser's scroll box is authoritative: it includes code padding and
24
+ * any horizontal scrollbar that reduced the vertical viewport. */
25
+ export declare function needsMinimap(scrollHeight: number, clientHeight: number): boolean;
26
+ /** Position an overlay inside the scrollport, leaving the browser-owned
27
+ * scrollbar gutters untouched. The code scroller has no borders, so its
28
+ * offset/client delta is exactly the classic scrollbar footprint; overlay
29
+ * scrollbars naturally report zero. */
30
+ export declare function computeScrollbarInsets(args: {
31
+ readonly offsetWidth: number;
32
+ readonly clientWidth: number;
33
+ readonly offsetHeight: number;
34
+ readonly clientHeight: number;
35
+ }): MinimapScrollbarInsets;
36
+ /** One representative source line per equal source interval. Endpoints are
37
+ * navigation concerns, not raster concerns; midpoint sampling avoids biasing
38
+ * the picture toward the first and last line of every interval. */
39
+ export declare function sampleLineIndexes(lineCount: number, rowCount: number): Uint32Array | null;
40
+ export declare function createRasterLayout(lineCount: number, availableCssHeight: number, renderScale: number): MinimapRasterLayout | null;
41
+ /** A scrollbar thumb over the part of the minimap that actually contains
42
+ * pixels. For an unsampled 100-line file that is a short track at the top;
43
+ * for a sampled file it is the full available pane height. */
44
+ export declare function computeThumbGeometry(args: {
45
+ readonly scrollTop: number;
46
+ readonly scrollHeight: number;
47
+ readonly clientHeight: number;
48
+ readonly trackHeight: number;
49
+ readonly minimumHeight?: number;
50
+ }): MinimapThumbGeometry;
51
+ /** Source-line navigation stays independent of raster sampling. The
52
+ * virtualizer resolves this index against measured wrapped-row heights. */
53
+ export declare function lineIndexForMapOffset(args: {
54
+ readonly offset: number;
55
+ readonly trackHeight: number;
56
+ readonly lineCount: number;
57
+ }): number;
58
+ export declare function scrollTopForThumbDelta(startScrollTop: number, delta: number, geometry: MinimapThumbGeometry): number;
59
+ /** WheelEvent delta units: pixels, lines, or pages. */
60
+ export declare function wheelDeltaPixels(delta: number, deltaMode: number, lineHeight: number, clientHeight: number): number;
@@ -0,0 +1,117 @@
1
+ // Geometry for a full-file, pane-bounded minimap.
2
+ //
3
+ // Sampling belongs only to the raster. The thumb and drag are projections of
4
+ // the real scroll element; a track click names a logical source line so the
5
+ // virtualizer can account for measured wrapping.
6
+ export const MINIMAP_ROW_DEVICE_PIXELS = 2;
7
+ export const MINIMAP_MIN_THUMB_CSS_PIXELS = 8;
8
+ const OVERFLOW_EPSILON = 1;
9
+ function clamp(value, minimum, maximum) {
10
+ return Math.min(maximum, Math.max(minimum, value));
11
+ }
12
+ function positive(value) {
13
+ return Number.isFinite(value) ? Math.max(0, value) : 0;
14
+ }
15
+ /** The browser's scroll box is authoritative: it includes code padding and
16
+ * any horizontal scrollbar that reduced the vertical viewport. */
17
+ export function needsMinimap(scrollHeight, clientHeight) {
18
+ const viewport = positive(clientHeight);
19
+ return viewport > 0 && positive(scrollHeight) - viewport > OVERFLOW_EPSILON;
20
+ }
21
+ /** Position an overlay inside the scrollport, leaving the browser-owned
22
+ * scrollbar gutters untouched. The code scroller has no borders, so its
23
+ * offset/client delta is exactly the classic scrollbar footprint; overlay
24
+ * scrollbars naturally report zero. */
25
+ export function computeScrollbarInsets(args) {
26
+ return {
27
+ right: Math.max(0, positive(args.offsetWidth) - positive(args.clientWidth)),
28
+ bottom: Math.max(0, positive(args.offsetHeight) - positive(args.clientHeight)),
29
+ };
30
+ }
31
+ /** One representative source line per equal source interval. Endpoints are
32
+ * navigation concerns, not raster concerns; midpoint sampling avoids biasing
33
+ * the picture toward the first and last line of every interval. */
34
+ export function sampleLineIndexes(lineCount, rowCount) {
35
+ const lines = Math.max(0, Math.floor(lineCount));
36
+ const rows = Math.max(0, Math.floor(rowCount));
37
+ if (lines === 0 || rows === 0 || lines <= rows)
38
+ return null;
39
+ const sampled = new Uint32Array(rows);
40
+ for (let row = 0; row < rows; row += 1) {
41
+ const from = Math.floor((row * lines) / rows);
42
+ const to = Math.max(from, Math.floor(((row + 1) * lines) / rows) - 1);
43
+ sampled[row] = Math.floor((from + to) / 2);
44
+ }
45
+ return sampled;
46
+ }
47
+ export function createRasterLayout(lineCount, availableCssHeight, renderScale) {
48
+ const lines = Math.max(0, Math.floor(lineCount));
49
+ const cssHeight = positive(availableCssHeight);
50
+ const scale = positive(renderScale);
51
+ if (lines === 0 || cssHeight === 0 || scale === 0)
52
+ return null;
53
+ const availableDeviceHeight = Math.floor(cssHeight * scale);
54
+ const capacity = Math.floor(availableDeviceHeight / MINIMAP_ROW_DEVICE_PIXELS);
55
+ if (capacity === 0)
56
+ return null;
57
+ const rowCount = Math.min(lines, capacity);
58
+ const backingHeight = rowCount * MINIMAP_ROW_DEVICE_PIXELS;
59
+ return {
60
+ rowCount,
61
+ backingHeight,
62
+ cssHeight: backingHeight / scale,
63
+ lineIndexes: sampleLineIndexes(lines, rowCount),
64
+ };
65
+ }
66
+ /** A scrollbar thumb over the part of the minimap that actually contains
67
+ * pixels. For an unsampled 100-line file that is a short track at the top;
68
+ * for a sampled file it is the full available pane height. */
69
+ export function computeThumbGeometry(args) {
70
+ const trackHeight = positive(args.trackHeight);
71
+ const scrollHeight = positive(args.scrollHeight);
72
+ const clientHeight = positive(args.clientHeight);
73
+ const maxScroll = Math.max(0, scrollHeight - clientHeight);
74
+ if (trackHeight === 0 || scrollHeight === 0 || maxScroll === 0) {
75
+ return {
76
+ top: 0,
77
+ height: trackHeight,
78
+ maxTop: 0,
79
+ maxScroll,
80
+ scrollPerTrackPixel: 0,
81
+ };
82
+ }
83
+ const minimumHeight = positive(args.minimumHeight ?? MINIMAP_MIN_THUMB_CSS_PIXELS);
84
+ const height = clamp((clientHeight / scrollHeight) * trackHeight, minimumHeight, trackHeight);
85
+ const maxTop = Math.max(0, trackHeight - height);
86
+ const top = maxTop === 0 ? 0 : (clamp(positive(args.scrollTop), 0, maxScroll) / maxScroll) * maxTop;
87
+ return {
88
+ top,
89
+ height,
90
+ maxTop,
91
+ maxScroll,
92
+ scrollPerTrackPixel: maxTop === 0 ? 0 : maxScroll / maxTop,
93
+ };
94
+ }
95
+ /** Source-line navigation stays independent of raster sampling. The
96
+ * virtualizer resolves this index against measured wrapped-row heights. */
97
+ export function lineIndexForMapOffset(args) {
98
+ const trackHeight = positive(args.trackHeight);
99
+ const lineCount = Math.max(0, Math.floor(args.lineCount));
100
+ if (trackHeight === 0 || lineCount === 0)
101
+ return 0;
102
+ const fraction = clamp(positive(args.offset) / trackHeight, 0, 1);
103
+ return Math.min(lineCount - 1, Math.floor(fraction * lineCount));
104
+ }
105
+ export function scrollTopForThumbDelta(startScrollTop, delta, geometry) {
106
+ return clamp(positive(startScrollTop) + delta * geometry.scrollPerTrackPixel, 0, geometry.maxScroll);
107
+ }
108
+ /** WheelEvent delta units: pixels, lines, or pages. */
109
+ export function wheelDeltaPixels(delta, deltaMode, lineHeight, clientHeight) {
110
+ if (!Number.isFinite(delta))
111
+ return 0;
112
+ if (deltaMode === 1)
113
+ return delta * positive(lineHeight);
114
+ if (deltaMode === 2)
115
+ return delta * positive(clientHeight);
116
+ return delta;
117
+ }
@@ -0,0 +1,2 @@
1
+ import type { MinimapPalette } from "./raster.js";
2
+ export declare function resolveMinimapPalette(host: HTMLElement): MinimapPalette | null;
@@ -0,0 +1,73 @@
1
+ // Canvas cannot inherit the file viewer's CSS palette. Resolve the same custom
2
+ // properties through a live descendant, then let a one-pixel canvas normalize
3
+ // CSS Color 4 values and alpha-composite them over the viewer ground.
4
+ import { packRgba } from "./raster.js";
5
+ const TOKEN_KINDS = [
6
+ "comment",
7
+ "string",
8
+ "number",
9
+ "keyword",
10
+ "type",
11
+ "function",
12
+ "constant",
13
+ "property",
14
+ "tag",
15
+ "operator",
16
+ "plain",
17
+ ];
18
+ const TOKEN_VARIABLE = {
19
+ comment: "--vf-text-faint",
20
+ string: "--ah-syn-string",
21
+ number: "--ah-syn-value",
22
+ keyword: "--ah-syn-keyword",
23
+ type: "--ah-syn-type",
24
+ function: "--ah-syn-function",
25
+ constant: "--ah-syn-value",
26
+ property: "--ah-syn-property",
27
+ tag: "--ah-syn-keyword",
28
+ operator: "--vf-text-tertiary",
29
+ plain: "--vf-text-secondary",
30
+ };
31
+ const BACKGROUND_VARIABLE = "--vf-chrome-solid";
32
+ const TOKEN_OPACITY = 0.58;
33
+ function packedPixel(context, background, foreground, opacity) {
34
+ context.clearRect(0, 0, 1, 1);
35
+ context.globalAlpha = 1;
36
+ context.fillStyle = background;
37
+ context.fillRect(0, 0, 1, 1);
38
+ context.globalAlpha = opacity;
39
+ context.fillStyle = foreground;
40
+ context.fillRect(0, 0, 1, 1);
41
+ context.globalAlpha = 1;
42
+ const [red, green, blue, alpha] = context.getImageData(0, 0, 1, 1).data;
43
+ return packRgba(red, green, blue, alpha);
44
+ }
45
+ export function resolveMinimapPalette(host) {
46
+ const scratch = document.createElement("canvas");
47
+ scratch.width = 1;
48
+ scratch.height = 1;
49
+ const context = scratch.getContext("2d", { willReadFrequently: true });
50
+ if (context === null)
51
+ return null;
52
+ const probe = document.createElement("span");
53
+ probe.style.position = "absolute";
54
+ probe.style.visibility = "hidden";
55
+ probe.style.pointerEvents = "none";
56
+ host.appendChild(probe);
57
+ try {
58
+ const resolve = (variable) => {
59
+ probe.style.color = `var(${variable})`;
60
+ return getComputedStyle(probe).color;
61
+ };
62
+ const backgroundCss = resolve(BACKGROUND_VARIABLE);
63
+ const background = packedPixel(context, backgroundCss, backgroundCss, 1);
64
+ const token = {};
65
+ for (const kind of TOKEN_KINDS) {
66
+ token[kind] = packedPixel(context, backgroundCss, resolve(TOKEN_VARIABLE[kind]), TOKEN_OPACITY);
67
+ }
68
+ return { background, token };
69
+ }
70
+ finally {
71
+ probe.remove();
72
+ }
73
+ }
@@ -0,0 +1,19 @@
1
+ import type { TokenKind, TokenLine } from "../syntax/index.js";
2
+ export declare const MINIMAP_CHARACTER_DEVICE_PIXELS = 1;
3
+ export declare const MINIMAP_CHARACTER_HEIGHT_DEVICE_PIXELS = 2;
4
+ export declare const MINIMAP_LEFT_GUTTER_DEVICE_PIXELS = 2;
5
+ export declare const MINIMAP_MAX_COLUMNS = 96;
6
+ export interface MinimapPalette {
7
+ readonly background: number;
8
+ readonly token: Readonly<Record<TokenKind, number>>;
9
+ }
10
+ export declare function packRgba(red: number, green: number, blue: number, alpha?: number): number;
11
+ export declare function rasterizeMinimap(args: {
12
+ readonly pixels: Uint32Array;
13
+ readonly width: number;
14
+ readonly height: number;
15
+ readonly lines: readonly TokenLine[];
16
+ readonly lineIndexes: Uint32Array | null;
17
+ readonly tabColumns: number;
18
+ readonly palette: MinimapPalette;
19
+ }): void;