@pierre/diffs 1.1.0-beta.6 → 1.1.0-beta.8

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 (291) hide show
  1. package/dist/components/AdvancedVirtualizedFileDiff.d.ts +40 -0
  2. package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -0
  3. package/dist/components/AdvancedVirtualizedFileDiff.js +145 -0
  4. package/dist/components/AdvancedVirtualizedFileDiff.js.map +1 -0
  5. package/dist/components/AdvancedVirtualizer.d.ts +38 -0
  6. package/dist/components/AdvancedVirtualizer.d.ts.map +1 -0
  7. package/dist/components/AdvancedVirtualizer.js +201 -0
  8. package/dist/components/AdvancedVirtualizer.js.map +1 -0
  9. package/dist/components/File.d.ts +58 -33
  10. package/dist/components/File.d.ts.map +1 -1
  11. package/dist/components/File.js +223 -22
  12. package/dist/components/File.js.map +1 -1
  13. package/dist/components/FileDiff.d.ts +42 -16
  14. package/dist/components/FileDiff.d.ts.map +1 -1
  15. package/dist/components/FileDiff.js +505 -65
  16. package/dist/components/FileDiff.js.map +1 -1
  17. package/dist/components/FileStream.d.ts +5 -0
  18. package/dist/components/FileStream.d.ts.map +1 -1
  19. package/dist/components/FileStream.js +66 -8
  20. package/dist/components/FileStream.js.map +1 -1
  21. package/dist/components/VirtualizedFile.d.ts +33 -0
  22. package/dist/components/VirtualizedFile.d.ts.map +1 -0
  23. package/dist/components/VirtualizedFile.js +227 -0
  24. package/dist/components/VirtualizedFile.js.map +1 -0
  25. package/dist/components/VirtualizedFileDiff.d.ts +39 -0
  26. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -0
  27. package/dist/components/VirtualizedFileDiff.js +316 -0
  28. package/dist/components/VirtualizedFileDiff.js.map +1 -0
  29. package/dist/components/Virtualizer.d.ts +63 -0
  30. package/dist/components/Virtualizer.d.ts.map +1 -0
  31. package/dist/components/Virtualizer.js +369 -0
  32. package/dist/components/Virtualizer.js.map +1 -0
  33. package/dist/components/VirtulizerDevelopment.d.ts +14 -0
  34. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -0
  35. package/dist/components/web-components.d.ts +1 -1
  36. package/dist/components/web-components.d.ts.map +1 -1
  37. package/dist/constants.d.ts +4 -7
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +14 -6
  40. package/dist/constants.js.map +1 -1
  41. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  42. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  43. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  44. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  45. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  46. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -1
  47. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  48. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  49. package/dist/highlighter/languages/registerCustomLanguage.d.ts +11 -4
  50. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  51. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -1
  52. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  53. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  54. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  55. package/dist/highlighter/shared_highlighter.js.map +1 -1
  56. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  57. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  58. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  59. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  60. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  61. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  62. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  63. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  64. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  65. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  66. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  67. package/dist/index.d.ts +13 -10
  68. package/dist/index.js +10 -7
  69. package/dist/managers/LineSelectionManager.d.ts +14 -15
  70. package/dist/managers/LineSelectionManager.d.ts.map +1 -1
  71. package/dist/managers/LineSelectionManager.js +60 -71
  72. package/dist/managers/LineSelectionManager.js.map +1 -1
  73. package/dist/managers/MouseEventManager.d.ts +13 -6
  74. package/dist/managers/MouseEventManager.d.ts.map +1 -1
  75. package/dist/managers/MouseEventManager.js +161 -47
  76. package/dist/managers/MouseEventManager.js.map +1 -1
  77. package/dist/managers/ResizeManager.d.ts +6 -1
  78. package/dist/managers/ResizeManager.d.ts.map +1 -1
  79. package/dist/managers/ResizeManager.js +114 -64
  80. package/dist/managers/ResizeManager.js.map +1 -1
  81. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  82. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  83. package/dist/react/File.d.ts +1 -0
  84. package/dist/react/File.d.ts.map +1 -1
  85. package/dist/react/File.js +2 -1
  86. package/dist/react/File.js.map +1 -1
  87. package/dist/react/FileDiff.d.ts +1 -0
  88. package/dist/react/FileDiff.d.ts.map +1 -1
  89. package/dist/react/FileDiff.js +2 -1
  90. package/dist/react/FileDiff.js.map +1 -1
  91. package/dist/react/MultiFileDiff.d.ts +1 -0
  92. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  93. package/dist/react/MultiFileDiff.js +2 -1
  94. package/dist/react/MultiFileDiff.js.map +1 -1
  95. package/dist/react/PatchDiff.d.ts +1 -0
  96. package/dist/react/PatchDiff.d.ts.map +1 -1
  97. package/dist/react/PatchDiff.js +3 -2
  98. package/dist/react/PatchDiff.js.map +1 -1
  99. package/dist/react/Virtualizer.d.ts +25 -0
  100. package/dist/react/Virtualizer.d.ts.map +1 -0
  101. package/dist/react/Virtualizer.js +38 -0
  102. package/dist/react/Virtualizer.js.map +1 -0
  103. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  104. package/dist/react/WorkerPoolContext.js +1 -1
  105. package/dist/react/WorkerPoolContext.js.map +1 -1
  106. package/dist/react/constants.d.ts.map +1 -1
  107. package/dist/react/index.d.ts +3 -2
  108. package/dist/react/index.js +2 -1
  109. package/dist/react/jsx.d.ts.map +1 -1
  110. package/dist/react/types.d.ts +5 -3
  111. package/dist/react/types.d.ts.map +1 -1
  112. package/dist/react/utils/renderDiffChildren.d.ts +5 -5
  113. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  114. package/dist/react/utils/renderFileChildren.d.ts +5 -5
  115. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  116. package/dist/react/utils/templateRender.d.ts.map +1 -1
  117. package/dist/react/utils/useFileDiffInstance.d.ts +5 -3
  118. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  119. package/dist/react/utils/useFileDiffInstance.js +6 -2
  120. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  121. package/dist/react/utils/useFileInstance.d.ts +5 -3
  122. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  123. package/dist/react/utils/useFileInstance.js +6 -2
  124. package/dist/react/utils/useFileInstance.js.map +1 -1
  125. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  126. package/dist/react/utils/useStableCallback.js.map +1 -1
  127. package/dist/renderers/DiffHunksRenderer.d.ts +15 -10
  128. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  129. package/dist/renderers/DiffHunksRenderer.js +240 -136
  130. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  131. package/dist/renderers/FileRenderer.d.ts +12 -5
  132. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  133. package/dist/renderers/FileRenderer.js +90 -31
  134. package/dist/renderers/FileRenderer.js.map +1 -1
  135. package/dist/shiki-stream/stream.d.ts +2 -2
  136. package/dist/shiki-stream/stream.d.ts.map +1 -1
  137. package/dist/shiki-stream/stream.js.map +1 -1
  138. package/dist/shiki-stream/tokenizer.d.ts +2 -2
  139. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  140. package/dist/shiki-stream/tokenizer.js.map +1 -1
  141. package/dist/shiki-stream/types.d.ts +18 -18
  142. package/dist/shiki-stream/types.d.ts.map +1 -1
  143. package/dist/sprite.d.ts +1 -1
  144. package/dist/sprite.d.ts.map +1 -1
  145. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  146. package/dist/ssr/FileDiffReact.js +1 -1
  147. package/dist/ssr/index.d.ts +2 -2
  148. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  149. package/dist/ssr/preloadFile.d.ts.map +1 -1
  150. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  151. package/dist/ssr/preloadPatchFile.js.map +1 -1
  152. package/dist/ssr/renderHTML.d.ts.map +1 -1
  153. package/dist/style.js +1 -1
  154. package/dist/style.js.map +1 -1
  155. package/dist/types.d.ts +191 -172
  156. package/dist/types.d.ts.map +1 -1
  157. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  158. package/dist/utils/areDiffLineAnnotationsEqual.js.map +1 -1
  159. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  160. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  161. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  162. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  163. package/dist/utils/areOptionsEqual.d.ts +1 -1
  164. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  165. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  166. package/dist/utils/arePrePropertiesEqual.js +1 -1
  167. package/dist/utils/arePrePropertiesEqual.js.map +1 -1
  168. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  169. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  170. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  171. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  172. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  173. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  174. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  175. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  176. package/dist/utils/createContentColumn.d.ts +7 -0
  177. package/dist/utils/createContentColumn.d.ts.map +1 -0
  178. package/dist/utils/createContentColumn.js +17 -0
  179. package/dist/utils/createContentColumn.js.map +1 -0
  180. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  181. package/dist/utils/createEmptyRowBuffer.js +2 -1
  182. package/dist/utils/createEmptyRowBuffer.js.map +1 -1
  183. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  184. package/dist/utils/createHoverContentNode.d.ts.map +1 -1
  185. package/dist/utils/createNoNewlineElement.d.ts +2 -1
  186. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  187. package/dist/utils/createNoNewlineElement.js +3 -6
  188. package/dist/utils/createNoNewlineElement.js.map +1 -1
  189. package/dist/utils/createPreElement.d.ts +2 -1
  190. package/dist/utils/createPreElement.d.ts.map +1 -1
  191. package/dist/utils/createPreElement.js +4 -3
  192. package/dist/utils/createPreElement.js.map +1 -1
  193. package/dist/utils/createRowNodes.d.ts.map +1 -1
  194. package/dist/utils/createSeparator.d.ts.map +1 -1
  195. package/dist/utils/createSeparator.js +1 -1
  196. package/dist/utils/createSeparator.js.map +1 -1
  197. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  198. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  199. package/dist/utils/createStyleElement.d.ts.map +1 -1
  200. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  201. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  202. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  203. package/dist/utils/cssWrappers.d.ts.map +1 -1
  204. package/dist/utils/diffAcceptRejectHunk.d.ts +1 -1
  205. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  206. package/dist/utils/formatCSSVariablePrefix.d.ts +1 -1
  207. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  208. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  209. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  210. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  211. package/dist/utils/getHunkSeparatorSlotName.d.ts +3 -1
  212. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  213. package/dist/utils/getHunkSeparatorSlotName.js.map +1 -1
  214. package/dist/utils/getIconForType.d.ts +1 -1
  215. package/dist/utils/getIconForType.d.ts.map +1 -1
  216. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  217. package/dist/utils/getLineEndingType.d.ts +1 -1
  218. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  219. package/dist/utils/getLineNodes.d.ts.map +1 -1
  220. package/dist/utils/getOrCreateCodeNode.d.ts +4 -2
  221. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  222. package/dist/utils/getOrCreateCodeNode.js +9 -6
  223. package/dist/utils/getOrCreateCodeNode.js.map +1 -1
  224. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  225. package/dist/utils/getThemes.d.ts.map +1 -1
  226. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  227. package/dist/utils/hast_utils.d.ts +6 -3
  228. package/dist/utils/hast_utils.d.ts.map +1 -1
  229. package/dist/utils/hast_utils.js +28 -4
  230. package/dist/utils/hast_utils.js.map +1 -1
  231. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  232. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  233. package/dist/utils/iterateOverDiff.d.ts +26 -13
  234. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  235. package/dist/utils/iterateOverDiff.js +94 -55
  236. package/dist/utils/iterateOverDiff.js.map +1 -1
  237. package/dist/utils/iterateOverFile.d.ts +50 -0
  238. package/dist/utils/iterateOverFile.d.ts.map +1 -0
  239. package/dist/utils/iterateOverFile.js +49 -0
  240. package/dist/utils/iterateOverFile.js.map +1 -0
  241. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  242. package/dist/utils/parseDiffFromFile.d.ts +6 -6
  243. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  244. package/dist/utils/parseDiffFromFile.js +3 -2
  245. package/dist/utils/parseDiffFromFile.js.map +1 -1
  246. package/dist/utils/parseLineType.d.ts +1 -1
  247. package/dist/utils/parseLineType.d.ts.map +1 -1
  248. package/dist/utils/parsePatchFiles.d.ts +12 -10
  249. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  250. package/dist/utils/parsePatchFiles.js +16 -9
  251. package/dist/utils/parsePatchFiles.js.map +1 -1
  252. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  253. package/dist/utils/processLine.d.ts.map +1 -1
  254. package/dist/utils/processLine.js +7 -24
  255. package/dist/utils/processLine.js.map +1 -1
  256. package/dist/utils/renderDiffWithHighlighter.d.ts +2 -2
  257. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  258. package/dist/utils/renderDiffWithHighlighter.js +15 -14
  259. package/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  260. package/dist/utils/renderFileWithHighlighter.d.ts +7 -2
  261. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  262. package/dist/utils/renderFileWithHighlighter.js +30 -4
  263. package/dist/utils/renderFileWithHighlighter.js.map +1 -1
  264. package/dist/utils/resolveVirtualFileMetrics.d.ts +7 -0
  265. package/dist/utils/resolveVirtualFileMetrics.d.ts.map +1 -0
  266. package/dist/utils/resolveVirtualFileMetrics.js +24 -0
  267. package/dist/utils/resolveVirtualFileMetrics.js.map +1 -0
  268. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  269. package/dist/utils/setWrapperNodeProps.d.ts +1 -0
  270. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  271. package/dist/utils/setWrapperNodeProps.js +19 -12
  272. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  273. package/dist/utils/splitFileContents.d.ts +12 -0
  274. package/dist/utils/splitFileContents.d.ts.map +1 -0
  275. package/dist/utils/splitFileContents.js +17 -0
  276. package/dist/utils/splitFileContents.js.map +1 -0
  277. package/dist/utils/trimPatchContext.d.ts +5 -5
  278. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  279. package/dist/worker/WorkerPoolManager.d.ts +2 -2
  280. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  281. package/dist/worker/WorkerPoolManager.js +36 -24
  282. package/dist/worker/WorkerPoolManager.js.map +1 -1
  283. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  284. package/dist/worker/getOrCreateWorkerPoolSingleton.js.map +1 -1
  285. package/dist/worker/types.d.ts +26 -26
  286. package/dist/worker/types.d.ts.map +1 -1
  287. package/dist/worker/worker-portable.js +323 -143
  288. package/dist/worker/worker-portable.js.map +1 -1
  289. package/dist/worker/worker.js +206 -106
  290. package/dist/worker/worker.js.map +1 -1
  291. package/package.json +52 -53
@@ -11,6 +11,9 @@ var MouseEventManager = class {
11
11
  hoveredLine;
12
12
  pre;
13
13
  hoverSlot;
14
+ interactiveLinesAttr = false;
15
+ interactiveLineNumbersAttr = false;
16
+ hasEventListeners = false;
14
17
  constructor(mode, options) {
15
18
  this.mode = mode;
16
19
  this.options = options;
@@ -21,18 +24,26 @@ var MouseEventManager = class {
21
24
  cleanUp() {
22
25
  this.pre?.removeEventListener("click", this.handleMouseClick);
23
26
  this.pre?.removeEventListener("pointermove", this.handleMouseMove);
24
- this.pre?.removeEventListener("pointerout", this.handleMouseLeave);
25
- delete this.pre?.dataset.interactiveLines;
26
- delete this.pre?.dataset.interactiveLineNumbers;
27
+ this.pre?.removeEventListener("pointerleave", this.handleMouseLeave);
28
+ this.pre?.removeAttribute("data-interactive-lines");
29
+ this.pre?.removeAttribute("data-interactive-line-numbers");
30
+ this.clearHoveredLine();
31
+ this.interactiveLinesAttr = false;
32
+ this.interactiveLineNumbersAttr = false;
33
+ this.hasEventListeners = false;
27
34
  this.pre = void 0;
28
35
  }
29
36
  setup(pre) {
30
- const { __debugMouseEvents, onLineClick, onLineNumberClick, onLineEnter, onLineLeave, onHunkExpand, enableHoverUtility = false } = this.options;
31
- this.cleanUp();
32
- this.pre = pre;
37
+ const { __debugMouseEvents, onLineClick, onLineNumberClick, onLineEnter, onLineLeave, onHunkExpand, enableHoverUtility = false, lineHoverHighlight = "disabled" } = this.options;
38
+ const newContainer = this.pre !== pre;
39
+ if (newContainer) {
40
+ this.cleanUp();
41
+ this.pre = pre;
42
+ this.hasEventListeners = false;
43
+ }
33
44
  if (enableHoverUtility && this.hoverSlot == null) {
34
45
  this.hoverSlot = document.createElement("div");
35
- this.hoverSlot.dataset.hoverSlot = "";
46
+ this.hoverSlot.setAttribute("data-hover-slot", "");
36
47
  const slotElement = document.createElement("slot");
37
48
  slotElement.name = "hover-slot";
38
49
  this.hoverSlot.appendChild(slotElement);
@@ -40,10 +51,19 @@ var MouseEventManager = class {
40
51
  this.hoverSlot.parentNode?.removeChild(this.hoverSlot);
41
52
  this.hoverSlot = void 0;
42
53
  }
43
- if (onLineClick != null || onLineNumberClick != null || onHunkExpand != null) {
54
+ const requiresEventListeners = lineHoverHighlight !== "disabled" || onLineClick != null || onLineNumberClick != null || onHunkExpand != null || onLineEnter != null || onLineLeave != null || enableHoverUtility;
55
+ if ((newContainer || !this.hasEventListeners) && requiresEventListeners) {
56
+ this.hasEventListeners = true;
44
57
  pre.addEventListener("click", this.handleMouseClick);
45
- if (onLineClick != null) pre.dataset.interactiveLines = "";
46
- else if (onLineNumberClick != null) pre.dataset.interactiveLineNumbers = "";
58
+ if (onLineClick != null) {
59
+ pre.setAttribute("data-interactive-lines", "");
60
+ this.interactiveLinesAttr = true;
61
+ this.interactiveLineNumbersAttr = false;
62
+ } else if (onLineNumberClick != null) {
63
+ pre.setAttribute("data-interactive-line-numbers", "");
64
+ this.interactiveLinesAttr = false;
65
+ this.interactiveLineNumbersAttr = true;
66
+ }
47
67
  debugLogIfEnabled(__debugMouseEvents, "click", "FileDiff.DEBUG.attachEventListeners: Attaching click events for:", (() => {
48
68
  const reasons = [];
49
69
  if (__debugMouseEvents === "both" || __debugMouseEvents === "click") {
@@ -53,12 +73,43 @@ var MouseEventManager = class {
53
73
  }
54
74
  return reasons;
55
75
  })());
56
- }
57
- if (onLineEnter != null || onLineLeave != null || enableHoverUtility) {
58
76
  pre.addEventListener("pointermove", this.handleMouseMove);
59
77
  debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.attachEventListeners: Attaching pointer move event");
60
78
  pre.addEventListener("pointerleave", this.handleMouseLeave);
61
79
  debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.attachEventListeners: Attaching pointer leave event");
80
+ } else if (!requiresEventListeners && this.hasEventListeners) {
81
+ this.pre?.removeEventListener("click", this.handleMouseClick);
82
+ this.pre?.removeEventListener("pointermove", this.handleMouseMove);
83
+ this.pre?.removeEventListener("pointerleave", this.handleMouseLeave);
84
+ this.hasEventListeners = false;
85
+ }
86
+ if (!newContainer) if (onLineClick != null) {
87
+ if (this.interactiveLineNumbersAttr) {
88
+ pre.removeAttribute("data-interactive-line-numbers");
89
+ this.interactiveLineNumbersAttr = false;
90
+ }
91
+ if (!this.interactiveLinesAttr) {
92
+ pre.setAttribute("data-interactive-lines", "");
93
+ this.interactiveLinesAttr = true;
94
+ }
95
+ } else if (onLineNumberClick != null) {
96
+ if (this.interactiveLinesAttr) {
97
+ pre.removeAttribute("data-interactive-lines");
98
+ this.interactiveLinesAttr = false;
99
+ }
100
+ if (!this.interactiveLineNumbersAttr) {
101
+ pre.setAttribute("data-interactive-line-numbers", "");
102
+ this.interactiveLineNumbersAttr = true;
103
+ }
104
+ } else {
105
+ if (this.interactiveLinesAttr) {
106
+ pre.removeAttribute("data-interactive-lines");
107
+ this.interactiveLinesAttr = false;
108
+ }
109
+ if (this.interactiveLineNumbersAttr) {
110
+ pre.removeAttribute("data-interactive-line-numbers");
111
+ this.interactiveLineNumbersAttr = false;
112
+ }
62
113
  }
63
114
  }
64
115
  getHoveredLine = () => {
@@ -71,6 +122,8 @@ var MouseEventManager = class {
71
122
  }
72
123
  };
73
124
  handleMouseClick = (event) => {
125
+ const { onLineClick, onLineNumberClick, onHunkExpand } = this.options;
126
+ if (onLineClick == null && onLineNumberClick == null && onHunkExpand == null) return;
74
127
  debugLogIfEnabled(this.options.__debugMouseEvents, "click", "FileDiff.DEBUG.handleMouseClick:", event);
75
128
  this.handleMouseEvent({
76
129
  eventType: "click",
@@ -78,6 +131,8 @@ var MouseEventManager = class {
78
131
  });
79
132
  };
80
133
  handleMouseMove = (event) => {
134
+ const { lineHoverHighlight = "disabled", onLineEnter, onLineLeave, enableHoverUtility = false } = this.options;
135
+ if (lineHoverHighlight === "disabled" && !enableHoverUtility && onLineEnter == null && onLineLeave == null) return;
81
136
  debugLogIfEnabled(this.options.__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseMove:", event);
82
137
  this.handleMouseEvent({
83
138
  eventType: "move",
@@ -96,7 +151,7 @@ var MouseEventManager = class {
96
151
  ...this.hoveredLine,
97
152
  event
98
153
  });
99
- this.hoveredLine = void 0;
154
+ this.clearHoveredLine();
100
155
  };
101
156
  handleMouseEvent({ eventType, event }) {
102
157
  const { __debugMouseEvents } = this.options;
@@ -121,11 +176,11 @@ var MouseEventManager = class {
121
176
  ...this.hoveredLine,
122
177
  event
123
178
  });
124
- this.hoveredLine = void 0;
179
+ this.clearHoveredLine();
125
180
  }
126
181
  if (isLineEventData(data, this.mode)) {
127
182
  debugLogIfEnabled(__debugMouseEvents, "move", "FileDiff.DEBUG.handleMouseEvent: switch, 'move', setting up a new hoveredLine and firing onLineEnter");
128
- this.hoveredLine = data;
183
+ this.setHoveredLine(data);
129
184
  if (this.hoverSlot != null) data.numberElement?.appendChild(this.hoverSlot);
130
185
  onLineEnter?.({
131
186
  ...this.hoveredLine,
@@ -157,39 +212,82 @@ var MouseEventManager = class {
157
212
  break;
158
213
  }
159
214
  }
215
+ clearHoveredLine() {
216
+ if (this.hoveredLine == null) return;
217
+ this.hoveredLine.lineElement.removeAttribute("data-hovered");
218
+ this.hoveredLine.numberElement.removeAttribute("data-hovered");
219
+ this.hoveredLine = void 0;
220
+ }
221
+ setHoveredLine(hoveredLine) {
222
+ const { lineHoverHighlight = "disabled" } = this.options;
223
+ if (this.hoveredLine != null) this.clearHoveredLine();
224
+ this.hoveredLine = hoveredLine;
225
+ if (lineHoverHighlight !== "disabled") {
226
+ if (lineHoverHighlight === "both" || lineHoverHighlight === "line") this.hoveredLine.lineElement.setAttribute("data-hovered", "");
227
+ if (lineHoverHighlight === "both" || lineHoverHighlight === "number") this.hoveredLine.numberElement.setAttribute("data-hovered", "");
228
+ }
229
+ }
160
230
  getLineData(path) {
161
231
  let numberColumn = false;
162
- const lineElement = path.find((element) => {
163
- if (!(element instanceof HTMLElement)) return false;
164
- numberColumn = numberColumn || "columnNumber" in element.dataset;
165
- return "line" in element.dataset || "expandIndex" in element.dataset;
166
- });
167
- if (!(lineElement instanceof HTMLElement)) return void 0;
168
- if (lineElement.dataset.expandIndex != null) {
169
- const hunkIndex = parseInt(lineElement.dataset.expandIndex);
170
- if (isNaN(hunkIndex)) return;
171
- let direction;
172
- for (const element of path) {
173
- if (element === lineElement) break;
174
- if (element instanceof HTMLElement) {
175
- direction = direction ?? ("expandUp" in element.dataset ? "up" : void 0) ?? ("expandDown" in element.dataset ? "down" : void 0) ?? ("expandBoth" in element.dataset ? "both" : void 0);
176
- if (direction != null) break;
177
- }
232
+ let lineType;
233
+ let codeElement;
234
+ let lineElement;
235
+ let lineIndex;
236
+ let numberElement;
237
+ let expandInfo;
238
+ let lineNumber;
239
+ for (const element of path) {
240
+ if (!(element instanceof HTMLElement)) continue;
241
+ const _columnNumber = numberElement == null ? element.getAttribute("data-column-number") ?? void 0 : void 0;
242
+ if (_columnNumber) {
243
+ numberElement = element;
244
+ lineNumber = Number.parseInt(_columnNumber, 10);
245
+ numberColumn = true;
246
+ lineType = getLineTypeFromElement(element);
247
+ lineIndex = element.getAttribute("data-line-index") ?? void 0;
248
+ continue;
249
+ }
250
+ const _lineNumber = lineElement == null ? element.getAttribute("data-line") ?? void 0 : void 0;
251
+ if (_lineNumber) {
252
+ lineElement = element;
253
+ lineNumber = Number.parseInt(_lineNumber, 10);
254
+ lineType = getLineTypeFromElement(element);
255
+ lineIndex = element.getAttribute("data-line-index") ?? void 0;
256
+ continue;
257
+ }
258
+ if (expandInfo == null && element.hasAttribute("data-expand-button")) {
259
+ expandInfo = {
260
+ hunkIndex: void 0,
261
+ direction: (() => {
262
+ if (element.hasAttribute("data-expand-up")) return "up";
263
+ if (element.hasAttribute("data-expand-down")) return "down";
264
+ return "both";
265
+ })()
266
+ };
267
+ continue;
268
+ }
269
+ const _expandIndex = expandInfo != null ? element.getAttribute("data-expand-index") ?? void 0 : void 0;
270
+ if (expandInfo != null && _expandIndex != null) {
271
+ const expandIndex = Number.parseInt(_expandIndex, 10);
272
+ if (!Number.isNaN(expandIndex)) expandInfo.hunkIndex = expandIndex;
273
+ continue;
274
+ }
275
+ if (codeElement == null && element.hasAttribute("data-code")) {
276
+ codeElement = element;
277
+ break;
178
278
  }
179
- return direction != null ? {
279
+ }
280
+ if (expandInfo?.hunkIndex != null) {
281
+ const { hunkIndex, direction } = expandInfo;
282
+ return {
180
283
  type: "line-info",
181
284
  hunkIndex,
182
285
  direction
183
- } : void 0;
286
+ };
184
287
  }
185
- const lineNumber = parseInt(lineElement.dataset.line ?? "");
186
- if (isNaN(lineNumber)) return;
187
- const lineType = lineElement.dataset.lineType;
188
- if (lineType !== "context" && lineType !== "context-expanded" && lineType !== "change-deletion" && lineType !== "change-addition") return;
189
- const numberElement = (() => {
190
- const numberElement$1 = lineElement.children[0];
191
- return numberElement$1 instanceof HTMLElement && numberElement$1.dataset.columnNumber != null ? numberElement$1 : void 0;
192
- })();
288
+ lineElement ??= lineIndex != null ? queryHTMLElement(codeElement, `[data-line][data-line-index="${lineIndex}"]`) : void 0;
289
+ numberElement ??= lineIndex != null ? queryHTMLElement(codeElement, `[data-column-number][data-line-index="${lineIndex}"]`) : void 0;
290
+ if (codeElement == null || lineElement == null || numberElement == null || lineType == null) return;
193
291
  if (this.mode === "file") return {
194
292
  type: "line",
195
293
  lineElement,
@@ -200,11 +298,11 @@ var MouseEventManager = class {
200
298
  return {
201
299
  type: "diff-line",
202
300
  annotationSide: (() => {
203
- if (lineType === "change-deletion") return "deletions";
204
- if (lineType === "change-addition") return "additions";
205
- const parent = lineElement.closest("[data-code]");
206
- if (!(parent instanceof HTMLElement)) return "additions";
207
- return "deletions" in parent.dataset ? "deletions" : "additions";
301
+ switch (lineType) {
302
+ case "change-deletion": return "deletions";
303
+ case "change-addition": return "additions";
304
+ default: return codeElement.hasAttribute("data-deletions") ? "deletions" : "additions";
305
+ }
208
306
  })(),
209
307
  lineType,
210
308
  lineElement,
@@ -227,8 +325,9 @@ function debugLogIfEnabled(debugLogType = "none", logIfType, ...args) {
227
325
  }
228
326
  console.log(...args);
229
327
  }
230
- function pluckMouseEventOptions({ onLineClick, onLineNumberClick, onLineEnter, onLineLeave, enableHoverUtility, __debugMouseEvents }, onHunkExpand) {
328
+ function pluckMouseEventOptions({ lineHoverHighlight, onLineClick, onLineNumberClick, onLineEnter, onLineLeave, enableHoverUtility, __debugMouseEvents }, onHunkExpand) {
231
329
  return {
330
+ lineHoverHighlight,
232
331
  onLineClick,
233
332
  onLineNumberClick,
234
333
  onLineEnter,
@@ -238,6 +337,21 @@ function pluckMouseEventOptions({ onLineClick, onLineNumberClick, onLineEnter, o
238
337
  onHunkExpand
239
338
  };
240
339
  }
340
+ function queryHTMLElement(parent, query) {
341
+ const element = parent?.querySelector(query);
342
+ return element instanceof HTMLElement ? element : void 0;
343
+ }
344
+ function getLineTypeFromElement(element) {
345
+ const lineType = element.getAttribute("data-line-type");
346
+ if (lineType == null) return;
347
+ switch (lineType) {
348
+ case "change-deletion":
349
+ case "change-addition":
350
+ case "context":
351
+ case "context-expanded": return lineType;
352
+ default: return;
353
+ }
354
+ }
241
355
 
242
356
  //#endregion
243
357
  export { MouseEventManager, pluckMouseEventOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"MouseEventManager.js","names":["mode: TMode","options: MouseEventManagerOptions<TMode>","reasons: string[]","direction: ExpansionDirections | undefined","numberElement"],"sources":["../../src/managers/MouseEventManager.ts"],"sourcesContent":["import type {\n AnnotationSide,\n DiffLineEventBaseProps,\n ExpansionDirections,\n LineEventBaseProps,\n} from '../types';\n\nexport type LogTypes = 'click' | 'move' | 'both' | 'none';\n\nexport type MouseEventManagerMode = 'file' | 'diff';\n\nexport interface OnLineClickProps extends LineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnLineEnterLeaveProps extends LineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnDiffLineClickProps extends DiffLineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnDiffLineEnterLeaveProps extends DiffLineEventBaseProps {\n event: PointerEvent;\n}\n\ntype HandleMouseEventProps =\n | { eventType: 'click'; event: PointerEvent }\n | { eventType: 'move'; event: PointerEvent };\n\ntype EventClickProps<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? OnLineClickProps\n : OnDiffLineClickProps;\n\ntype MouseEventEnterLeaveProps<TMode extends MouseEventManagerMode> =\n TMode extends 'file' ? OnLineEnterLeaveProps : OnDiffLineEnterLeaveProps;\n\ntype EventBaseProps<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? LineEventBaseProps\n : DiffLineEventBaseProps;\n\ninterface ExpandoEventProps {\n type: 'line-info';\n hunkIndex: number;\n direction: ExpansionDirections;\n}\n\nexport type GetHoveredLineResult<TMode extends MouseEventManagerMode> =\n TMode extends 'file'\n ? { lineNumber: number }\n : { lineNumber: number; side: AnnotationSide };\n\ntype GetLineDataResult<TMode extends MouseEventManagerMode> =\n TMode extends 'file'\n ? LineEventBaseProps | ExpandoEventProps | undefined\n : DiffLineEventBaseProps | ExpandoEventProps | undefined;\n\ntype LineEventData<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? LineEventBaseProps\n : DiffLineEventBaseProps;\n\nfunction isLineEventData<TMode extends MouseEventManagerMode>(\n data: GetLineDataResult<TMode>,\n mode: TMode\n): data is LineEventData<TMode> {\n if (data == null) return false;\n if (mode === 'file') {\n return data.type === 'line';\n } else {\n return data.type === 'diff-line';\n }\n}\n\nfunction isExpandoEventData(\n data:\n | LineEventBaseProps\n | DiffLineEventBaseProps\n | ExpandoEventProps\n | undefined\n): data is ExpandoEventProps {\n return data?.type === 'line-info';\n}\n\nexport interface MouseEventManagerBaseOptions<\n TMode extends MouseEventManagerMode,\n> {\n enableHoverUtility?: boolean;\n onLineClick?(props: EventClickProps<TMode>): unknown;\n onLineNumberClick?(props: EventClickProps<TMode>): unknown;\n onLineEnter?(props: MouseEventEnterLeaveProps<TMode>): unknown;\n onLineLeave?(props: MouseEventEnterLeaveProps<TMode>): unknown;\n __debugMouseEvents?: LogTypes;\n}\n\nexport interface MouseEventManagerOptions<TMode extends MouseEventManagerMode>\n extends MouseEventManagerBaseOptions<TMode> {\n onHunkExpand?(hunkIndex: number, direction: ExpansionDirections): unknown;\n}\n\nexport class MouseEventManager<TMode extends MouseEventManagerMode> {\n private hoveredLine: EventBaseProps<TMode> | undefined;\n private pre: HTMLPreElement | undefined;\n private hoverSlot: HTMLDivElement | undefined;\n\n constructor(\n private mode: TMode,\n private options: MouseEventManagerOptions<TMode>\n ) {}\n\n setOptions(options: MouseEventManagerOptions<TMode>): void {\n this.options = options;\n }\n\n cleanUp(): void {\n this.pre?.removeEventListener('click', this.handleMouseClick);\n this.pre?.removeEventListener('pointermove', this.handleMouseMove);\n this.pre?.removeEventListener('pointerout', this.handleMouseLeave);\n delete this.pre?.dataset.interactiveLines;\n delete this.pre?.dataset.interactiveLineNumbers;\n this.pre = undefined;\n }\n\n setup(pre: HTMLPreElement): void {\n const {\n __debugMouseEvents,\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n onHunkExpand,\n enableHoverUtility = false,\n } = this.options;\n\n this.cleanUp();\n this.pre = pre;\n\n if (enableHoverUtility && this.hoverSlot == null) {\n this.hoverSlot = document.createElement('div');\n this.hoverSlot.dataset.hoverSlot = '';\n const slotElement = document.createElement('slot');\n slotElement.name = 'hover-slot';\n this.hoverSlot.appendChild(slotElement);\n } else if (!enableHoverUtility && this.hoverSlot != null) {\n this.hoverSlot.parentNode?.removeChild(this.hoverSlot);\n this.hoverSlot = undefined;\n }\n\n if (\n onLineClick != null ||\n onLineNumberClick != null ||\n onHunkExpand != null\n ) {\n pre.addEventListener('click', this.handleMouseClick);\n if (onLineClick != null) {\n pre.dataset.interactiveLines = '';\n } else if (onLineNumberClick != null) {\n pre.dataset.interactiveLineNumbers = '';\n }\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n 'FileDiff.DEBUG.attachEventListeners: Attaching click events for:',\n (() => {\n const reasons: string[] = [];\n if (__debugMouseEvents === 'both' || __debugMouseEvents === 'click') {\n if (onLineClick != null) {\n reasons.push('onLineClick');\n }\n if (onLineNumberClick != null) {\n reasons.push('onLineNumberClick');\n }\n if (onHunkExpand != null) {\n reasons.push('expandable hunk separators');\n }\n }\n return reasons;\n })()\n );\n }\n if (onLineEnter != null || onLineLeave != null || enableHoverUtility) {\n pre.addEventListener('pointermove', this.handleMouseMove);\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.attachEventListeners: Attaching pointer move event'\n );\n pre.addEventListener('pointerleave', this.handleMouseLeave);\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.attachEventListeners: Attaching pointer leave event'\n );\n }\n }\n\n getHoveredLine = (): GetHoveredLineResult<TMode> | undefined => {\n if (this.hoveredLine != null) {\n if (this.mode === 'diff' && this.hoveredLine.type === 'diff-line') {\n return {\n lineNumber: this.hoveredLine.lineNumber,\n side: this.hoveredLine.annotationSide,\n } as GetHoveredLineResult<TMode>;\n }\n if (this.mode === 'file' && this.hoveredLine.type === 'line') {\n return {\n lineNumber: this.hoveredLine.lineNumber,\n } as GetHoveredLineResult<TMode>;\n }\n }\n return undefined;\n };\n\n handleMouseClick = (event: PointerEvent): void => {\n debugLogIfEnabled(\n this.options.__debugMouseEvents,\n 'click',\n 'FileDiff.DEBUG.handleMouseClick:',\n event\n );\n this.handleMouseEvent({ eventType: 'click', event });\n };\n\n handleMouseMove = (event: PointerEvent): void => {\n debugLogIfEnabled(\n this.options.__debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseMove:',\n event\n );\n this.handleMouseEvent({ eventType: 'move', event });\n };\n\n handleMouseLeave = (event: PointerEvent): void => {\n const { __debugMouseEvents } = this.options;\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseLeave: no event'\n );\n if (this.hoveredLine == null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseLeave: returned early, no .hoveredLine'\n );\n return;\n }\n this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);\n this.options.onLineLeave?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n this.hoveredLine = undefined;\n };\n\n private handleMouseEvent({ eventType, event }: HandleMouseEventProps) {\n const { __debugMouseEvents } = this.options;\n const composedPath = event.composedPath();\n debugLogIfEnabled(\n __debugMouseEvents,\n eventType,\n 'FileDiff.DEBUG.handleMouseEvent:',\n { eventType, composedPath }\n );\n const data = this.getLineData(composedPath);\n debugLogIfEnabled(\n __debugMouseEvents,\n eventType,\n 'FileDiff.DEBUG.handleMouseEvent: getLineData result:',\n data\n );\n const {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n onHunkExpand,\n } = this.options;\n switch (eventType) {\n case 'move': {\n if (\n isLineEventData(data, this.mode) &&\n this.hoveredLine?.lineElement === data.lineElement\n ) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', returned early because same line\"\n );\n break;\n }\n if (this.hoveredLine != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', clearing an existing hovered line and firing onLineLeave\"\n );\n this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);\n onLineLeave?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n this.hoveredLine = undefined;\n }\n if (isLineEventData(data, this.mode)) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', setting up a new hoveredLine and firing onLineEnter\"\n );\n this.hoveredLine = data;\n if (this.hoverSlot != null) {\n data.numberElement?.appendChild(this.hoverSlot);\n }\n onLineEnter?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n }\n break;\n }\n case 'click':\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', with data:\",\n data\n );\n if (data == null) break;\n if (isExpandoEventData(data) && onHunkExpand != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', expanding a hunk\"\n );\n onHunkExpand(data.hunkIndex, data.direction);\n break;\n }\n if (isLineEventData(data, this.mode)) {\n if (onLineNumberClick != null && data.numberColumn) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineNumberClick'\"\n );\n onLineNumberClick({ ...data, event } as EventClickProps<TMode>);\n } else if (onLineClick != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineClick'\"\n );\n onLineClick({ ...data, event } as EventClickProps<TMode>);\n } else {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', fell through, no event to fire\"\n );\n }\n }\n break;\n }\n }\n\n private getLineData(\n path: (EventTarget | undefined)[]\n ): GetLineDataResult<TMode> {\n let numberColumn = false;\n const lineElement = path.find((element) => {\n if (!(element instanceof HTMLElement)) {\n return false;\n }\n numberColumn = numberColumn || 'columnNumber' in element.dataset;\n return 'line' in element.dataset || 'expandIndex' in element.dataset;\n });\n if (!(lineElement instanceof HTMLElement)) return undefined;\n if (lineElement.dataset.expandIndex != null) {\n const hunkIndex = parseInt(lineElement.dataset.expandIndex);\n if (isNaN(hunkIndex)) {\n return undefined;\n }\n let direction: ExpansionDirections | undefined;\n for (const element of path) {\n if (element === lineElement) break;\n if (element instanceof HTMLElement) {\n direction =\n direction ??\n ('expandUp' in element.dataset ? 'up' : undefined) ??\n ('expandDown' in element.dataset ? 'down' : undefined) ??\n ('expandBoth' in element.dataset ? 'both' : undefined);\n if (direction != null) {\n break;\n }\n }\n }\n return direction != null\n ? { type: 'line-info', hunkIndex, direction }\n : undefined;\n }\n const lineNumber = parseInt(lineElement.dataset.line ?? '');\n if (isNaN(lineNumber)) return;\n const lineType = lineElement.dataset.lineType;\n if (\n lineType !== 'context' &&\n lineType !== 'context-expanded' &&\n lineType !== 'change-deletion' &&\n lineType !== 'change-addition'\n ) {\n return undefined;\n }\n\n const numberElement = (() => {\n const numberElement = lineElement.children[0];\n return numberElement instanceof HTMLElement &&\n numberElement.dataset.columnNumber != null\n ? numberElement\n : undefined;\n })();\n\n if (this.mode === 'file') {\n return {\n type: 'line',\n lineElement,\n lineNumber,\n numberElement,\n numberColumn,\n } as GetLineDataResult<TMode>;\n }\n\n const annotationSide: AnnotationSide = (() => {\n if (lineType === 'change-deletion') {\n return 'deletions';\n }\n if (lineType === 'change-addition') {\n return 'additions';\n }\n const parent = lineElement.closest('[data-code]');\n if (!(parent instanceof HTMLElement)) {\n return 'additions';\n }\n return 'deletions' in parent.dataset ? 'deletions' : 'additions';\n })();\n\n return {\n type: 'diff-line',\n annotationSide,\n lineType,\n lineElement,\n numberElement,\n lineNumber,\n numberColumn,\n } as GetLineDataResult<TMode>;\n }\n}\n\nfunction debugLogIfEnabled(\n debugLogType: LogTypes | undefined = 'none',\n logIfType: 'move' | 'click',\n ...args: unknown[]\n) {\n switch (debugLogType) {\n case 'none':\n return;\n case 'both':\n break;\n case 'click':\n if (logIfType !== 'click') {\n return;\n }\n break;\n case 'move':\n if (logIfType !== 'move') {\n return;\n }\n break;\n }\n console.log(...args);\n}\n\nexport function pluckMouseEventOptions<TMode extends MouseEventManagerMode>(\n {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n enableHoverUtility,\n __debugMouseEvents,\n }: MouseEventManagerBaseOptions<TMode>,\n onHunkExpand?: (hunkIndex: number, direction: ExpansionDirections) => unknown\n): MouseEventManagerOptions<TMode> {\n return {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n enableHoverUtility,\n __debugMouseEvents,\n onHunkExpand,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MouseEventManager.js","names":["mode: TMode","options: MouseEventManagerOptions<TMode>","reasons: string[]","lineType: LineTypes | undefined","codeElement: HTMLElement | undefined","lineElement: HTMLElement | undefined","lineIndex: string | undefined","numberElement: HTMLElement | undefined","expandInfo:\n | {\n hunkIndex: number | undefined;\n direction: 'up' | 'down' | 'both';\n }\n | undefined","lineNumber: number | undefined"],"sources":["../../src/managers/MouseEventManager.ts"],"sourcesContent":["import type {\n AnnotationSide,\n DiffLineEventBaseProps,\n ExpansionDirections,\n LineEventBaseProps,\n LineTypes,\n} from '../types';\n\nexport type LogTypes = 'click' | 'move' | 'both' | 'none';\n\nexport type MouseEventManagerMode = 'file' | 'diff';\n\nexport interface OnLineClickProps extends LineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnLineEnterLeaveProps extends LineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnDiffLineClickProps extends DiffLineEventBaseProps {\n event: PointerEvent;\n}\n\nexport interface OnDiffLineEnterLeaveProps extends DiffLineEventBaseProps {\n event: PointerEvent;\n}\n\ntype HandleMouseEventProps =\n | { eventType: 'click'; event: PointerEvent | MouseEvent }\n | { eventType: 'move'; event: PointerEvent };\n\ntype EventClickProps<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? OnLineClickProps\n : OnDiffLineClickProps;\n\ntype MouseEventEnterLeaveProps<TMode extends MouseEventManagerMode> =\n TMode extends 'file' ? OnLineEnterLeaveProps : OnDiffLineEnterLeaveProps;\n\ntype EventBaseProps<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? LineEventBaseProps\n : DiffLineEventBaseProps;\n\ninterface ExpandoEventProps {\n type: 'line-info';\n hunkIndex: number;\n direction: ExpansionDirections;\n}\n\nexport type GetHoveredLineResult<TMode extends MouseEventManagerMode> =\n TMode extends 'file'\n ? { lineNumber: number }\n : { lineNumber: number; side: AnnotationSide };\n\ntype GetLineDataResult<TMode extends MouseEventManagerMode> =\n TMode extends 'file'\n ? LineEventBaseProps | ExpandoEventProps | undefined\n : DiffLineEventBaseProps | ExpandoEventProps | undefined;\n\ntype LineEventData<TMode extends MouseEventManagerMode> = TMode extends 'file'\n ? LineEventBaseProps\n : DiffLineEventBaseProps;\n\nfunction isLineEventData<TMode extends MouseEventManagerMode>(\n data: GetLineDataResult<TMode>,\n mode: TMode\n): data is LineEventData<TMode> {\n if (data == null) return false;\n if (mode === 'file') {\n return data.type === 'line';\n } else {\n return data.type === 'diff-line';\n }\n}\n\nfunction isExpandoEventData(\n data:\n | LineEventBaseProps\n | DiffLineEventBaseProps\n | ExpandoEventProps\n | undefined\n): data is ExpandoEventProps {\n return data?.type === 'line-info';\n}\n\nexport interface MouseEventManagerBaseOptions<\n TMode extends MouseEventManagerMode,\n> {\n lineHoverHighlight?: 'disabled' | 'both' | 'number' | 'line';\n enableHoverUtility?: boolean;\n onLineClick?(props: EventClickProps<TMode>): unknown;\n onLineNumberClick?(props: EventClickProps<TMode>): unknown;\n onLineEnter?(props: MouseEventEnterLeaveProps<TMode>): unknown;\n onLineLeave?(props: MouseEventEnterLeaveProps<TMode>): unknown;\n __debugMouseEvents?: LogTypes;\n}\n\nexport interface MouseEventManagerOptions<\n TMode extends MouseEventManagerMode,\n> extends MouseEventManagerBaseOptions<TMode> {\n onHunkExpand?(hunkIndex: number, direction: ExpansionDirections): unknown;\n}\n\nexport class MouseEventManager<TMode extends MouseEventManagerMode> {\n private hoveredLine: EventBaseProps<TMode> | undefined;\n private pre: HTMLPreElement | undefined;\n private hoverSlot: HTMLDivElement | undefined;\n private interactiveLinesAttr = false;\n private interactiveLineNumbersAttr = false;\n private hasEventListeners = false;\n\n constructor(\n private mode: TMode,\n private options: MouseEventManagerOptions<TMode>\n ) {}\n\n setOptions(options: MouseEventManagerOptions<TMode>): void {\n this.options = options;\n }\n\n cleanUp(): void {\n this.pre?.removeEventListener('click', this.handleMouseClick);\n this.pre?.removeEventListener('pointermove', this.handleMouseMove);\n this.pre?.removeEventListener('pointerleave', this.handleMouseLeave);\n this.pre?.removeAttribute('data-interactive-lines');\n this.pre?.removeAttribute('data-interactive-line-numbers');\n this.clearHoveredLine();\n this.interactiveLinesAttr = false;\n this.interactiveLineNumbersAttr = false;\n this.hasEventListeners = false;\n this.pre = undefined;\n }\n\n setup(pre: HTMLPreElement): void {\n const {\n __debugMouseEvents,\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n onHunkExpand,\n enableHoverUtility = false,\n lineHoverHighlight = 'disabled',\n } = this.options;\n\n const newContainer = this.pre !== pre;\n if (newContainer) {\n this.cleanUp();\n this.pre = pre;\n this.hasEventListeners = false;\n }\n\n if (enableHoverUtility && this.hoverSlot == null) {\n this.hoverSlot = document.createElement('div');\n this.hoverSlot.setAttribute('data-hover-slot', '');\n const slotElement = document.createElement('slot');\n slotElement.name = 'hover-slot';\n this.hoverSlot.appendChild(slotElement);\n } else if (!enableHoverUtility && this.hoverSlot != null) {\n this.hoverSlot.parentNode?.removeChild(this.hoverSlot);\n this.hoverSlot = undefined;\n }\n\n const requiresEventListeners =\n lineHoverHighlight !== 'disabled' ||\n onLineClick != null ||\n onLineNumberClick != null ||\n onHunkExpand != null ||\n onLineEnter != null ||\n onLineLeave != null ||\n enableHoverUtility;\n\n if ((newContainer || !this.hasEventListeners) && requiresEventListeners) {\n this.hasEventListeners = true;\n pre.addEventListener('click', this.handleMouseClick);\n if (onLineClick != null) {\n pre.setAttribute('data-interactive-lines', '');\n this.interactiveLinesAttr = true;\n this.interactiveLineNumbersAttr = false;\n } else if (onLineNumberClick != null) {\n pre.setAttribute('data-interactive-line-numbers', '');\n this.interactiveLinesAttr = false;\n this.interactiveLineNumbersAttr = true;\n }\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n 'FileDiff.DEBUG.attachEventListeners: Attaching click events for:',\n (() => {\n const reasons: string[] = [];\n if (__debugMouseEvents === 'both' || __debugMouseEvents === 'click') {\n if (onLineClick != null) {\n reasons.push('onLineClick');\n }\n if (onLineNumberClick != null) {\n reasons.push('onLineNumberClick');\n }\n if (onHunkExpand != null) {\n reasons.push('expandable hunk separators');\n }\n }\n return reasons;\n })()\n );\n pre.addEventListener('pointermove', this.handleMouseMove);\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.attachEventListeners: Attaching pointer move event'\n );\n pre.addEventListener('pointerleave', this.handleMouseLeave);\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.attachEventListeners: Attaching pointer leave event'\n );\n } else if (!requiresEventListeners && this.hasEventListeners) {\n this.pre?.removeEventListener('click', this.handleMouseClick);\n this.pre?.removeEventListener('pointermove', this.handleMouseMove);\n this.pre?.removeEventListener('pointerleave', this.handleMouseLeave);\n this.hasEventListeners = false;\n }\n\n if (!newContainer) {\n if (onLineClick != null) {\n if (this.interactiveLineNumbersAttr) {\n pre.removeAttribute('data-interactive-line-numbers');\n this.interactiveLineNumbersAttr = false;\n }\n if (!this.interactiveLinesAttr) {\n pre.setAttribute('data-interactive-lines', '');\n this.interactiveLinesAttr = true;\n }\n } else if (onLineNumberClick != null) {\n if (this.interactiveLinesAttr) {\n pre.removeAttribute('data-interactive-lines');\n this.interactiveLinesAttr = false;\n }\n if (!this.interactiveLineNumbersAttr) {\n pre.setAttribute('data-interactive-line-numbers', '');\n this.interactiveLineNumbersAttr = true;\n }\n } else {\n if (this.interactiveLinesAttr) {\n pre.removeAttribute('data-interactive-lines');\n this.interactiveLinesAttr = false;\n }\n if (this.interactiveLineNumbersAttr) {\n pre.removeAttribute('data-interactive-line-numbers');\n this.interactiveLineNumbersAttr = false;\n }\n }\n }\n }\n\n getHoveredLine = (): GetHoveredLineResult<TMode> | undefined => {\n if (this.hoveredLine != null) {\n if (this.mode === 'diff' && this.hoveredLine.type === 'diff-line') {\n return {\n lineNumber: this.hoveredLine.lineNumber,\n side: this.hoveredLine.annotationSide,\n } as GetHoveredLineResult<TMode>;\n }\n if (this.mode === 'file' && this.hoveredLine.type === 'line') {\n return {\n lineNumber: this.hoveredLine.lineNumber,\n } as GetHoveredLineResult<TMode>;\n }\n }\n return undefined;\n };\n\n handleMouseClick = (event: MouseEvent): void => {\n const { onLineClick, onLineNumberClick, onHunkExpand } = this.options;\n if (\n onLineClick == null &&\n onLineNumberClick == null &&\n onHunkExpand == null\n ) {\n return;\n }\n debugLogIfEnabled(\n this.options.__debugMouseEvents,\n 'click',\n 'FileDiff.DEBUG.handleMouseClick:',\n event\n );\n this.handleMouseEvent({ eventType: 'click', event });\n };\n\n handleMouseMove = (event: PointerEvent): void => {\n const {\n lineHoverHighlight = 'disabled',\n onLineEnter,\n onLineLeave,\n enableHoverUtility = false,\n } = this.options;\n if (\n lineHoverHighlight === 'disabled' &&\n !enableHoverUtility &&\n onLineEnter == null &&\n onLineLeave == null\n ) {\n return;\n }\n debugLogIfEnabled(\n this.options.__debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseMove:',\n event\n );\n this.handleMouseEvent({ eventType: 'move', event });\n };\n\n handleMouseLeave = (event: PointerEvent): void => {\n const { __debugMouseEvents } = this.options;\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseLeave: no event'\n );\n if (this.hoveredLine == null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n 'FileDiff.DEBUG.handleMouseLeave: returned early, no .hoveredLine'\n );\n return;\n }\n this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);\n this.options.onLineLeave?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n this.clearHoveredLine();\n };\n\n private handleMouseEvent({ eventType, event }: HandleMouseEventProps) {\n const { __debugMouseEvents } = this.options;\n const composedPath = event.composedPath();\n debugLogIfEnabled(\n __debugMouseEvents,\n eventType,\n 'FileDiff.DEBUG.handleMouseEvent:',\n { eventType, composedPath }\n );\n const data = this.getLineData(composedPath);\n debugLogIfEnabled(\n __debugMouseEvents,\n eventType,\n 'FileDiff.DEBUG.handleMouseEvent: getLineData result:',\n data\n );\n const {\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n onHunkExpand,\n } = this.options;\n switch (eventType) {\n case 'move': {\n if (\n isLineEventData(data, this.mode) &&\n this.hoveredLine?.lineElement === data.lineElement\n ) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', returned early because same line\"\n );\n break;\n }\n if (this.hoveredLine != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', clearing an existing hovered line and firing onLineLeave\"\n );\n this.hoverSlot?.parentElement?.removeChild(this.hoverSlot);\n onLineLeave?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n this.clearHoveredLine();\n }\n if (isLineEventData(data, this.mode)) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'move',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'move', setting up a new hoveredLine and firing onLineEnter\"\n );\n this.setHoveredLine(data);\n if (this.hoverSlot != null) {\n data.numberElement?.appendChild(this.hoverSlot);\n }\n onLineEnter?.({\n ...this.hoveredLine,\n event,\n } as MouseEventEnterLeaveProps<TMode>);\n }\n break;\n }\n case 'click':\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', with data:\",\n data\n );\n if (data == null) break;\n if (isExpandoEventData(data) && onHunkExpand != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', expanding a hunk\"\n );\n onHunkExpand(data.hunkIndex, data.direction);\n break;\n }\n if (isLineEventData(data, this.mode)) {\n if (onLineNumberClick != null && data.numberColumn) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineNumberClick'\"\n );\n onLineNumberClick({ ...data, event } as EventClickProps<TMode>);\n } else if (onLineClick != null) {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', firing 'onLineClick'\"\n );\n onLineClick({ ...data, event } as EventClickProps<TMode>);\n } else {\n debugLogIfEnabled(\n __debugMouseEvents,\n 'click',\n \"FileDiff.DEBUG.handleMouseEvent: switch, 'click', fell through, no event to fire\"\n );\n }\n }\n break;\n }\n }\n\n private clearHoveredLine() {\n if (this.hoveredLine == null) {\n return;\n }\n this.hoveredLine.lineElement.removeAttribute('data-hovered');\n this.hoveredLine.numberElement.removeAttribute('data-hovered');\n this.hoveredLine = undefined;\n }\n\n private setHoveredLine(hoveredLine: EventBaseProps<TMode>) {\n const { lineHoverHighlight = 'disabled' } = this.options;\n if (this.hoveredLine != null) {\n this.clearHoveredLine();\n }\n this.hoveredLine = hoveredLine;\n if (lineHoverHighlight !== 'disabled') {\n if (lineHoverHighlight === 'both' || lineHoverHighlight === 'line') {\n this.hoveredLine.lineElement.setAttribute('data-hovered', '');\n }\n if (lineHoverHighlight === 'both' || lineHoverHighlight === 'number') {\n this.hoveredLine.numberElement.setAttribute('data-hovered', '');\n }\n }\n }\n\n private getLineData(\n path: (EventTarget | undefined)[]\n ): GetLineDataResult<TMode> {\n let numberColumn = false;\n let lineType: LineTypes | undefined;\n let codeElement: HTMLElement | undefined;\n let lineElement: HTMLElement | undefined;\n let lineIndex: string | undefined;\n let numberElement: HTMLElement | undefined;\n let expandInfo:\n | {\n hunkIndex: number | undefined;\n direction: 'up' | 'down' | 'both';\n }\n | undefined;\n let lineNumber: number | undefined;\n\n for (const element of path) {\n if (!(element instanceof HTMLElement)) continue;\n // If we've click on a number column line, lets grab the relevant\n // line info\n const _columnNumber =\n numberElement == null\n ? (element.getAttribute('data-column-number') ?? undefined)\n : undefined;\n if (_columnNumber) {\n numberElement = element;\n lineNumber = Number.parseInt(_columnNumber, 10);\n numberColumn = true;\n lineType = getLineTypeFromElement(element);\n lineIndex = element.getAttribute('data-line-index') ?? undefined;\n continue;\n }\n // If we've clicked on a code column line, lets grab the relevant\n // line info\n const _lineNumber =\n lineElement == null\n ? (element.getAttribute('data-line') ?? undefined)\n : undefined;\n if (_lineNumber) {\n lineElement = element;\n lineNumber = Number.parseInt(_lineNumber, 10);\n lineType = getLineTypeFromElement(element);\n lineIndex = element.getAttribute('data-line-index') ?? undefined;\n continue;\n }\n // If we've clicked on an expand button, lets grab the relevant info\n if (expandInfo == null && element.hasAttribute('data-expand-button')) {\n expandInfo = {\n hunkIndex: undefined,\n direction: (() => {\n if (element.hasAttribute('data-expand-up')) {\n return 'up';\n }\n if (element.hasAttribute('data-expand-down')) {\n return 'down';\n }\n return 'both';\n })(),\n };\n continue;\n }\n // If we've clicked on an expand container, lets grab the index off of it\n // FIXME(amadeus): Might be worth stuffing the expand index into the\n // buttons themselves? Requires a small HTML change tho...\n const _expandIndex =\n expandInfo != null\n ? (element.getAttribute('data-expand-index') ?? undefined)\n : undefined;\n if (expandInfo != null && _expandIndex != null) {\n const expandIndex = Number.parseInt(_expandIndex, 10);\n if (!Number.isNaN(expandIndex)) {\n expandInfo.hunkIndex = expandIndex;\n }\n continue;\n }\n // And finally, if we managed to get to the code element, then we either\n // have the necessary info, or we don't, so we can stop iterating through\n // the path\n if (codeElement == null && element.hasAttribute('data-code')) {\n codeElement = element;\n // Once we've found the code parent, there's no more travesial necessary\n break;\n }\n }\n\n // If we are handling expansion, lets do that\n if (expandInfo?.hunkIndex != null) {\n const { hunkIndex, direction } = expandInfo;\n return { type: 'line-info', hunkIndex, direction };\n }\n\n lineElement ??=\n lineIndex != null\n ? queryHTMLElement(\n codeElement,\n `[data-line][data-line-index=\"${lineIndex}\"]`\n )\n : undefined;\n numberElement ??=\n lineIndex != null\n ? queryHTMLElement(\n codeElement,\n `[data-column-number][data-line-index=\"${lineIndex}\"]`\n )\n : undefined;\n\n // If we were unable to find the necessary elements, we out.\n if (\n codeElement == null ||\n lineElement == null ||\n numberElement == null ||\n lineType == null\n ) {\n return undefined;\n }\n\n if (this.mode === 'file') {\n return {\n type: 'line',\n lineElement,\n lineNumber,\n numberElement,\n numberColumn,\n } as GetLineDataResult<TMode>;\n }\n\n return {\n type: 'diff-line',\n annotationSide: (() => {\n switch (lineType) {\n case 'change-deletion':\n return 'deletions';\n case 'change-addition':\n return 'additions';\n default:\n return codeElement.hasAttribute('data-deletions')\n ? 'deletions'\n : 'additions';\n }\n })(),\n lineType,\n lineElement,\n numberElement,\n lineNumber,\n numberColumn,\n } as GetLineDataResult<TMode>;\n }\n}\n\nfunction debugLogIfEnabled(\n debugLogType: LogTypes | undefined = 'none',\n logIfType: 'move' | 'click',\n ...args: unknown[]\n) {\n switch (debugLogType) {\n case 'none':\n return;\n case 'both':\n break;\n case 'click':\n if (logIfType !== 'click') {\n return;\n }\n break;\n case 'move':\n if (logIfType !== 'move') {\n return;\n }\n break;\n }\n console.log(...args);\n}\n\nexport function pluckMouseEventOptions<TMode extends MouseEventManagerMode>(\n {\n lineHoverHighlight,\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n enableHoverUtility,\n __debugMouseEvents,\n }: MouseEventManagerBaseOptions<TMode>,\n onHunkExpand?: (hunkIndex: number, direction: ExpansionDirections) => unknown\n): MouseEventManagerOptions<TMode> {\n return {\n lineHoverHighlight,\n onLineClick,\n onLineNumberClick,\n onLineEnter,\n onLineLeave,\n enableHoverUtility,\n __debugMouseEvents,\n onHunkExpand,\n };\n}\n\nfunction queryHTMLElement(\n parent: HTMLElement | undefined,\n query: string\n): HTMLElement | undefined {\n const element = parent?.querySelector(query);\n return element instanceof HTMLElement ? element : undefined;\n}\n\nfunction getLineTypeFromElement(element: HTMLElement): LineTypes | undefined {\n const lineType = element.getAttribute('data-line-type');\n if (lineType == null) {\n return undefined;\n }\n switch (lineType) {\n case 'change-deletion':\n case 'change-addition':\n case 'context':\n case 'context-expanded':\n return lineType;\n default:\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -1,10 +1,15 @@
1
1
  //#region src/managers/ResizeManager.d.ts
2
2
  declare class ResizeManager {
3
3
  private observedNodes;
4
+ private timeoutID;
5
+ private queuedUpdates;
4
6
  cleanUp(): void;
5
7
  private resizeObserver;
6
- setup(pre: HTMLPreElement): void;
8
+ setup(pre: HTMLPreElement, disableAnnotations: boolean): void;
7
9
  private handleResizeObserver;
10
+ private queueColumnUpdate;
11
+ private handleColumnChange;
12
+ private applyNewHeight;
8
13
  }
9
14
  //#endregion
10
15
  export { ResizeManager };
@@ -1 +1 @@
1
- {"version":3,"file":"ResizeManager.d.ts","names":[],"sources":["../../src/managers/ResizeManager.ts"],"sourcesContent":[],"mappings":";cAEa,aAAA;EAAb,QAAa,aAAA;;;aAcA"}
1
+ {"version":3,"file":"ResizeManager.d.ts","names":["ResizeManager","HTMLPreElement"],"sources":["../../src/managers/ResizeManager.d.ts"],"sourcesContent":["export declare class ResizeManager {\n private observedNodes;\n private timeoutID;\n private queuedUpdates;\n cleanUp(): void;\n private resizeObserver;\n setup(pre: HTMLPreElement, disableAnnotations: boolean): void;\n private handleResizeObserver;\n private queueColumnUpdate;\n private handleColumnChange;\n private applyNewHeight;\n}\n//# sourceMappingURL=ResizeManager.d.ts.map"],"mappings":";cAAqBA,aAAAA;EAAAA,QAAAA,aAAa;;;;;aAMnBC"}