@pierre/diffs 1.0.0-beta.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 (441) hide show
  1. package/LICENSE.txt +201 -0
  2. package/README.md +26 -0
  3. package/dist/components/File.d.ts +78 -0
  4. package/dist/components/File.d.ts.map +1 -0
  5. package/dist/components/File.js +322 -0
  6. package/dist/components/File.js.map +1 -0
  7. package/dist/components/FileDiff.d.ts +90 -0
  8. package/dist/components/FileDiff.d.ts.map +1 -0
  9. package/dist/components/FileDiff.js +392 -0
  10. package/dist/components/FileDiff.js.map +1 -0
  11. package/dist/components/FileStream.d.ts +40 -0
  12. package/dist/components/FileStream.d.ts.map +1 -0
  13. package/dist/components/FileStream.js +161 -0
  14. package/dist/components/FileStream.js.map +1 -0
  15. package/dist/components/web-components.d.ts +5 -0
  16. package/dist/components/web-components.d.ts.map +1 -0
  17. package/dist/components/web-components.js +25 -0
  18. package/dist/components/web-components.js.map +1 -0
  19. package/dist/constants.d.ts +21 -0
  20. package/dist/constants.d.ts.map +1 -0
  21. package/dist/constants.js +23 -0
  22. package/dist/constants.js.map +1 -0
  23. package/dist/highlighter/languages/areLanguagesAttached.d.ts +7 -0
  24. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -0
  25. package/dist/highlighter/languages/areLanguagesAttached.js +11 -0
  26. package/dist/highlighter/languages/areLanguagesAttached.js.map +1 -0
  27. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +9 -0
  28. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -0
  29. package/dist/highlighter/languages/attachResolvedLanguages.js +20 -0
  30. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -0
  31. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts +5 -0
  32. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -0
  33. package/dist/highlighter/languages/cleanUpResolvedLanguages.js +11 -0
  34. package/dist/highlighter/languages/cleanUpResolvedLanguages.js.map +1 -0
  35. package/dist/highlighter/languages/constants.d.ts +11 -0
  36. package/dist/highlighter/languages/constants.d.ts.map +1 -0
  37. package/dist/highlighter/languages/constants.js +8 -0
  38. package/dist/highlighter/languages/constants.js.map +1 -0
  39. package/dist/highlighter/languages/getResolvedLanguages.d.ts +9 -0
  40. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -0
  41. package/dist/highlighter/languages/getResolvedLanguages.js +16 -0
  42. package/dist/highlighter/languages/getResolvedLanguages.js.map +1 -0
  43. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +9 -0
  44. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -0
  45. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js +11 -0
  46. package/dist/highlighter/languages/getResolvedOrResolveLanguage.js.map +1 -0
  47. package/dist/highlighter/languages/hasResolvedLanguages.d.ts +7 -0
  48. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -0
  49. package/dist/highlighter/languages/hasResolvedLanguages.js +11 -0
  50. package/dist/highlighter/languages/hasResolvedLanguages.js.map +1 -0
  51. package/dist/highlighter/languages/resolveLanguage.d.ts +9 -0
  52. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -0
  53. package/dist/highlighter/languages/resolveLanguage.js +30 -0
  54. package/dist/highlighter/languages/resolveLanguage.js.map +1 -0
  55. package/dist/highlighter/languages/resolveLanguages.d.ts +9 -0
  56. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -0
  57. package/dist/highlighter/languages/resolveLanguages.js +25 -0
  58. package/dist/highlighter/languages/resolveLanguages.js.map +1 -0
  59. package/dist/highlighter/shared_highlighter.d.ts +21 -0
  60. package/dist/highlighter/shared_highlighter.d.ts.map +1 -0
  61. package/dist/highlighter/shared_highlighter.js +71 -0
  62. package/dist/highlighter/shared_highlighter.js.map +1 -0
  63. package/dist/highlighter/themes/areThemesAttached.d.ts +7 -0
  64. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -0
  65. package/dist/highlighter/themes/areThemesAttached.js +12 -0
  66. package/dist/highlighter/themes/areThemesAttached.js.map +1 -0
  67. package/dist/highlighter/themes/attachResolvedThemes.d.ts +7 -0
  68. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -0
  69. package/dist/highlighter/themes/attachResolvedThemes.js +24 -0
  70. package/dist/highlighter/themes/attachResolvedThemes.js.map +1 -0
  71. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts +5 -0
  72. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -0
  73. package/dist/highlighter/themes/cleanUpResolvedThemes.js +11 -0
  74. package/dist/highlighter/themes/cleanUpResolvedThemes.js.map +1 -0
  75. package/dist/highlighter/themes/constants.d.ts +11 -0
  76. package/dist/highlighter/themes/constants.d.ts.map +1 -0
  77. package/dist/highlighter/themes/constants.js +9 -0
  78. package/dist/highlighter/themes/constants.js.map +1 -0
  79. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +7 -0
  80. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -0
  81. package/dist/highlighter/themes/getResolvedOrResolveTheme.js +11 -0
  82. package/dist/highlighter/themes/getResolvedOrResolveTheme.js.map +1 -0
  83. package/dist/highlighter/themes/getResolvedThemes.d.ts +7 -0
  84. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -0
  85. package/dist/highlighter/themes/getResolvedThemes.js +16 -0
  86. package/dist/highlighter/themes/getResolvedThemes.js.map +1 -0
  87. package/dist/highlighter/themes/hasResolvedThemes.d.ts +7 -0
  88. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -0
  89. package/dist/highlighter/themes/hasResolvedThemes.js +11 -0
  90. package/dist/highlighter/themes/hasResolvedThemes.js.map +1 -0
  91. package/dist/highlighter/themes/registerCustomTheme.d.ts +7 -0
  92. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -0
  93. package/dist/highlighter/themes/registerCustomTheme.js +14 -0
  94. package/dist/highlighter/themes/registerCustomTheme.js.map +1 -0
  95. package/dist/highlighter/themes/resolveTheme.d.ts +7 -0
  96. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -0
  97. package/dist/highlighter/themes/resolveTheme.js +35 -0
  98. package/dist/highlighter/themes/resolveTheme.js.map +1 -0
  99. package/dist/highlighter/themes/resolveThemes.d.ts +7 -0
  100. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -0
  101. package/dist/highlighter/themes/resolveThemes.js +21 -0
  102. package/dist/highlighter/themes/resolveThemes.js.map +1 -0
  103. package/dist/index.d.ts +84 -0
  104. package/dist/index.js +83 -0
  105. package/dist/managers/LineSelectionManager.d.ts +64 -0
  106. package/dist/managers/LineSelectionManager.d.ts.map +1 -0
  107. package/dist/managers/LineSelectionManager.js +276 -0
  108. package/dist/managers/LineSelectionManager.js.map +1 -0
  109. package/dist/managers/MouseEventManager.d.ts +64 -0
  110. package/dist/managers/MouseEventManager.d.ts.map +1 -0
  111. package/dist/managers/MouseEventManager.js +244 -0
  112. package/dist/managers/MouseEventManager.js.map +1 -0
  113. package/dist/managers/ResizeManager.d.ts +11 -0
  114. package/dist/managers/ResizeManager.d.ts.map +1 -0
  115. package/dist/managers/ResizeManager.js +132 -0
  116. package/dist/managers/ResizeManager.js.map +1 -0
  117. package/dist/managers/ScrollSyncManager.d.ts +15 -0
  118. package/dist/managers/ScrollSyncManager.d.ts.map +1 -0
  119. package/dist/managers/ScrollSyncManager.js +54 -0
  120. package/dist/managers/ScrollSyncManager.js.map +1 -0
  121. package/dist/managers/UniversalRenderingManager.d.ts +6 -0
  122. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -0
  123. package/dist/managers/UniversalRenderingManager.js +32 -0
  124. package/dist/managers/UniversalRenderingManager.js.map +1 -0
  125. package/dist/react/File.d.ts +19 -0
  126. package/dist/react/File.d.ts.map +1 -0
  127. package/dist/react/File.js +36 -0
  128. package/dist/react/File.js.map +1 -0
  129. package/dist/react/FileDiff.d.ts +22 -0
  130. package/dist/react/FileDiff.d.ts.map +1 -0
  131. package/dist/react/FileDiff.js +36 -0
  132. package/dist/react/FileDiff.js.map +1 -0
  133. package/dist/react/MultiFileDiff.d.ts +24 -0
  134. package/dist/react/MultiFileDiff.d.ts.map +1 -0
  135. package/dist/react/MultiFileDiff.js +38 -0
  136. package/dist/react/MultiFileDiff.js.map +1 -0
  137. package/dist/react/PatchDiff.d.ts +21 -0
  138. package/dist/react/PatchDiff.d.ts.map +1 -0
  139. package/dist/react/PatchDiff.js +42 -0
  140. package/dist/react/PatchDiff.js.map +1 -0
  141. package/dist/react/WorkerPoolContext.d.ts +20 -0
  142. package/dist/react/WorkerPoolContext.d.ts.map +1 -0
  143. package/dist/react/WorkerPoolContext.js +41 -0
  144. package/dist/react/WorkerPoolContext.js.map +1 -0
  145. package/dist/react/constants.d.ts +7 -0
  146. package/dist/react/constants.d.ts.map +1 -0
  147. package/dist/react/constants.js +11 -0
  148. package/dist/react/constants.js.map +1 -0
  149. package/dist/react/index.d.ts +17 -0
  150. package/dist/react/index.js +14 -0
  151. package/dist/react/jsx.d.ts +12 -0
  152. package/dist/react/jsx.d.ts.map +1 -0
  153. package/dist/react/types.d.ts +34 -0
  154. package/dist/react/types.d.ts.map +1 -0
  155. package/dist/react/types.js +1 -0
  156. package/dist/react/utils/renderDiffChildren.d.ts +29 -0
  157. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -0
  158. package/dist/react/utils/renderDiffChildren.js +32 -0
  159. package/dist/react/utils/renderDiffChildren.js.map +1 -0
  160. package/dist/react/utils/renderFileChildren.d.ts +25 -0
  161. package/dist/react/utils/renderFileChildren.d.ts.map +1 -0
  162. package/dist/react/utils/renderFileChildren.js +28 -0
  163. package/dist/react/utils/renderFileChildren.js.map +1 -0
  164. package/dist/react/utils/templateRender.d.ts +7 -0
  165. package/dist/react/utils/templateRender.d.ts.map +1 -0
  166. package/dist/react/utils/templateRender.js +14 -0
  167. package/dist/react/utils/templateRender.js.map +1 -0
  168. package/dist/react/utils/useFileDiffInstance.d.ts +31 -0
  169. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -0
  170. package/dist/react/utils/useFileDiffInstance.js +54 -0
  171. package/dist/react/utils/useFileDiffInstance.js.map +1 -0
  172. package/dist/react/utils/useFileInstance.d.ts +27 -0
  173. package/dist/react/utils/useFileInstance.d.ts.map +1 -0
  174. package/dist/react/utils/useFileInstance.js +49 -0
  175. package/dist/react/utils/useFileInstance.js.map +1 -0
  176. package/dist/react/utils/useStableCallback.d.ts +5 -0
  177. package/dist/react/utils/useStableCallback.d.ts.map +1 -0
  178. package/dist/react/utils/useStableCallback.js +14 -0
  179. package/dist/react/utils/useStableCallback.js.map +1 -0
  180. package/dist/renderers/DiffHunksRenderer.d.ts +62 -0
  181. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -0
  182. package/dist/renderers/DiffHunksRenderer.js +651 -0
  183. package/dist/renderers/DiffHunksRenderer.js.map +1 -0
  184. package/dist/renderers/FileRenderer.d.ts +49 -0
  185. package/dist/renderers/FileRenderer.d.ts.map +1 -0
  186. package/dist/renderers/FileRenderer.js +239 -0
  187. package/dist/renderers/FileRenderer.js.map +1 -0
  188. package/dist/shiki-stream/index.d.ts +4 -0
  189. package/dist/shiki-stream/index.js +4 -0
  190. package/dist/shiki-stream/stream.d.ts +17 -0
  191. package/dist/shiki-stream/stream.d.ts.map +1 -0
  192. package/dist/shiki-stream/stream.js +32 -0
  193. package/dist/shiki-stream/stream.js.map +1 -0
  194. package/dist/shiki-stream/tokenizer.d.ts +24 -0
  195. package/dist/shiki-stream/tokenizer.d.ts.map +1 -0
  196. package/dist/shiki-stream/tokenizer.js +71 -0
  197. package/dist/shiki-stream/tokenizer.js.map +1 -0
  198. package/dist/shiki-stream/types.d.ts +45 -0
  199. package/dist/shiki-stream/types.d.ts.map +1 -0
  200. package/dist/shiki-stream/types.js +0 -0
  201. package/dist/sprite.d.ts +6 -0
  202. package/dist/sprite.d.ts.map +1 -0
  203. package/dist/sprite.js +55 -0
  204. package/dist/sprite.js.map +1 -0
  205. package/dist/ssr/FileDiffReact.d.ts +21 -0
  206. package/dist/ssr/FileDiffReact.d.ts.map +1 -0
  207. package/dist/ssr/FileDiffReact.js +53 -0
  208. package/dist/ssr/FileDiffReact.js.map +1 -0
  209. package/dist/ssr/index.d.ts +6 -0
  210. package/dist/ssr/index.js +6 -0
  211. package/dist/ssr/preloadDiffs.d.ts +72 -0
  212. package/dist/ssr/preloadDiffs.d.ts.map +1 -0
  213. package/dist/ssr/preloadDiffs.js +66 -0
  214. package/dist/ssr/preloadDiffs.js.map +1 -0
  215. package/dist/ssr/preloadFile.d.ts +23 -0
  216. package/dist/ssr/preloadFile.d.ts.map +1 -0
  217. package/dist/ssr/preloadFile.js +26 -0
  218. package/dist/ssr/preloadFile.js.map +1 -0
  219. package/dist/ssr/preloadPatchFile.d.ts +15 -0
  220. package/dist/ssr/preloadPatchFile.d.ts.map +1 -0
  221. package/dist/ssr/preloadPatchFile.js +17 -0
  222. package/dist/ssr/preloadPatchFile.js.map +1 -0
  223. package/dist/ssr/renderHTML.d.ts +7 -0
  224. package/dist/ssr/renderHTML.d.ts.map +1 -0
  225. package/dist/ssr/renderHTML.js +11 -0
  226. package/dist/ssr/renderHTML.js.map +1 -0
  227. package/dist/string-import.d.ts +6 -0
  228. package/dist/string-import.d.ts.map +1 -0
  229. package/dist/style.js +6 -0
  230. package/dist/style.js.map +1 -0
  231. package/dist/themes/pierre-dark.js +1328 -0
  232. package/dist/themes/pierre-dark.js.map +1 -0
  233. package/dist/themes/pierre-light.js +1328 -0
  234. package/dist/themes/pierre-light.js.map +1 -0
  235. package/dist/types.d.ts +238 -0
  236. package/dist/types.d.ts.map +1 -0
  237. package/dist/types.js +0 -0
  238. package/dist/utils/areFilesEqual.d.ts +7 -0
  239. package/dist/utils/areFilesEqual.d.ts.map +1 -0
  240. package/dist/utils/areFilesEqual.js +8 -0
  241. package/dist/utils/areFilesEqual.js.map +1 -0
  242. package/dist/utils/areObjectsEqual.d.ts +5 -0
  243. package/dist/utils/areObjectsEqual.d.ts.map +1 -0
  244. package/dist/utils/areObjectsEqual.js +18 -0
  245. package/dist/utils/areObjectsEqual.js.map +1 -0
  246. package/dist/utils/areOptionsEqual.d.ts +9 -0
  247. package/dist/utils/areOptionsEqual.d.ts.map +1 -0
  248. package/dist/utils/areOptionsEqual.js +12 -0
  249. package/dist/utils/areOptionsEqual.js.map +1 -0
  250. package/dist/utils/areSelectionsEqual.d.ts +7 -0
  251. package/dist/utils/areSelectionsEqual.d.ts.map +1 -0
  252. package/dist/utils/areSelectionsEqual.js +8 -0
  253. package/dist/utils/areSelectionsEqual.js.map +1 -0
  254. package/dist/utils/areThemesEqual.d.ts +7 -0
  255. package/dist/utils/areThemesEqual.d.ts.map +1 -0
  256. package/dist/utils/areThemesEqual.js +9 -0
  257. package/dist/utils/areThemesEqual.js.map +1 -0
  258. package/dist/utils/cleanLastNewline.d.ts +5 -0
  259. package/dist/utils/cleanLastNewline.d.ts.map +1 -0
  260. package/dist/utils/cleanLastNewline.js +8 -0
  261. package/dist/utils/cleanLastNewline.js.map +1 -0
  262. package/dist/utils/createAnnotationElement.d.ts +8 -0
  263. package/dist/utils/createAnnotationElement.d.ts.map +1 -0
  264. package/dist/utils/createAnnotationElement.js +21 -0
  265. package/dist/utils/createAnnotationElement.js.map +1 -0
  266. package/dist/utils/createAnnotationWrapperNode.d.ts +5 -0
  267. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -0
  268. package/dist/utils/createAnnotationWrapperNode.js +12 -0
  269. package/dist/utils/createAnnotationWrapperNode.js.map +1 -0
  270. package/dist/utils/createCodeNode.d.ts +12 -0
  271. package/dist/utils/createCodeNode.d.ts.map +1 -0
  272. package/dist/utils/createCodeNode.js +12 -0
  273. package/dist/utils/createCodeNode.js.map +1 -0
  274. package/dist/utils/createEmptyRowBuffer.d.ts +7 -0
  275. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -0
  276. package/dist/utils/createEmptyRowBuffer.js +16 -0
  277. package/dist/utils/createEmptyRowBuffer.js.map +1 -0
  278. package/dist/utils/createFileHeaderElement.d.ts +17 -0
  279. package/dist/utils/createFileHeaderElement.d.ts.map +1 -0
  280. package/dist/utils/createFileHeaderElement.js +84 -0
  281. package/dist/utils/createFileHeaderElement.js.map +1 -0
  282. package/dist/utils/createHoverContentNode.d.ts +5 -0
  283. package/dist/utils/createHoverContentNode.d.ts.map +1 -0
  284. package/dist/utils/createHoverContentNode.js +15 -0
  285. package/dist/utils/createHoverContentNode.js.map +1 -0
  286. package/dist/utils/createNoNewlineElement.d.ts +7 -0
  287. package/dist/utils/createNoNewlineElement.d.ts.map +1 -0
  288. package/dist/utils/createNoNewlineElement.js +24 -0
  289. package/dist/utils/createNoNewlineElement.js.map +1 -0
  290. package/dist/utils/createPreElement.d.ts +18 -0
  291. package/dist/utils/createPreElement.d.ts.map +1 -0
  292. package/dist/utils/createPreElement.js +28 -0
  293. package/dist/utils/createPreElement.js.map +1 -0
  294. package/dist/utils/createRowNodes.d.ts +8 -0
  295. package/dist/utils/createRowNodes.d.ts.map +1 -0
  296. package/dist/utils/createRowNodes.js +20 -0
  297. package/dist/utils/createRowNodes.js.map +1 -0
  298. package/dist/utils/createSeparator.d.ts +25 -0
  299. package/dist/utils/createSeparator.d.ts.map +1 -0
  300. package/dist/utils/createSeparator.js +69 -0
  301. package/dist/utils/createSeparator.js.map +1 -0
  302. package/dist/utils/createSpanNodeFromToken.d.ts +7 -0
  303. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -0
  304. package/dist/utils/createSpanNodeFromToken.js +13 -0
  305. package/dist/utils/createSpanNodeFromToken.js.map +1 -0
  306. package/dist/utils/createStyleElement.d.ts +7 -0
  307. package/dist/utils/createStyleElement.d.ts.map +1 -0
  308. package/dist/utils/createStyleElement.js +19 -0
  309. package/dist/utils/createStyleElement.js.map +1 -0
  310. package/dist/utils/createTransformerWithState.d.ts +13 -0
  311. package/dist/utils/createTransformerWithState.d.ts.map +1 -0
  312. package/dist/utils/createTransformerWithState.js +56 -0
  313. package/dist/utils/createTransformerWithState.js.map +1 -0
  314. package/dist/utils/createUnsafeCSSStyleNode.d.ts +5 -0
  315. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -0
  316. package/dist/utils/createUnsafeCSSStyleNode.js +12 -0
  317. package/dist/utils/createUnsafeCSSStyleNode.js.map +1 -0
  318. package/dist/utils/cssWrappers.d.ts +6 -0
  319. package/dist/utils/cssWrappers.d.ts.map +1 -0
  320. package/dist/utils/cssWrappers.js +21 -0
  321. package/dist/utils/cssWrappers.js.map +1 -0
  322. package/dist/utils/diffAcceptRejectHunk.d.ts +7 -0
  323. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -0
  324. package/dist/utils/diffAcceptRejectHunk.js +82 -0
  325. package/dist/utils/diffAcceptRejectHunk.js.map +1 -0
  326. package/dist/utils/formatCSSVariablePrefix.d.ts +5 -0
  327. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -0
  328. package/dist/utils/formatCSSVariablePrefix.js +8 -0
  329. package/dist/utils/formatCSSVariablePrefix.js.map +1 -0
  330. package/dist/utils/getFiletypeFromFileName.d.ts +9 -0
  331. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -0
  332. package/dist/utils/getFiletypeFromFileName.js +343 -0
  333. package/dist/utils/getFiletypeFromFileName.js.map +1 -0
  334. package/dist/utils/getHighlighterOptions.d.ts +14 -0
  335. package/dist/utils/getHighlighterOptions.d.ts.map +1 -0
  336. package/dist/utils/getHighlighterOptions.js +13 -0
  337. package/dist/utils/getHighlighterOptions.js.map +1 -0
  338. package/dist/utils/getHighlighterThemeStyles.d.ts +16 -0
  339. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -0
  340. package/dist/utils/getHighlighterThemeStyles.js +40 -0
  341. package/dist/utils/getHighlighterThemeStyles.js.map +1 -0
  342. package/dist/utils/getHunkSeparatorSlotName.d.ts +5 -0
  343. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -0
  344. package/dist/utils/getHunkSeparatorSlotName.js +8 -0
  345. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -0
  346. package/dist/utils/getIconForType.d.ts +8 -0
  347. package/dist/utils/getIconForType.d.ts.map +1 -0
  348. package/dist/utils/getIconForType.js +15 -0
  349. package/dist/utils/getIconForType.js.map +1 -0
  350. package/dist/utils/getLineAnnotationName.d.ts +7 -0
  351. package/dist/utils/getLineAnnotationName.d.ts.map +1 -0
  352. package/dist/utils/getLineAnnotationName.js +8 -0
  353. package/dist/utils/getLineAnnotationName.js.map +1 -0
  354. package/dist/utils/getLineEndingType.d.ts +5 -0
  355. package/dist/utils/getLineEndingType.d.ts.map +1 -0
  356. package/dist/utils/getLineEndingType.js +11 -0
  357. package/dist/utils/getLineEndingType.js.map +1 -0
  358. package/dist/utils/getLineNodes.d.ts +7 -0
  359. package/dist/utils/getLineNodes.d.ts.map +1 -0
  360. package/dist/utils/getLineNodes.js +15 -0
  361. package/dist/utils/getLineNodes.js.map +1 -0
  362. package/dist/utils/getSingularPatch.d.ts +7 -0
  363. package/dist/utils/getSingularPatch.d.ts.map +1 -0
  364. package/dist/utils/getSingularPatch.js +20 -0
  365. package/dist/utils/getSingularPatch.js.map +1 -0
  366. package/dist/utils/getThemes.d.ts +7 -0
  367. package/dist/utils/getThemes.d.ts.map +1 -0
  368. package/dist/utils/getThemes.js +16 -0
  369. package/dist/utils/getThemes.js.map +1 -0
  370. package/dist/utils/getTotalLineCountFromHunks.d.ts +7 -0
  371. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -0
  372. package/dist/utils/getTotalLineCountFromHunks.js +10 -0
  373. package/dist/utils/getTotalLineCountFromHunks.js.map +1 -0
  374. package/dist/utils/hast_utils.d.ts +31 -0
  375. package/dist/utils/hast_utils.d.ts.map +1 -0
  376. package/dist/utils/hast_utils.js +42 -0
  377. package/dist/utils/hast_utils.js.map +1 -0
  378. package/dist/utils/isWorkerContext.d.ts +5 -0
  379. package/dist/utils/isWorkerContext.d.ts.map +1 -0
  380. package/dist/utils/isWorkerContext.js +8 -0
  381. package/dist/utils/isWorkerContext.js.map +1 -0
  382. package/dist/utils/parseDiffDecorations.d.ts +31 -0
  383. package/dist/utils/parseDiffDecorations.d.ts.map +1 -0
  384. package/dist/utils/parseDiffDecorations.js +34 -0
  385. package/dist/utils/parseDiffDecorations.js.map +1 -0
  386. package/dist/utils/parseDiffFromFile.d.ts +14 -0
  387. package/dist/utils/parseDiffFromFile.d.ts.map +1 -0
  388. package/dist/utils/parseDiffFromFile.js +23 -0
  389. package/dist/utils/parseDiffFromFile.js.map +1 -0
  390. package/dist/utils/parseLineType.d.ts +11 -0
  391. package/dist/utils/parseLineType.d.ts.map +1 -0
  392. package/dist/utils/parseLineType.js +16 -0
  393. package/dist/utils/parseLineType.js.map +1 -0
  394. package/dist/utils/parsePatchFiles.d.ts +16 -0
  395. package/dist/utils/parsePatchFiles.d.ts.map +1 -0
  396. package/dist/utils/parsePatchFiles.js +204 -0
  397. package/dist/utils/parsePatchFiles.js.map +1 -0
  398. package/dist/utils/prerenderHTMLIfNecessary.d.ts +5 -0
  399. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -0
  400. package/dist/utils/prerenderHTMLIfNecessary.js +10 -0
  401. package/dist/utils/prerenderHTMLIfNecessary.js.map +1 -0
  402. package/dist/utils/processLine.d.ts +8 -0
  403. package/dist/utils/processLine.d.ts.map +1 -0
  404. package/dist/utils/processLine.js +42 -0
  405. package/dist/utils/processLine.js.map +1 -0
  406. package/dist/utils/renderDiffWithHighlighter.d.ts +7 -0
  407. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -0
  408. package/dist/utils/renderDiffWithHighlighter.js +323 -0
  409. package/dist/utils/renderDiffWithHighlighter.js.map +1 -0
  410. package/dist/utils/renderFileWithHighlighter.d.ts +10 -0
  411. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -0
  412. package/dist/utils/renderFileWithHighlighter.js +52 -0
  413. package/dist/utils/renderFileWithHighlighter.js.map +1 -0
  414. package/dist/utils/setLanguageOverride.d.ts +7 -0
  415. package/dist/utils/setLanguageOverride.d.ts.map +1 -0
  416. package/dist/utils/setLanguageOverride.js +11 -0
  417. package/dist/utils/setLanguageOverride.js.map +1 -0
  418. package/dist/utils/setWrapperNodeProps.d.ts +20 -0
  419. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -0
  420. package/dist/utils/setWrapperNodeProps.js +29 -0
  421. package/dist/utils/setWrapperNodeProps.js.map +1 -0
  422. package/dist/worker/WorkerPoolManager.d.ts +72 -0
  423. package/dist/worker/WorkerPoolManager.d.ts.map +1 -0
  424. package/dist/worker/WorkerPoolManager.js +421 -0
  425. package/dist/worker/WorkerPoolManager.js.map +1 -0
  426. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +16 -0
  427. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -0
  428. package/dist/worker/getOrCreateWorkerPoolSingleton.js +20 -0
  429. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -0
  430. package/dist/worker/index.d.ts +4 -0
  431. package/dist/worker/index.js +4 -0
  432. package/dist/worker/types.d.ts +140 -0
  433. package/dist/worker/types.d.ts.map +1 -0
  434. package/dist/worker/types.js +0 -0
  435. package/dist/worker/worker-portable.d.ts +1 -0
  436. package/dist/worker/worker-portable.js +14872 -0
  437. package/dist/worker/worker-portable.js.map +1 -0
  438. package/dist/worker/worker.d.ts +1 -0
  439. package/dist/worker/worker.js +1061 -0
  440. package/dist/worker/worker.js.map +1 -0
  441. package/package.json +76 -0
@@ -0,0 +1,84 @@
1
+ import { AnnotationLineMap, AnnotationSide, AnnotationSpan, BaseCodeOptions, BaseDiffOptions, BundledLanguage, ChangeContent, ChangeHunk, ChangeTypes, CodeToHastOptions, ContextContent, DecorationItem, DiffLineAnnotation, DiffLineEventBaseProps, DiffsHighlighter, DiffsThemeNames, ExpansionDirections, ExtensionFormatMap, FileContents, FileDiffMetadata, GapSpan, Hunk, HunkData, HunkLineType, HunkSeparators, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSpans, LineTypes, ObservedAnnotationNodes, ObservedGridNodes, ParsedPatch, PrePropertiesConfig, RenderDiffFilesResult, RenderDiffHunksResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderMetadataCallback, RenderHeaderMetadataProps, RenderedDiffASTCache, RenderedFileASTCache, SharedRenderState, ShikiTransformer, SupportedLanguages, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType } from "./types.js";
2
+ import { ALTERNATE_FILE_NAMES_GIT, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, DEFAULT_THEMES, DIFFS_TAG_NAME, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HUNK_HEADER, SPLIT_WITH_NEWLINES, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE } from "./constants.js";
3
+ import { LineSelectionManager, LineSelectionOptions, SelectedLineRange, SelectionSide, pluckLineSelectionOptions } from "./managers/LineSelectionManager.js";
4
+ import { GetHoveredLineResult, LogTypes, MouseEventManager, MouseEventManagerBaseOptions, MouseEventManagerMode, MouseEventManagerOptions, OnDiffLineClickProps, OnDiffLineEnterLeaveProps, OnLineClickProps, OnLineEnterLeaveProps, pluckMouseEventOptions } from "./managers/MouseEventManager.js";
5
+ import { File, FileHyrdateProps, FileOptions, FileRenderProps } from "./components/File.js";
6
+ import { FileDiff, FileDiffHydrationProps, FileDiffOptions, FileDiffRenderProps } from "./components/FileDiff.js";
7
+ import { CodeToTokenTransformStreamOptions, RecallToken, ShikiStreamTokenizerEnqueueResult, ShikiStreamTokenizerOptions } from "./shiki-stream/types.js";
8
+ import { ShikiStreamTokenizer } from "./shiki-stream/tokenizer.js";
9
+ import { CodeToTokenTransformStream } from "./shiki-stream/stream.js";
10
+ import { FileStream, FileStreamOptions } from "./components/FileStream.js";
11
+ import { areLanguagesAttached } from "./highlighter/languages/areLanguagesAttached.js";
12
+ import { attachResolvedLanguages } from "./highlighter/languages/attachResolvedLanguages.js";
13
+ import { cleanUpResolvedLanguages } from "./highlighter/languages/cleanUpResolvedLanguages.js";
14
+ import { AttachedLanguages, ResolvedLanguages, ResolvingLanguages } from "./highlighter/languages/constants.js";
15
+ import { getResolvedLanguages } from "./highlighter/languages/getResolvedLanguages.js";
16
+ import { getResolvedOrResolveLanguage } from "./highlighter/languages/getResolvedOrResolveLanguage.js";
17
+ import { hasResolvedLanguages } from "./highlighter/languages/hasResolvedLanguages.js";
18
+ import { resolveLanguage } from "./highlighter/languages/resolveLanguage.js";
19
+ import { resolveLanguages } from "./highlighter/languages/resolveLanguages.js";
20
+ import { disposeHighlighter, getHighlighterIfLoaded, getSharedHighlighter, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, preloadHighlighter } from "./highlighter/shared_highlighter.js";
21
+ import { areThemesAttached } from "./highlighter/themes/areThemesAttached.js";
22
+ import { attachResolvedThemes } from "./highlighter/themes/attachResolvedThemes.js";
23
+ import { cleanUpResolvedThemes } from "./highlighter/themes/cleanUpResolvedThemes.js";
24
+ import { AttachedThemes, RegisteredCustomThemes, ResolvedThemes, ResolvingThemes } from "./highlighter/themes/constants.js";
25
+ import { getResolvedOrResolveTheme } from "./highlighter/themes/getResolvedOrResolveTheme.js";
26
+ import { getResolvedThemes } from "./highlighter/themes/getResolvedThemes.js";
27
+ import { hasResolvedThemes } from "./highlighter/themes/hasResolvedThemes.js";
28
+ import { registerCustomTheme } from "./highlighter/themes/registerCustomTheme.js";
29
+ import { resolveTheme } from "./highlighter/themes/resolveTheme.js";
30
+ import { resolveThemes } from "./highlighter/themes/resolveThemes.js";
31
+ import { ResizeManager } from "./managers/ResizeManager.js";
32
+ import { ScrollSyncManager } from "./managers/ScrollSyncManager.js";
33
+ import { queueRender } from "./managers/UniversalRenderingManager.js";
34
+ import { DiffHunksRenderer, HunksRenderResult } from "./renderers/DiffHunksRenderer.js";
35
+ import { FileRenderResult, FileRenderer, FileRendererOptions } from "./renderers/FileRenderer.js";
36
+ import { SVGSpriteNames, SVGSpriteSheet } from "./sprite.js";
37
+ import { areFilesEqual } from "./utils/areFilesEqual.js";
38
+ import { areObjectsEqual } from "./utils/areObjectsEqual.js";
39
+ import { areOptionsEqual } from "./utils/areOptionsEqual.js";
40
+ import { areSelectionsEqual } from "./utils/areSelectionsEqual.js";
41
+ import { areThemesEqual } from "./utils/areThemesEqual.js";
42
+ import { cleanLastNewline } from "./utils/cleanLastNewline.js";
43
+ import { createAnnotationElement } from "./utils/createAnnotationElement.js";
44
+ import { createAnnotationWrapperNode } from "./utils/createAnnotationWrapperNode.js";
45
+ import { createCodeNode } from "./utils/createCodeNode.js";
46
+ import { createEmptyRowBuffer } from "./utils/createEmptyRowBuffer.js";
47
+ import { CreateFileHeaderElementProps, createFileHeaderElement } from "./utils/createFileHeaderElement.js";
48
+ import { createHoverContentNode } from "./utils/createHoverContentNode.js";
49
+ import { createNoNewlineElement } from "./utils/createNoNewlineElement.js";
50
+ import { createPreElement, createPreWrapperProperties } from "./utils/createPreElement.js";
51
+ import { createRowNodes } from "./utils/createRowNodes.js";
52
+ import { createSeparator } from "./utils/createSeparator.js";
53
+ import { createSpanFromToken } from "./utils/createSpanNodeFromToken.js";
54
+ import { createStyleElement } from "./utils/createStyleElement.js";
55
+ import { createTransformerWithState } from "./utils/createTransformerWithState.js";
56
+ import { createUnsafeCSSStyleNode } from "./utils/createUnsafeCSSStyleNode.js";
57
+ import { wrapCoreCSS, wrapUnsafeCSS } from "./utils/cssWrappers.js";
58
+ import { diffAcceptRejectHunk } from "./utils/diffAcceptRejectHunk.js";
59
+ import { formatCSSVariablePrefix } from "./utils/formatCSSVariablePrefix.js";
60
+ import { EXTENSION_TO_FILE_FORMAT, extendFileFormatMap, getFiletypeFromFileName } from "./utils/getFiletypeFromFileName.js";
61
+ import { getHighlighterOptions } from "./utils/getHighlighterOptions.js";
62
+ import { getHighlighterThemeStyles } from "./utils/getHighlighterThemeStyles.js";
63
+ import { getHunkSeparatorSlotName } from "./utils/getHunkSeparatorSlotName.js";
64
+ import { getIconForType } from "./utils/getIconForType.js";
65
+ import { getLineAnnotationName } from "./utils/getLineAnnotationName.js";
66
+ import { getLineEndingType } from "./utils/getLineEndingType.js";
67
+ import { getLineNodes } from "./utils/getLineNodes.js";
68
+ import { getSingularPatch } from "./utils/getSingularPatch.js";
69
+ import { getThemes } from "./utils/getThemes.js";
70
+ import { getTotalLineCountFromHunks } from "./utils/getTotalLineCountFromHunks.js";
71
+ import { createHastElement, createIconElement, createTextNodeElement, findCodeElement } from "./utils/hast_utils.js";
72
+ import { isWorkerContext } from "./utils/isWorkerContext.js";
73
+ import { createDiffSpanDecoration, pushOrJoinSpan } from "./utils/parseDiffDecorations.js";
74
+ import { parseDiffFromFile } from "./utils/parseDiffFromFile.js";
75
+ import { ParsedLine, parseLineType } from "./utils/parseLineType.js";
76
+ import { parsePatchFiles } from "./utils/parsePatchFiles.js";
77
+ import { prerenderHTMLIfNecessary } from "./utils/prerenderHTMLIfNecessary.js";
78
+ import { processLine } from "./utils/processLine.js";
79
+ import { renderDiffWithHighlighter } from "./utils/renderDiffWithHighlighter.js";
80
+ import { renderFileWithHighlighter } from "./utils/renderFileWithHighlighter.js";
81
+ import { setLanguageOverride } from "./utils/setLanguageOverride.js";
82
+ import { SetPreNodePropertiesProps, setPreNodeProperties } from "./utils/setWrapperNodeProps.js";
83
+ import { codeToHtml } from "shiki";
84
+ export { ALTERNATE_FILE_NAMES_GIT, AnnotationLineMap, AnnotationSide, AnnotationSpan, AttachedLanguages, AttachedThemes, BaseCodeOptions, BaseDiffOptions, BundledLanguage, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, ChangeContent, ChangeHunk, ChangeTypes, CodeToHastOptions, CodeToTokenTransformStream, CodeToTokenTransformStreamOptions, ContextContent, CreateFileHeaderElementProps, DEFAULT_THEMES, DIFFS_TAG_NAME, DecorationItem, DiffHunksRenderer, DiffLineAnnotation, DiffLineEventBaseProps, DiffsHighlighter, DiffsThemeNames, EXTENSION_TO_FILE_FORMAT, ExpansionDirections, ExtensionFormatMap, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, File, FileContents, FileDiff, FileDiffHydrationProps, FileDiffMetadata, FileDiffOptions, FileDiffRenderProps, FileHyrdateProps, FileOptions, FileRenderProps, FileRenderResult, FileRenderer, FileRendererOptions, FileStream, FileStreamOptions, GIT_DIFF_FILE_BREAK_REGEX, GapSpan, GetHoveredLineResult, HEADER_METADATA_SLOT_ID, HUNK_HEADER, Hunk, HunkData, HunkLineType, HunkSeparators, HunksRenderResult, LanguageRegistration, LineAnnotation, LineDiffTypes, LineEventBaseProps, LineInfo, LineSelectionManager, LineSelectionOptions, LineSpans, LineTypes, LogTypes, MouseEventManager, MouseEventManagerBaseOptions, MouseEventManagerMode, MouseEventManagerOptions, ObservedAnnotationNodes, ObservedGridNodes, OnDiffLineClickProps, OnDiffLineEnterLeaveProps, OnLineClickProps, OnLineEnterLeaveProps, ParsedLine, ParsedPatch, PrePropertiesConfig, RecallToken, RegisteredCustomThemes, RenderDiffFilesResult, RenderDiffHunksResult, RenderDiffOptions, RenderDiffResult, RenderFileMetadata, RenderFileOptions, RenderFileResult, RenderHeaderMetadataCallback, RenderHeaderMetadataProps, RenderedDiffASTCache, RenderedFileASTCache, ResizeManager, ResolvedLanguages, ResolvedThemes, ResolvingLanguages, ResolvingThemes, SPLIT_WITH_NEWLINES, SVGSpriteNames, SVGSpriteSheet, ScrollSyncManager, SelectedLineRange, SelectionSide, SetPreNodePropertiesProps, SharedRenderState, ShikiStreamTokenizer, ShikiStreamTokenizerEnqueueResult, ShikiStreamTokenizerOptions, ShikiTransformer, SupportedLanguages, ThemeRegistrationResolved, ThemeTypes, ThemedDiffResult, ThemedFileResult, ThemedToken, ThemesType, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE, areFilesEqual, areLanguagesAttached, areObjectsEqual, areOptionsEqual, areSelectionsEqual, areThemesAttached, areThemesEqual, attachResolvedLanguages, attachResolvedThemes, cleanLastNewline, cleanUpResolvedLanguages, cleanUpResolvedThemes, codeToHtml, createAnnotationElement, createAnnotationWrapperNode, createCodeNode, createDiffSpanDecoration, createEmptyRowBuffer, createFileHeaderElement, createHastElement, createHoverContentNode, createIconElement, createNoNewlineElement, createPreElement, createPreWrapperProperties, createRowNodes, createSeparator, createSpanFromToken, createStyleElement, createTextNodeElement, createTransformerWithState, createUnsafeCSSStyleNode, diffAcceptRejectHunk, disposeHighlighter, extendFileFormatMap, findCodeElement, formatCSSVariablePrefix, getFiletypeFromFileName, getHighlighterIfLoaded, getHighlighterOptions, getHighlighterThemeStyles, getHunkSeparatorSlotName, getIconForType, getLineAnnotationName, getLineEndingType, getLineNodes, getResolvedLanguages, getResolvedOrResolveLanguage, getResolvedOrResolveTheme, getResolvedThemes, getSharedHighlighter, getSingularPatch, getThemes, getTotalLineCountFromHunks, hasResolvedLanguages, hasResolvedThemes, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, isWorkerContext, parseDiffFromFile, parseLineType, parsePatchFiles, pluckLineSelectionOptions, pluckMouseEventOptions, preloadHighlighter, prerenderHTMLIfNecessary, processLine, pushOrJoinSpan, queueRender, registerCustomTheme, renderDiffWithHighlighter, renderFileWithHighlighter, resolveLanguage, resolveLanguages, resolveTheme, resolveThemes, setLanguageOverride, setPreNodeProperties, wrapCoreCSS, wrapUnsafeCSS };
package/dist/index.js ADDED
@@ -0,0 +1,83 @@
1
+ import { ALTERNATE_FILE_NAMES_GIT, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, DEFAULT_THEMES, DIFFS_TAG_NAME, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HUNK_HEADER, SPLIT_WITH_NEWLINES, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE } from "./constants.js";
2
+ import { areSelectionsEqual } from "./utils/areSelectionsEqual.js";
3
+ import { LineSelectionManager, pluckLineSelectionOptions } from "./managers/LineSelectionManager.js";
4
+ import { MouseEventManager, pluckMouseEventOptions } from "./managers/MouseEventManager.js";
5
+ import { ResizeManager } from "./managers/ResizeManager.js";
6
+ import { AttachedLanguages, ResolvedLanguages, ResolvingLanguages } from "./highlighter/languages/constants.js";
7
+ import { areLanguagesAttached } from "./highlighter/languages/areLanguagesAttached.js";
8
+ import { attachResolvedLanguages } from "./highlighter/languages/attachResolvedLanguages.js";
9
+ import { cleanUpResolvedLanguages } from "./highlighter/languages/cleanUpResolvedLanguages.js";
10
+ import { isWorkerContext } from "./utils/isWorkerContext.js";
11
+ import { resolveLanguage } from "./highlighter/languages/resolveLanguage.js";
12
+ import { getResolvedOrResolveLanguage } from "./highlighter/languages/getResolvedOrResolveLanguage.js";
13
+ import { AttachedThemes, RegisteredCustomThemes, ResolvedThemes, ResolvingThemes } from "./highlighter/themes/constants.js";
14
+ import { attachResolvedThemes } from "./highlighter/themes/attachResolvedThemes.js";
15
+ import { cleanUpResolvedThemes } from "./highlighter/themes/cleanUpResolvedThemes.js";
16
+ import { resolveTheme } from "./highlighter/themes/resolveTheme.js";
17
+ import { getResolvedOrResolveTheme } from "./highlighter/themes/getResolvedOrResolveTheme.js";
18
+ import { registerCustomTheme } from "./highlighter/themes/registerCustomTheme.js";
19
+ import { disposeHighlighter, getHighlighterIfLoaded, getSharedHighlighter, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, preloadHighlighter } from "./highlighter/shared_highlighter.js";
20
+ import { getThemes } from "./utils/getThemes.js";
21
+ import { areThemesAttached } from "./highlighter/themes/areThemesAttached.js";
22
+ import { hasResolvedThemes } from "./highlighter/themes/hasResolvedThemes.js";
23
+ import { areThemesEqual } from "./utils/areThemesEqual.js";
24
+ import { createHastElement, createIconElement, createTextNodeElement, findCodeElement } from "./utils/hast_utils.js";
25
+ import { createAnnotationElement } from "./utils/createAnnotationElement.js";
26
+ import { getIconForType } from "./utils/getIconForType.js";
27
+ import { createFileHeaderElement } from "./utils/createFileHeaderElement.js";
28
+ import { createPreElement, createPreWrapperProperties } from "./utils/createPreElement.js";
29
+ import { EXTENSION_TO_FILE_FORMAT, extendFileFormatMap, getFiletypeFromFileName } from "./utils/getFiletypeFromFileName.js";
30
+ import { getHighlighterOptions } from "./utils/getHighlighterOptions.js";
31
+ import { getLineAnnotationName } from "./utils/getLineAnnotationName.js";
32
+ import { cleanLastNewline } from "./utils/cleanLastNewline.js";
33
+ import { processLine } from "./utils/processLine.js";
34
+ import { createTransformerWithState } from "./utils/createTransformerWithState.js";
35
+ import { formatCSSVariablePrefix } from "./utils/formatCSSVariablePrefix.js";
36
+ import { getHighlighterThemeStyles } from "./utils/getHighlighterThemeStyles.js";
37
+ import { getLineNodes } from "./utils/getLineNodes.js";
38
+ import { renderFileWithHighlighter } from "./utils/renderFileWithHighlighter.js";
39
+ import { FileRenderer } from "./renderers/FileRenderer.js";
40
+ import { SVGSpriteSheet } from "./sprite.js";
41
+ import { areFilesEqual } from "./utils/areFilesEqual.js";
42
+ import { createAnnotationWrapperNode } from "./utils/createAnnotationWrapperNode.js";
43
+ import { createCodeNode } from "./utils/createCodeNode.js";
44
+ import { createHoverContentNode } from "./utils/createHoverContentNode.js";
45
+ import { createUnsafeCSSStyleNode } from "./utils/createUnsafeCSSStyleNode.js";
46
+ import { wrapCoreCSS, wrapUnsafeCSS } from "./utils/cssWrappers.js";
47
+ import { prerenderHTMLIfNecessary } from "./utils/prerenderHTMLIfNecessary.js";
48
+ import { setPreNodeProperties } from "./utils/setWrapperNodeProps.js";
49
+ import { File } from "./components/File.js";
50
+ import { ScrollSyncManager } from "./managers/ScrollSyncManager.js";
51
+ import { createEmptyRowBuffer } from "./utils/createEmptyRowBuffer.js";
52
+ import { createNoNewlineElement } from "./utils/createNoNewlineElement.js";
53
+ import { createSeparator } from "./utils/createSeparator.js";
54
+ import { getHunkSeparatorSlotName } from "./utils/getHunkSeparatorSlotName.js";
55
+ import { getTotalLineCountFromHunks } from "./utils/getTotalLineCountFromHunks.js";
56
+ import { createDiffSpanDecoration, pushOrJoinSpan } from "./utils/parseDiffDecorations.js";
57
+ import { renderDiffWithHighlighter } from "./utils/renderDiffWithHighlighter.js";
58
+ import { DiffHunksRenderer } from "./renderers/DiffHunksRenderer.js";
59
+ import { parseLineType } from "./utils/parseLineType.js";
60
+ import { parsePatchFiles } from "./utils/parsePatchFiles.js";
61
+ import { parseDiffFromFile } from "./utils/parseDiffFromFile.js";
62
+ import { FileDiff } from "./components/FileDiff.js";
63
+ import { queueRender } from "./managers/UniversalRenderingManager.js";
64
+ import { ShikiStreamTokenizer } from "./shiki-stream/tokenizer.js";
65
+ import { CodeToTokenTransformStream } from "./shiki-stream/stream.js";
66
+ import { createRowNodes } from "./utils/createRowNodes.js";
67
+ import { createSpanFromToken } from "./utils/createSpanNodeFromToken.js";
68
+ import { FileStream } from "./components/FileStream.js";
69
+ import { getResolvedLanguages } from "./highlighter/languages/getResolvedLanguages.js";
70
+ import { hasResolvedLanguages } from "./highlighter/languages/hasResolvedLanguages.js";
71
+ import { resolveLanguages } from "./highlighter/languages/resolveLanguages.js";
72
+ import { getResolvedThemes } from "./highlighter/themes/getResolvedThemes.js";
73
+ import { resolveThemes } from "./highlighter/themes/resolveThemes.js";
74
+ import { areObjectsEqual } from "./utils/areObjectsEqual.js";
75
+ import { areOptionsEqual } from "./utils/areOptionsEqual.js";
76
+ import { createStyleElement } from "./utils/createStyleElement.js";
77
+ import { diffAcceptRejectHunk } from "./utils/diffAcceptRejectHunk.js";
78
+ import { getLineEndingType } from "./utils/getLineEndingType.js";
79
+ import { getSingularPatch } from "./utils/getSingularPatch.js";
80
+ import { setLanguageOverride } from "./utils/setLanguageOverride.js";
81
+ import { codeToHtml } from "shiki";
82
+
83
+ export { ALTERNATE_FILE_NAMES_GIT, AttachedLanguages, AttachedThemes, COMMIT_METADATA_SPLIT, CORE_CSS_ATTRIBUTE, CodeToTokenTransformStream, DEFAULT_THEMES, DIFFS_TAG_NAME, DiffHunksRenderer, EXTENSION_TO_FILE_FORMAT, FILENAME_HEADER_REGEX, FILENAME_HEADER_REGEX_GIT, FILE_CONTEXT_BLOB, FILE_MODE_FROM_INDEX, File, FileDiff, FileRenderer, FileStream, GIT_DIFF_FILE_BREAK_REGEX, HEADER_METADATA_SLOT_ID, HUNK_HEADER, LineSelectionManager, MouseEventManager, RegisteredCustomThemes, ResizeManager, ResolvedLanguages, ResolvedThemes, ResolvingLanguages, ResolvingThemes, SPLIT_WITH_NEWLINES, SVGSpriteSheet, ScrollSyncManager, ShikiStreamTokenizer, UNIFIED_DIFF_FILE_BREAK_REGEX, UNSAFE_CSS_ATTRIBUTE, areFilesEqual, areLanguagesAttached, areObjectsEqual, areOptionsEqual, areSelectionsEqual, areThemesAttached, areThemesEqual, attachResolvedLanguages, attachResolvedThemes, cleanLastNewline, cleanUpResolvedLanguages, cleanUpResolvedThemes, codeToHtml, createAnnotationElement, createAnnotationWrapperNode, createCodeNode, createDiffSpanDecoration, createEmptyRowBuffer, createFileHeaderElement, createHastElement, createHoverContentNode, createIconElement, createNoNewlineElement, createPreElement, createPreWrapperProperties, createRowNodes, createSeparator, createSpanFromToken, createStyleElement, createTextNodeElement, createTransformerWithState, createUnsafeCSSStyleNode, diffAcceptRejectHunk, disposeHighlighter, extendFileFormatMap, findCodeElement, formatCSSVariablePrefix, getFiletypeFromFileName, getHighlighterIfLoaded, getHighlighterOptions, getHighlighterThemeStyles, getHunkSeparatorSlotName, getIconForType, getLineAnnotationName, getLineEndingType, getLineNodes, getResolvedLanguages, getResolvedOrResolveLanguage, getResolvedOrResolveTheme, getResolvedThemes, getSharedHighlighter, getSingularPatch, getThemes, getTotalLineCountFromHunks, hasResolvedLanguages, hasResolvedThemes, isHighlighterLoaded, isHighlighterLoading, isHighlighterNull, isWorkerContext, parseDiffFromFile, parseLineType, parsePatchFiles, pluckLineSelectionOptions, pluckMouseEventOptions, preloadHighlighter, prerenderHTMLIfNecessary, processLine, pushOrJoinSpan, queueRender, registerCustomTheme, renderDiffWithHighlighter, renderFileWithHighlighter, resolveLanguage, resolveLanguages, resolveTheme, resolveThemes, setLanguageOverride, setPreNodeProperties, wrapCoreCSS, wrapUnsafeCSS };
@@ -0,0 +1,64 @@
1
+ import { AnnotationSide } from "../types.js";
2
+
3
+ //#region src/managers/LineSelectionManager.d.ts
4
+ type SelectionSide = AnnotationSide;
5
+ interface SelectedLineRange {
6
+ start: number;
7
+ side?: SelectionSide;
8
+ end: number;
9
+ endSide?: SelectionSide;
10
+ }
11
+ interface LineSelectionOptions {
12
+ enableLineSelection?: boolean;
13
+ onLineSelected?: (range: SelectedLineRange | null) => void;
14
+ onLineSelectionStart?: (range: SelectedLineRange | null) => void;
15
+ onLineSelectionEnd?: (range: SelectedLineRange | null) => void;
16
+ }
17
+ /**
18
+ * Manages line selection state and interactions for code/diff viewers.
19
+ * Handles:
20
+ * - Click and drag selection
21
+ * - Shift-click to extend selection
22
+ * - DOM attribute updates (data-selected-line)
23
+ */
24
+ declare class LineSelectionManager {
25
+ private options;
26
+ private pre;
27
+ private selectedRange;
28
+ private renderedSelectionRange;
29
+ private anchor;
30
+ private _queuedRender;
31
+ constructor(options?: LineSelectionOptions);
32
+ setOptions(options: LineSelectionOptions): void;
33
+ cleanUp(): void;
34
+ setup(pre: HTMLPreElement): void;
35
+ setDirty(): void;
36
+ isDirty(): boolean;
37
+ setSelection(range: SelectedLineRange | null): void;
38
+ getSelection(): SelectedLineRange | null;
39
+ private attachEventListeners;
40
+ private removeEventListeners;
41
+ private handleMouseDown;
42
+ private handleMouseMove;
43
+ private handleMouseUp;
44
+ private updateSelection;
45
+ private updateSelection;
46
+ private renderSelection;
47
+ private deriveRowRangeFromDOM;
48
+ private findRowIndexForLineNumber;
49
+ private notifySelectionChange;
50
+ private notifySelectionStart;
51
+ private notifySelectionEnd;
52
+ private getMouseEventDataForPath;
53
+ private getLineIndex;
54
+ private getLineSideFromElement;
55
+ }
56
+ declare function pluckLineSelectionOptions({
57
+ enableLineSelection,
58
+ onLineSelected,
59
+ onLineSelectionStart,
60
+ onLineSelectionEnd
61
+ }: LineSelectionOptions): LineSelectionOptions;
62
+ //#endregion
63
+ export { LineSelectionManager, LineSelectionOptions, SelectedLineRange, SelectionSide, pluckLineSelectionOptions };
64
+ //# sourceMappingURL=LineSelectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineSelectionManager.d.ts","names":["options: LineSelectionOptions"],"sources":["../../src/managers/LineSelectionManager.ts"],"sourcesContent":[],"mappings":";;;KAGY,aAAA,GAAgB;UAEX,iBAAA;EAFjB,KAAY,EAAA,MAAA;EAEZ,IAAiB,CAAA,EAER,aAFQ;EAOjB,GAAiB,EAAA,MAAA;EAEU,OAAA,CAAA,EALf,aAKe;;AAEI,UAJd,oBAAA,CAIc;EAAA,mBAAA,CAAA,EAAA,OAAA;EAgB/B,cAAa,CAAA,EAAA,CAAA,KAAA,EAlBc,iBAkBd,GAAA,IAAA,EAAA,GAAA,IAAA;EAOkB,oBAAA,CAAA,EAAA,CAAA,KAAA,EAxBE,iBAwBF,GAAA,IAAA,EAAA,GAAA,IAAA;EAET,kBAAA,CAAA,EAAA,CAAA,KAAA,EAzBS,iBAyBT,GAAA,IAAA,EAAA,GAAA,IAAA;;;;;AAuZtB;;;;AAIE,cApaW,oBAAA,CAoaX;EACC,QAAA,OAAA;EAAuB,QAAA,GAAA;EAAA,QAAA,aAAA;;;;wBA9ZK;sBAET;;aAoBT;;;sBA2BS;kBAaJ;;;;;;;;;;;;;;;;;;iBA2VF,yBAAA;;;;;GAKb,uBAAuB"}
@@ -0,0 +1,276 @@
1
+ import { areSelectionsEqual } from "../utils/areSelectionsEqual.js";
2
+
3
+ //#region src/managers/LineSelectionManager.ts
4
+ /**
5
+ * Manages line selection state and interactions for code/diff viewers.
6
+ * Handles:
7
+ * - Click and drag selection
8
+ * - Shift-click to extend selection
9
+ * - DOM attribute updates (data-selected-line)
10
+ */
11
+ var LineSelectionManager = class {
12
+ pre;
13
+ selectedRange = null;
14
+ renderedSelectionRange;
15
+ anchor;
16
+ _queuedRender;
17
+ constructor(options = {}) {
18
+ this.options = options;
19
+ }
20
+ setOptions(options) {
21
+ this.options = {
22
+ ...this.options,
23
+ ...options
24
+ };
25
+ this.removeEventListeners();
26
+ if (this.options.enableLineSelection === true) this.attachEventListeners();
27
+ }
28
+ cleanUp() {
29
+ this.removeEventListeners();
30
+ if (this._queuedRender != null) {
31
+ cancelAnimationFrame(this._queuedRender);
32
+ this._queuedRender = void 0;
33
+ }
34
+ if (this.pre != null) delete this.pre.dataset.interactiveLineNumbers;
35
+ this.pre = void 0;
36
+ }
37
+ setup(pre) {
38
+ this.setDirty();
39
+ if (this.pre !== pre) this.cleanUp();
40
+ this.pre = pre;
41
+ const { enableLineSelection = false } = this.options;
42
+ if (enableLineSelection) {
43
+ this.pre.dataset.interactiveLineNumbers = "";
44
+ this.attachEventListeners();
45
+ } else {
46
+ this.removeEventListeners();
47
+ delete this.pre.dataset.interactiveLineNumbers;
48
+ }
49
+ this.setSelection(this.selectedRange);
50
+ }
51
+ setDirty() {
52
+ this.renderedSelectionRange = void 0;
53
+ }
54
+ isDirty() {
55
+ return this.renderedSelectionRange === void 0;
56
+ }
57
+ setSelection(range) {
58
+ const isRangeChange = !(range === this.selectedRange || areSelectionsEqual(range ?? void 0, this.selectedRange ?? void 0));
59
+ if (!this.isDirty() && !isRangeChange) return;
60
+ this.selectedRange = range;
61
+ this.renderSelection();
62
+ if (isRangeChange) this.notifySelectionChange();
63
+ }
64
+ getSelection() {
65
+ return this.selectedRange;
66
+ }
67
+ attachEventListeners() {
68
+ if (this.pre == null) return;
69
+ this.removeEventListeners();
70
+ this.pre.addEventListener("mousedown", this.handleMouseDown);
71
+ }
72
+ removeEventListeners() {
73
+ if (this.pre == null) return;
74
+ this.pre.removeEventListener("mousedown", this.handleMouseDown);
75
+ document.removeEventListener("mousemove", this.handleMouseMove);
76
+ document.removeEventListener("mouseup", this.handleMouseUp);
77
+ }
78
+ handleMouseDown = (event) => {
79
+ const mouseEventData = event.button === 0 ? this.getMouseEventDataForPath(event.composedPath(), "click") : void 0;
80
+ if (mouseEventData == null) return;
81
+ event.preventDefault();
82
+ const { lineNumber, eventSide, lineIndex } = mouseEventData;
83
+ if (event.shiftKey && this.selectedRange != null) {
84
+ const range = this.deriveRowRangeFromDOM(this.selectedRange);
85
+ if (range == null) return;
86
+ const useStart = range.start <= range.end ? lineIndex >= range.start : lineIndex <= range.end;
87
+ this.anchor = {
88
+ line: useStart ? this.selectedRange.start : this.selectedRange.end,
89
+ side: (useStart ? this.selectedRange.side : this.selectedRange.endSide ?? this.selectedRange.side) ?? "additions"
90
+ };
91
+ this.updateSelection(lineNumber, eventSide);
92
+ this.notifySelectionStart(this.selectedRange);
93
+ } else {
94
+ if (this.selectedRange?.start === lineNumber && this.selectedRange?.end === lineNumber) {
95
+ this.updateSelection(null);
96
+ this.notifySelectionEnd(null);
97
+ this.notifySelectionChange();
98
+ return;
99
+ }
100
+ this.selectedRange = null;
101
+ this.anchor = {
102
+ line: lineNumber,
103
+ side: eventSide
104
+ };
105
+ this.updateSelection(lineNumber, eventSide);
106
+ this.notifySelectionStart(this.selectedRange);
107
+ }
108
+ document.addEventListener("mousemove", this.handleMouseMove);
109
+ document.addEventListener("mouseup", this.handleMouseUp);
110
+ };
111
+ handleMouseMove = (event) => {
112
+ const mouseEventData = this.getMouseEventDataForPath(event.composedPath(), "move");
113
+ if (mouseEventData == null || this.anchor == null) return;
114
+ const { lineNumber, eventSide } = mouseEventData;
115
+ this.updateSelection(lineNumber, eventSide);
116
+ };
117
+ handleMouseUp = () => {
118
+ this.anchor = void 0;
119
+ document.removeEventListener("mousemove", this.handleMouseMove);
120
+ document.removeEventListener("mouseup", this.handleMouseUp);
121
+ this.notifySelectionEnd(this.selectedRange);
122
+ this.notifySelectionChange();
123
+ };
124
+ updateSelection(currentLine, side) {
125
+ if (currentLine == null) this.selectedRange = null;
126
+ else {
127
+ const anchorSide = this.anchor?.side ?? side;
128
+ this.selectedRange = {
129
+ start: this.anchor?.line ?? currentLine,
130
+ end: currentLine,
131
+ side: anchorSide,
132
+ endSide: anchorSide !== side ? side : void 0
133
+ };
134
+ }
135
+ this._queuedRender ??= requestAnimationFrame(this.renderSelection);
136
+ }
137
+ renderSelection = () => {
138
+ if (this._queuedRender != null) {
139
+ cancelAnimationFrame(this._queuedRender);
140
+ this._queuedRender = void 0;
141
+ }
142
+ if (this.pre == null || this.renderedSelectionRange === this.selectedRange) return;
143
+ const allSelected = this.pre.querySelectorAll("[data-selected-line]");
144
+ for (const element of allSelected) element.removeAttribute("data-selected-line");
145
+ this.renderedSelectionRange = this.selectedRange;
146
+ if (this.selectedRange == null) return;
147
+ const codeElements = this.pre.querySelectorAll("[data-code]");
148
+ if (codeElements.length === 0) return;
149
+ if (codeElements.length > 2) {
150
+ console.error(codeElements);
151
+ throw new Error("LineSelectionManager.applySelectionToDOM: Somehow there are more than 2 code elements...");
152
+ }
153
+ const rowRange = this.deriveRowRangeFromDOM(this.selectedRange);
154
+ if (rowRange == null) {
155
+ console.error({
156
+ rowRange,
157
+ selectedRange: this.selectedRange
158
+ });
159
+ throw new Error("LineSelectionManager.renderSelection: No valid rowRange");
160
+ }
161
+ const isSingle = rowRange.start === rowRange.end;
162
+ const first = Math.min(rowRange.start, rowRange.end);
163
+ const last = Math.max(rowRange.start, rowRange.end);
164
+ for (const code of codeElements) for (const element of code.children) {
165
+ if (!(element instanceof HTMLElement)) continue;
166
+ const lineIndex = this.getLineIndex(element);
167
+ if ((lineIndex ?? 0) > last) break;
168
+ if (lineIndex == null || lineIndex < first) continue;
169
+ let attributeValue = isSingle ? "single" : lineIndex === first ? "first" : lineIndex === last ? "last" : "";
170
+ element.setAttribute("data-selected-line", attributeValue);
171
+ if (element.nextSibling instanceof HTMLElement && element.nextSibling.hasAttribute("data-line-annotation")) {
172
+ if (isSingle) {
173
+ attributeValue = "last";
174
+ element.setAttribute("data-selected-line", "first");
175
+ } else if (lineIndex === first) attributeValue = "";
176
+ else if (lineIndex === last) element.setAttribute("data-selected-line", "");
177
+ element.nextSibling.setAttribute("data-selected-line", attributeValue);
178
+ }
179
+ }
180
+ };
181
+ deriveRowRangeFromDOM(range) {
182
+ if (range == null) return void 0;
183
+ const start = this.findRowIndexForLineNumber(range.start, range.side);
184
+ const end = range.end === range.start && (range.endSide == null || range.endSide === range.side) ? start : this.findRowIndexForLineNumber(range.end, range.endSide ?? range.side);
185
+ return start != null && end != null ? {
186
+ start,
187
+ end
188
+ } : void 0;
189
+ }
190
+ findRowIndexForLineNumber(lineNumber, targetSide = "additions") {
191
+ if (this.pre == null) return void 0;
192
+ const elements = Array.from(this.pre.querySelectorAll(`[data-line="${lineNumber}"]`));
193
+ elements.push(...Array.from(this.pre.querySelectorAll(`[data-alt-line="${lineNumber}"]`)));
194
+ if (elements.length === 0) return void 0;
195
+ for (const element of elements) {
196
+ if (!(element instanceof HTMLElement)) continue;
197
+ if (this.getLineSideFromElement(element) === targetSide) return this.getLineIndex(element);
198
+ else if (parseInt(element.dataset.altLine ?? "") === lineNumber) return this.getLineIndex(element);
199
+ }
200
+ console.error("LineSelectionManager.findRowIndexForLineNumber: Invalid selection", lineNumber, targetSide);
201
+ }
202
+ notifySelectionChange() {
203
+ const { onLineSelected } = this.options;
204
+ if (onLineSelected == null) return;
205
+ onLineSelected(this.selectedRange ?? null);
206
+ }
207
+ notifySelectionStart(range) {
208
+ const { onLineSelectionStart } = this.options;
209
+ if (onLineSelectionStart == null) return;
210
+ onLineSelectionStart(range);
211
+ }
212
+ notifySelectionEnd(range) {
213
+ const { onLineSelectionEnd } = this.options;
214
+ if (onLineSelectionEnd == null) return;
215
+ onLineSelectionEnd(range);
216
+ }
217
+ getMouseEventDataForPath(path, eventType) {
218
+ let lineNumber;
219
+ let lineIndex;
220
+ let isNumberColumn = false;
221
+ let eventSide;
222
+ for (const element of path) {
223
+ if (!(element instanceof HTMLElement)) continue;
224
+ if (element.hasAttribute("data-column-number")) {
225
+ isNumberColumn = true;
226
+ continue;
227
+ }
228
+ if (element.hasAttribute("data-line")) {
229
+ lineNumber = parseInt(element.dataset.line ?? "", 10);
230
+ lineIndex = parseInt(element.dataset.lineIndex ?? "", 10);
231
+ if (element.dataset.lineType === "change-deletion") eventSide = "deletions";
232
+ else if (element.dataset.lineType === "change-additions") eventSide = "additions";
233
+ if (Number.isNaN(lineIndex) || Number.isNaN(lineNumber)) {
234
+ lineIndex = void 0;
235
+ lineNumber = void 0;
236
+ break;
237
+ }
238
+ if (eventSide != null) break;
239
+ continue;
240
+ }
241
+ if (element.hasAttribute("data-code")) {
242
+ eventSide ??= element.hasAttribute("data-deletions") ? "deletions" : "additions";
243
+ break;
244
+ }
245
+ }
246
+ if (eventType === "click" && !isNumberColumn || lineIndex == null || lineNumber == null) return;
247
+ return {
248
+ lineIndex,
249
+ lineNumber,
250
+ eventSide: eventSide ?? "additions"
251
+ };
252
+ }
253
+ getLineIndex(element) {
254
+ const lineIndex = parseInt(element.dataset.lineIndex ?? "", 10);
255
+ return !Number.isNaN(lineIndex) ? lineIndex : void 0;
256
+ }
257
+ getLineSideFromElement(element) {
258
+ if (element.dataset.lineType === "change-deletion") return "deletions";
259
+ if (element.dataset.lineType === "change-addition") return "additions";
260
+ const parent = element.closest("[data-code]");
261
+ if (!(parent instanceof HTMLElement)) return "additions";
262
+ return parent.hasAttribute("data-deletions") ? "deletions" : "additions";
263
+ }
264
+ };
265
+ function pluckLineSelectionOptions({ enableLineSelection, onLineSelected, onLineSelectionStart, onLineSelectionEnd }) {
266
+ return {
267
+ enableLineSelection,
268
+ onLineSelected,
269
+ onLineSelectionStart,
270
+ onLineSelectionEnd
271
+ };
272
+ }
273
+
274
+ //#endregion
275
+ export { LineSelectionManager, pluckLineSelectionOptions };
276
+ //# sourceMappingURL=LineSelectionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LineSelectionManager.js","names":["options: LineSelectionOptions","lineNumber: number | undefined","lineIndex: number | undefined","eventSide: AnnotationSide | undefined"],"sources":["../../src/managers/LineSelectionManager.ts"],"sourcesContent":["import type { AnnotationSide } from '../types';\nimport { areSelectionsEqual } from '../utils/areSelectionsEqual';\n\nexport type SelectionSide = AnnotationSide;\n\nexport interface SelectedLineRange {\n start: number;\n side?: SelectionSide;\n end: number;\n endSide?: SelectionSide;\n}\n\nexport interface LineSelectionOptions {\n enableLineSelection?: boolean;\n onLineSelected?: (range: SelectedLineRange | null) => void;\n onLineSelectionStart?: (range: SelectedLineRange | null) => void;\n onLineSelectionEnd?: (range: SelectedLineRange | null) => void;\n}\n\ninterface MouseInfo {\n lineNumber: number;\n eventSide: AnnotationSide;\n lineIndex: number;\n}\n\n/**\n * Manages line selection state and interactions for code/diff viewers.\n * Handles:\n * - Click and drag selection\n * - Shift-click to extend selection\n * - DOM attribute updates (data-selected-line)\n */\nexport class LineSelectionManager {\n private pre: HTMLPreElement | undefined;\n private selectedRange: SelectedLineRange | null = null;\n private renderedSelectionRange: SelectedLineRange | null | undefined;\n private anchor: { line: number; side: SelectionSide } | undefined;\n private _queuedRender: number | undefined;\n\n constructor(private options: LineSelectionOptions = {}) {}\n\n setOptions(options: LineSelectionOptions): void {\n this.options = { ...this.options, ...options };\n this.removeEventListeners();\n if (this.options.enableLineSelection === true) {\n this.attachEventListeners();\n }\n }\n\n cleanUp(): void {\n this.removeEventListeners();\n if (this._queuedRender != null) {\n cancelAnimationFrame(this._queuedRender);\n this._queuedRender = undefined;\n }\n if (this.pre != null) {\n delete this.pre.dataset.interactiveLineNumbers;\n }\n this.pre = undefined;\n }\n\n setup(pre: HTMLPreElement): void {\n // Assume we are always dirty after a setup...\n this.setDirty();\n if (this.pre !== pre) {\n this.cleanUp();\n }\n this.pre = pre;\n const { enableLineSelection = false } = this.options;\n if (enableLineSelection) {\n this.pre.dataset.interactiveLineNumbers = '';\n this.attachEventListeners();\n } else {\n this.removeEventListeners();\n delete this.pre.dataset.interactiveLineNumbers;\n }\n\n this.setSelection(this.selectedRange);\n }\n\n setDirty(): void {\n this.renderedSelectionRange = undefined;\n }\n\n isDirty(): boolean {\n return this.renderedSelectionRange === undefined;\n }\n\n setSelection(range: SelectedLineRange | null): void {\n const isRangeChange = !(\n range === this.selectedRange ||\n areSelectionsEqual(range ?? undefined, this.selectedRange ?? undefined)\n );\n if (!this.isDirty() && !isRangeChange) return;\n this.selectedRange = range;\n this.renderSelection();\n if (isRangeChange) {\n this.notifySelectionChange();\n }\n }\n\n getSelection(): SelectedLineRange | null {\n return this.selectedRange;\n }\n\n private attachEventListeners(): void {\n if (this.pre == null) return;\n // Lets run a cleanup, just in case\n this.removeEventListeners();\n this.pre.addEventListener('mousedown', this.handleMouseDown);\n }\n\n private removeEventListeners(): void {\n if (this.pre == null) return;\n this.pre.removeEventListener('mousedown', this.handleMouseDown);\n document.removeEventListener('mousemove', this.handleMouseMove);\n document.removeEventListener('mouseup', this.handleMouseUp);\n }\n\n private handleMouseDown = (event: MouseEvent): void => {\n // Only handle left mouse button\n const mouseEventData =\n event.button === 0\n ? this.getMouseEventDataForPath(event.composedPath(), 'click')\n : undefined;\n if (mouseEventData == null) {\n return;\n }\n event.preventDefault();\n const { lineNumber, eventSide, lineIndex } = mouseEventData;\n if (event.shiftKey && this.selectedRange != null) {\n const range = this.deriveRowRangeFromDOM(this.selectedRange);\n if (range == null) return;\n const useStart =\n range.start <= range.end\n ? lineIndex >= range.start\n : lineIndex <= range.end;\n this.anchor = {\n line: useStart ? this.selectedRange.start : this.selectedRange.end,\n side:\n (useStart\n ? this.selectedRange.side\n : (this.selectedRange.endSide ?? this.selectedRange.side)) ??\n 'additions',\n };\n this.updateSelection(lineNumber, eventSide);\n this.notifySelectionStart(this.selectedRange);\n } else {\n // Check if clicking on already selected single line to unselect\n if (\n this.selectedRange?.start === lineNumber &&\n this.selectedRange?.end === lineNumber\n ) {\n this.updateSelection(null);\n this.notifySelectionEnd(null);\n this.notifySelectionChange();\n return;\n }\n this.selectedRange = null;\n this.anchor = { line: lineNumber, side: eventSide };\n this.updateSelection(lineNumber, eventSide);\n this.notifySelectionStart(this.selectedRange);\n }\n\n document.addEventListener('mousemove', this.handleMouseMove);\n document.addEventListener('mouseup', this.handleMouseUp);\n };\n\n private handleMouseMove = (event: MouseEvent): void => {\n const mouseEventData = this.getMouseEventDataForPath(\n event.composedPath(),\n 'move'\n );\n if (mouseEventData == null || this.anchor == null) return;\n const { lineNumber, eventSide } = mouseEventData;\n this.updateSelection(lineNumber, eventSide);\n };\n\n private handleMouseUp = (): void => {\n this.anchor = undefined;\n document.removeEventListener('mousemove', this.handleMouseMove);\n document.removeEventListener('mouseup', this.handleMouseUp);\n this.notifySelectionEnd(this.selectedRange);\n this.notifySelectionChange();\n };\n\n private updateSelection(currentLine: null): void;\n private updateSelection(currentLine: number, side: AnnotationSide): void;\n private updateSelection(\n currentLine: number | null,\n side?: AnnotationSide\n ): void {\n if (currentLine == null) {\n this.selectedRange = null;\n } else {\n const anchorSide = this.anchor?.side ?? side;\n const anchorLine = this.anchor?.line ?? currentLine;\n this.selectedRange = {\n start: anchorLine,\n end: currentLine,\n side: anchorSide,\n endSide: anchorSide !== side ? side : undefined,\n };\n }\n this._queuedRender ??= requestAnimationFrame(this.renderSelection);\n }\n\n private renderSelection = (): void => {\n if (this._queuedRender != null) {\n cancelAnimationFrame(this._queuedRender);\n this._queuedRender = undefined;\n }\n if (\n this.pre == null ||\n this.renderedSelectionRange === this.selectedRange\n ) {\n return;\n }\n\n // First clear existing selections, maybe we\n // can cache this to better avoid this query?\n const allSelected = this.pre.querySelectorAll('[data-selected-line]');\n for (const element of allSelected) {\n element.removeAttribute('data-selected-line');\n }\n\n this.renderedSelectionRange = this.selectedRange;\n if (this.selectedRange == null) {\n return;\n }\n\n const codeElements = this.pre.querySelectorAll('[data-code]');\n if (codeElements.length === 0) return;\n if (codeElements.length > 2) {\n console.error(codeElements);\n throw new Error(\n 'LineSelectionManager.applySelectionToDOM: Somehow there are more than 2 code elements...'\n );\n }\n const rowRange = this.deriveRowRangeFromDOM(this.selectedRange);\n if (rowRange == null) {\n console.error({ rowRange, selectedRange: this.selectedRange });\n throw new Error(\n 'LineSelectionManager.renderSelection: No valid rowRange'\n );\n }\n const isSingle = rowRange.start === rowRange.end;\n const first = Math.min(rowRange.start, rowRange.end);\n const last = Math.max(rowRange.start, rowRange.end);\n for (const code of codeElements) {\n for (const element of code.children) {\n if (!(element instanceof HTMLElement)) continue;\n const lineIndex = this.getLineIndex(element);\n if ((lineIndex ?? 0) > last) break;\n if (lineIndex == null || lineIndex < first) continue;\n let attributeValue = isSingle\n ? 'single'\n : lineIndex === first\n ? 'first'\n : lineIndex === last\n ? 'last'\n : '';\n element.setAttribute('data-selected-line', attributeValue);\n // If we have a line annotation following our selected line, we should\n // mark it as selected as well\n if (\n element.nextSibling instanceof HTMLElement &&\n element.nextSibling.hasAttribute('data-line-annotation')\n ) {\n // Depending on the line's attribute value, lets go ahead and correct\n // it when adding in the annotation row\n if (isSingle) {\n // Single technically becomes 2 selected lines\n attributeValue = 'last';\n element.setAttribute('data-selected-line', 'first');\n } else if (lineIndex === first) {\n // We don't want apply 'first' to the line annotation\n attributeValue = '';\n } else if (lineIndex === last) {\n // the annotation will become the last selected line and therefore\n // our existing line should no longer be last\n element.setAttribute('data-selected-line', '');\n }\n element.nextSibling.setAttribute(\n 'data-selected-line',\n attributeValue\n );\n }\n }\n }\n };\n\n private deriveRowRangeFromDOM(\n range: SelectedLineRange\n ): { start: number; end: number } | undefined {\n if (range == null) return undefined;\n const start = this.findRowIndexForLineNumber(range.start, range.side);\n const end =\n range.end === range.start &&\n (range.endSide == null || range.endSide === range.side)\n ? start\n : this.findRowIndexForLineNumber(\n range.end,\n range.endSide ?? range.side\n );\n return start != null && end != null ? { start, end } : undefined;\n }\n\n private findRowIndexForLineNumber(\n lineNumber: number,\n targetSide: SelectionSide = 'additions'\n ): number | undefined {\n if (this.pre == null) return undefined;\n const elements = Array.from(\n this.pre.querySelectorAll(`[data-line=\"${lineNumber}\"]`)\n );\n // Given how unified diffs can order things, we need to always process\n // `[data-line]` elements before `[data-alt-line]`\n elements.push(\n ...Array.from(\n this.pre.querySelectorAll(`[data-alt-line=\"${lineNumber}\"]`)\n )\n );\n if (elements.length === 0) return undefined;\n\n for (const element of elements) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n const side = this.getLineSideFromElement(element);\n if (side === targetSide) {\n return this.getLineIndex(element);\n } else if (parseInt(element.dataset.altLine ?? '') === lineNumber) {\n return this.getLineIndex(element);\n }\n }\n console.error(\n 'LineSelectionManager.findRowIndexForLineNumber: Invalid selection',\n lineNumber,\n targetSide\n );\n return undefined;\n }\n\n private notifySelectionChange(): void {\n const { onLineSelected } = this.options;\n if (onLineSelected == null) return;\n\n onLineSelected(this.selectedRange ?? null);\n }\n\n private notifySelectionStart(range: SelectedLineRange | null): void {\n const { onLineSelectionStart } = this.options;\n if (onLineSelectionStart == null) return;\n onLineSelectionStart(range);\n }\n\n private notifySelectionEnd(range: SelectedLineRange | null): void {\n const { onLineSelectionEnd } = this.options;\n if (onLineSelectionEnd == null) return;\n onLineSelectionEnd(range);\n }\n\n private getMouseEventDataForPath(\n path: (EventTarget | undefined)[],\n eventType: 'click' | 'move'\n ): MouseInfo | undefined {\n let lineNumber: number | undefined;\n let lineIndex: number | undefined;\n let isNumberColumn = false;\n let eventSide: AnnotationSide | undefined;\n for (const element of path) {\n if (!(element instanceof HTMLElement)) {\n continue;\n }\n if (element.hasAttribute('data-column-number')) {\n isNumberColumn = true;\n continue;\n }\n if (element.hasAttribute('data-line')) {\n lineNumber = parseInt(element.dataset.line ?? '', 10);\n lineIndex = parseInt(element.dataset.lineIndex ?? '', 10);\n if (element.dataset.lineType === 'change-deletion') {\n eventSide = 'deletions';\n } else if (element.dataset.lineType === 'change-additions') {\n eventSide = 'additions';\n }\n // if we can't pull out an index or line number, we can't do anything.\n if (Number.isNaN(lineIndex) || Number.isNaN(lineNumber)) {\n lineIndex = undefined;\n lineNumber = undefined;\n break;\n }\n // If we already have an eventSide, we done computin\n if (eventSide != null) {\n break;\n } else {\n // context type lines will need to be discovered higher up\n // at the data-code level\n }\n continue;\n }\n if (element.hasAttribute('data-code')) {\n eventSide ??= element.hasAttribute('data-deletions')\n ? 'deletions'\n : // context in unified style are assumed to be additions based on\n // their line numbers\n 'additions';\n // If we got to the code element, we def done, son\n break;\n }\n }\n if (\n (eventType === 'click' && !isNumberColumn) ||\n lineIndex == null ||\n lineNumber == null\n ) {\n return undefined;\n }\n return {\n lineIndex,\n lineNumber,\n // Normally this shouldn't hit unless we broke early for whatever reason,\n // but for types lets ensure it's additions if undefined\n eventSide: eventSide ?? 'additions',\n };\n }\n\n private getLineIndex(element: HTMLElement): number | undefined {\n const lineIndex = parseInt(element.dataset.lineIndex ?? '', 10);\n return !Number.isNaN(lineIndex) ? lineIndex : undefined;\n }\n\n private getLineSideFromElement(element: HTMLElement): SelectionSide {\n if (element.dataset.lineType === 'change-deletion') {\n return 'deletions';\n }\n if (element.dataset.lineType === 'change-addition') {\n return 'additions';\n }\n const parent = element.closest('[data-code]');\n if (!(parent instanceof HTMLElement)) {\n return 'additions';\n }\n return parent.hasAttribute('data-deletions') ? 'deletions' : 'additions';\n }\n}\n\nexport function pluckLineSelectionOptions({\n enableLineSelection,\n onLineSelected,\n onLineSelectionStart,\n onLineSelectionEnd,\n}: LineSelectionOptions): LineSelectionOptions {\n return {\n enableLineSelection,\n onLineSelected,\n onLineSelectionStart,\n onLineSelectionEnd,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { AnnotationSide, DiffLineEventBaseProps, ExpansionDirections, LineEventBaseProps } from "../types.js";
2
+
3
+ //#region src/managers/MouseEventManager.d.ts
4
+ type LogTypes = "click" | "move" | "both" | "none";
5
+ type MouseEventManagerMode = "file" | "diff";
6
+ interface OnLineClickProps extends LineEventBaseProps {
7
+ event: PointerEvent;
8
+ }
9
+ interface OnLineEnterLeaveProps extends LineEventBaseProps {
10
+ event: MouseEvent;
11
+ }
12
+ interface OnDiffLineClickProps extends DiffLineEventBaseProps {
13
+ event: PointerEvent;
14
+ }
15
+ interface OnDiffLineEnterLeaveProps extends DiffLineEventBaseProps {
16
+ event: MouseEvent;
17
+ }
18
+ type EventClickProps<TMode extends MouseEventManagerMode> = TMode extends "file" ? OnLineClickProps : OnDiffLineClickProps;
19
+ type MouseEventEnterLeaveProps<TMode extends MouseEventManagerMode> = TMode extends "file" ? OnLineEnterLeaveProps : OnDiffLineEnterLeaveProps;
20
+ type GetHoveredLineResult<TMode extends MouseEventManagerMode> = TMode extends "file" ? {
21
+ lineNumber: number;
22
+ } : {
23
+ lineNumber: number;
24
+ side: AnnotationSide;
25
+ };
26
+ interface MouseEventManagerBaseOptions<TMode extends MouseEventManagerMode> {
27
+ enableHoverUtility?: boolean;
28
+ onLineClick?(props: EventClickProps<TMode>): unknown;
29
+ onLineNumberClick?(props: EventClickProps<TMode>): unknown;
30
+ onLineEnter?(props: MouseEventEnterLeaveProps<TMode>): unknown;
31
+ onLineLeave?(props: MouseEventEnterLeaveProps<TMode>): unknown;
32
+ __debugMouseEvents?: LogTypes;
33
+ }
34
+ interface MouseEventManagerOptions<TMode extends MouseEventManagerMode> extends MouseEventManagerBaseOptions<TMode> {
35
+ onHunkExpand?(hunkIndex: number, direction: ExpansionDirections): unknown;
36
+ }
37
+ declare class MouseEventManager<TMode extends MouseEventManagerMode> {
38
+ private mode;
39
+ private options;
40
+ private hoveredLine;
41
+ private pre;
42
+ private hoverSlot;
43
+ constructor(mode: TMode, options: MouseEventManagerOptions<TMode>);
44
+ setOptions(options: MouseEventManagerOptions<TMode>): void;
45
+ cleanUp(): void;
46
+ setup(pre: HTMLPreElement): void;
47
+ getHoveredLine: () => GetHoveredLineResult<TMode> | undefined;
48
+ handleMouseClick: (event: MouseEvent) => void;
49
+ handleMouseMove: (event: MouseEvent) => void;
50
+ handleMouseLeave: (event: MouseEvent) => void;
51
+ private handleMouseEvent;
52
+ private getLineData;
53
+ }
54
+ declare function pluckMouseEventOptions<TMode extends MouseEventManagerMode>({
55
+ onLineClick,
56
+ onLineNumberClick,
57
+ onLineEnter,
58
+ onLineLeave,
59
+ enableHoverUtility,
60
+ __debugMouseEvents
61
+ }: MouseEventManagerBaseOptions<TMode>, onHunkExpand?: (hunkIndex: number, direction: ExpansionDirections) => unknown): MouseEventManagerOptions<TMode>;
62
+ //#endregion
63
+ export { GetHoveredLineResult, LogTypes, MouseEventManager, MouseEventManagerBaseOptions, MouseEventManagerMode, MouseEventManagerOptions, OnDiffLineClickProps, OnDiffLineEnterLeaveProps, OnLineClickProps, OnLineEnterLeaveProps, pluckMouseEventOptions };
64
+ //# sourceMappingURL=MouseEventManager.d.ts.map