@pierre/diffs 1.4.1 → 1.4.3

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 (484) hide show
  1. package/dist/components/CodeView.d.ts +4 -4
  2. package/dist/components/CodeView.d.ts.map +1 -1
  3. package/dist/components/CodeView.js +8 -6
  4. package/dist/components/CodeView.js.map +1 -1
  5. package/dist/components/File.d.ts +4 -15
  6. package/dist/components/File.d.ts.map +1 -1
  7. package/dist/components/File.js +4 -0
  8. package/dist/components/File.js.map +1 -1
  9. package/dist/components/FileDiff.d.ts +10 -37
  10. package/dist/components/FileDiff.d.ts.map +1 -1
  11. package/dist/components/FileDiff.js +19 -12
  12. package/dist/components/FileDiff.js.map +1 -1
  13. package/dist/components/FileStream.d.ts +1 -0
  14. package/dist/components/FileStream.d.ts.map +1 -1
  15. package/dist/components/UnresolvedFile.d.ts +1 -1
  16. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  17. package/dist/components/UnresolvedFile.js +2 -1
  18. package/dist/components/UnresolvedFile.js.map +1 -1
  19. package/dist/components/VirtualizedFile.d.ts +2 -8
  20. package/dist/components/VirtualizedFile.d.ts.map +1 -1
  21. package/dist/components/VirtualizedFile.js +19 -18
  22. package/dist/components/VirtualizedFile.js.map +1 -1
  23. package/dist/components/VirtualizedFileDiff.d.ts +2 -8
  24. package/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  25. package/dist/components/VirtualizedFileDiff.js +19 -15
  26. package/dist/components/VirtualizedFileDiff.js.map +1 -1
  27. package/dist/components/Virtualizer.d.ts +1 -5
  28. package/dist/components/Virtualizer.d.ts.map +1 -1
  29. package/dist/components/Virtualizer.js.map +1 -1
  30. package/dist/components/VirtulizerDevelopment.d.ts +0 -1
  31. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  32. package/dist/components/web-components.d.ts.map +1 -1
  33. package/dist/components/web-components.js +2 -1
  34. package/dist/components/web-components.js.map +1 -1
  35. package/dist/constants.d.ts +0 -1
  36. package/dist/constants.d.ts.map +1 -1
  37. package/dist/editor/EditStateManager.d.ts +0 -1
  38. package/dist/editor/EditStateManager.d.ts.map +1 -1
  39. package/dist/editor/EditStateManager.js.map +1 -1
  40. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts +0 -1
  41. package/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts.map +1 -1
  42. package/dist/editor/command.d.ts +2 -1
  43. package/dist/editor/command.d.ts.map +1 -1
  44. package/dist/editor/editPrediction.d.ts +3 -2
  45. package/dist/editor/editPrediction.d.ts.map +1 -1
  46. package/dist/editor/editPrediction.js +11 -11
  47. package/dist/editor/editPrediction.js.map +1 -1
  48. package/dist/editor/editStack.d.ts +0 -1
  49. package/dist/editor/editStack.d.ts.map +1 -1
  50. package/dist/editor/editStack.js.map +1 -1
  51. package/dist/editor/editor.d.ts +1 -5
  52. package/dist/editor/editor.d.ts.map +1 -1
  53. package/dist/editor/editor.js +23 -20
  54. package/dist/editor/editor.js.map +1 -1
  55. package/dist/editor/editor2.js.map +1 -1
  56. package/dist/editor/languages.d.ts +0 -1
  57. package/dist/editor/languages.d.ts.map +1 -1
  58. package/dist/editor/languages.js +1 -1
  59. package/dist/editor/languages.js.map +1 -1
  60. package/dist/editor/lineAnnotations.d.ts +0 -1
  61. package/dist/editor/lineAnnotations.d.ts.map +1 -1
  62. package/dist/editor/lineAnnotations.js +2 -1
  63. package/dist/editor/lineAnnotations.js.map +1 -1
  64. package/dist/editor/marker.d.ts +0 -1
  65. package/dist/editor/marker.d.ts.map +1 -1
  66. package/dist/editor/marker.js +5 -3
  67. package/dist/editor/marker.js.map +1 -1
  68. package/dist/editor/matchBrackets.d.ts +0 -1
  69. package/dist/editor/matchBrackets.d.ts.map +1 -1
  70. package/dist/editor/pieceTable.d.ts +0 -1
  71. package/dist/editor/pieceTable.d.ts.map +1 -1
  72. package/dist/editor/pieceTable.js.map +1 -1
  73. package/dist/editor/platform.d.ts +1 -5
  74. package/dist/editor/platform.d.ts.map +1 -1
  75. package/dist/editor/platform.js.map +1 -1
  76. package/dist/editor/popover.d.ts +12 -12
  77. package/dist/editor/popover.d.ts.map +1 -1
  78. package/dist/editor/popover.js.map +1 -1
  79. package/dist/editor/searchPanel.d.ts +0 -1
  80. package/dist/editor/searchPanel.d.ts.map +1 -1
  81. package/dist/editor/searchPanel.js +16 -12
  82. package/dist/editor/searchPanel.js.map +1 -1
  83. package/dist/editor/selection.d.ts +0 -1
  84. package/dist/editor/selection.d.ts.map +1 -1
  85. package/dist/editor/selection.js.map +1 -1
  86. package/dist/editor/selectionAction.d.ts +0 -1
  87. package/dist/editor/selectionAction.d.ts.map +1 -1
  88. package/dist/editor/selectionAction.js.map +1 -1
  89. package/dist/editor/sprite.d.ts.map +1 -1
  90. package/dist/editor/textDocument.d.ts +0 -1
  91. package/dist/editor/textDocument.d.ts.map +1 -1
  92. package/dist/editor/textDocument.js.map +1 -1
  93. package/dist/editor/textDocumentChangeTransaction.d.ts +0 -1
  94. package/dist/editor/textDocumentChangeTransaction.d.ts.map +1 -1
  95. package/dist/editor/textMeasure.d.ts.map +1 -1
  96. package/dist/editor/textMeasure.js +27 -3
  97. package/dist/editor/textMeasure.js.map +1 -1
  98. package/dist/editor/tokenizer.d.ts +1 -11
  99. package/dist/editor/tokenizer.d.ts.map +1 -1
  100. package/dist/editor/tokenizer.js +8 -4
  101. package/dist/editor/tokenizer.js.map +1 -1
  102. package/dist/editor/types.d.ts +0 -1
  103. package/dist/editor/types.d.ts.map +1 -1
  104. package/dist/editor/utils.d.ts.map +1 -1
  105. package/dist/editor/utils.js +11 -7
  106. package/dist/editor/utils.js.map +1 -1
  107. package/dist/highlighter/languages/areLanguagesAttached.d.ts +0 -1
  108. package/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  109. package/dist/highlighter/languages/attachResolvedLanguages.d.ts +1 -0
  110. package/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  111. package/dist/highlighter/languages/attachResolvedLanguages.js +8 -1
  112. package/dist/highlighter/languages/attachResolvedLanguages.js.map +1 -1
  113. package/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  114. package/dist/highlighter/languages/constants.d.ts +1 -1
  115. package/dist/highlighter/languages/constants.d.ts.map +1 -1
  116. package/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -0
  117. package/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  118. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -0
  119. package/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  120. package/dist/highlighter/languages/hasResolvedLanguages.d.ts +0 -1
  121. package/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  122. package/dist/highlighter/languages/registerCustomLanguage.d.ts +3 -2
  123. package/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  124. package/dist/highlighter/languages/registerCustomLanguage.js +3 -1
  125. package/dist/highlighter/languages/registerCustomLanguage.js.map +1 -1
  126. package/dist/highlighter/languages/resolveLanguage.d.ts +1 -0
  127. package/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  128. package/dist/highlighter/languages/resolveLanguages.d.ts +1 -0
  129. package/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  130. package/dist/highlighter/shared_highlighter.d.ts +1 -6
  131. package/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  132. package/dist/highlighter/themes/areThemesAttached.d.ts +0 -1
  133. package/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  134. package/dist/highlighter/themes/attachResolvedThemes.d.ts +0 -1
  135. package/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  136. package/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  137. package/dist/highlighter/themes/constants.d.ts.map +1 -1
  138. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +0 -1
  139. package/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  140. package/dist/highlighter/themes/getResolvedThemes.d.ts +0 -1
  141. package/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  142. package/dist/highlighter/themes/hasResolvedThemes.d.ts +0 -1
  143. package/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  144. package/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  145. package/dist/highlighter/themes/registerCustomTheme.d.ts +0 -1
  146. package/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  147. package/dist/highlighter/themes/resolveTheme.d.ts +0 -1
  148. package/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  149. package/dist/highlighter/themes/resolveThemes.d.ts +0 -1
  150. package/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  151. package/dist/highlighter/themes/themeResolution.d.ts +0 -1
  152. package/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  153. package/dist/highlighter/themes/themeResolver.d.ts +0 -1
  154. package/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  155. package/dist/index.d.ts +1 -0
  156. package/dist/managers/InteractionManager.d.ts +2 -26
  157. package/dist/managers/InteractionManager.d.ts.map +1 -1
  158. package/dist/managers/InteractionManager.js +1 -3
  159. package/dist/managers/InteractionManager.js.map +1 -1
  160. package/dist/managers/ResizeManager.d.ts +1 -4
  161. package/dist/managers/ResizeManager.d.ts.map +1 -1
  162. package/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  163. package/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  164. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +0 -1
  165. package/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  166. package/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -1
  167. package/dist/react/CodeView.d.ts +9 -1
  168. package/dist/react/CodeView.d.ts.map +1 -1
  169. package/dist/react/CodeView.js +39 -33
  170. package/dist/react/CodeView.js.map +1 -1
  171. package/dist/react/EditContext.d.ts +2 -5
  172. package/dist/react/EditContext.d.ts.map +1 -1
  173. package/dist/react/File.d.ts +1 -23
  174. package/dist/react/File.d.ts.map +1 -1
  175. package/dist/react/File.js +13 -12
  176. package/dist/react/File.js.map +1 -1
  177. package/dist/react/FileDiff.d.ts +1 -23
  178. package/dist/react/FileDiff.d.ts.map +1 -1
  179. package/dist/react/FileDiff.js +13 -12
  180. package/dist/react/FileDiff.js.map +1 -1
  181. package/dist/react/MultiFileDiff.d.ts +1 -24
  182. package/dist/react/MultiFileDiff.d.ts.map +1 -1
  183. package/dist/react/MultiFileDiff.js +13 -12
  184. package/dist/react/MultiFileDiff.js.map +1 -1
  185. package/dist/react/PatchDiff.d.ts +1 -23
  186. package/dist/react/PatchDiff.d.ts.map +1 -1
  187. package/dist/react/PatchDiff.js +13 -12
  188. package/dist/react/PatchDiff.js.map +1 -1
  189. package/dist/react/UnresolvedFile.d.ts +1 -18
  190. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  191. package/dist/react/UnresolvedFile.js +15 -14
  192. package/dist/react/UnresolvedFile.js.map +1 -1
  193. package/dist/react/Virtualizer.d.ts +1 -9
  194. package/dist/react/Virtualizer.d.ts.map +1 -1
  195. package/dist/react/Virtualizer.js.map +1 -1
  196. package/dist/react/WorkerPoolContext.d.ts +2 -6
  197. package/dist/react/WorkerPoolContext.d.ts.map +1 -1
  198. package/dist/react/constants.d.ts +0 -1
  199. package/dist/react/constants.d.ts.map +1 -1
  200. package/dist/react/jsx.d.ts +1 -0
  201. package/dist/react/jsx.d.ts.map +1 -1
  202. package/dist/react/types.d.ts +1 -1
  203. package/dist/react/types.d.ts.map +1 -1
  204. package/dist/react/utils/assignRef.d.ts +6 -0
  205. package/dist/react/utils/assignRef.d.ts.map +1 -0
  206. package/dist/react/utils/assignRef.js +9 -0
  207. package/dist/react/utils/assignRef.js.map +1 -0
  208. package/dist/react/utils/renderDiffChildren.d.ts +1 -16
  209. package/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  210. package/dist/react/utils/renderDiffChildren.js.map +1 -1
  211. package/dist/react/utils/renderFileChildren.d.ts +1 -13
  212. package/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  213. package/dist/react/utils/renderFileChildren.js.map +1 -1
  214. package/dist/react/utils/templateRender.d.ts +0 -1
  215. package/dist/react/utils/templateRender.d.ts.map +1 -1
  216. package/dist/react/utils/useFileDiffInstance.d.ts +2 -18
  217. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  218. package/dist/react/utils/useFileDiffInstance.js +31 -17
  219. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  220. package/dist/react/utils/useFileInstance.d.ts +2 -16
  221. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  222. package/dist/react/utils/useFileInstance.js +8 -4
  223. package/dist/react/utils/useFileInstance.js.map +1 -1
  224. package/dist/react/utils/useStableCallback.d.ts.map +1 -1
  225. package/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -12
  226. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  227. package/dist/renderers/DiffHunksRenderer.d.ts +4 -9
  228. package/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  229. package/dist/renderers/DiffHunksRenderer.js +28 -21
  230. package/dist/renderers/DiffHunksRenderer.js.map +1 -1
  231. package/dist/renderers/FileRenderer.d.ts +1 -0
  232. package/dist/renderers/FileRenderer.d.ts.map +1 -1
  233. package/dist/renderers/FileRenderer.js.map +1 -1
  234. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts +3 -9
  235. package/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  236. package/dist/shiki-stream/stream.d.ts +0 -1
  237. package/dist/shiki-stream/stream.d.ts.map +1 -1
  238. package/dist/shiki-stream/stream.js.map +1 -1
  239. package/dist/shiki-stream/tokenizer.d.ts +0 -1
  240. package/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  241. package/dist/shiki-stream/types.d.ts +0 -1
  242. package/dist/shiki-stream/types.d.ts.map +1 -1
  243. package/dist/sprite.d.ts.map +1 -1
  244. package/dist/ssr/FileDiffReact.d.ts +1 -8
  245. package/dist/ssr/FileDiffReact.d.ts.map +1 -1
  246. package/dist/ssr/FileDiffReact.js +8 -3
  247. package/dist/ssr/FileDiffReact.js.map +1 -1
  248. package/dist/ssr/preloadDiffs.d.ts +6 -34
  249. package/dist/ssr/preloadDiffs.d.ts.map +1 -1
  250. package/dist/ssr/preloadFile.d.ts +1 -6
  251. package/dist/ssr/preloadFile.d.ts.map +1 -1
  252. package/dist/ssr/preloadPatchFile.d.ts +1 -5
  253. package/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  254. package/dist/ssr/renderHTML.d.ts +0 -1
  255. package/dist/ssr/renderHTML.d.ts.map +1 -1
  256. package/dist/string-import.d.ts.map +1 -1
  257. package/dist/style.js.map +1 -1
  258. package/dist/types.d.ts +0 -1
  259. package/dist/types.d.ts.map +1 -1
  260. package/dist/utils/annotationHelpers.d.ts +0 -1
  261. package/dist/utils/annotationHelpers.d.ts.map +1 -1
  262. package/dist/utils/appendItems.d.ts.map +1 -1
  263. package/dist/utils/applyLineTextWithNewline.d.ts.map +1 -1
  264. package/dist/utils/areDiffLineAnnotationsEqual.d.ts +0 -1
  265. package/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  266. package/dist/utils/areDiffRenderOptionsEqual.d.ts +0 -1
  267. package/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  268. package/dist/utils/areDiffTargetsEqual.d.ts +0 -1
  269. package/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  270. package/dist/utils/areFileRenderOptionsEqual.d.ts +0 -1
  271. package/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  272. package/dist/utils/areFileTargetsEqual.d.ts +0 -1
  273. package/dist/utils/areFileTargetsEqual.d.ts.map +1 -1
  274. package/dist/utils/areFilesEqual.d.ts +0 -1
  275. package/dist/utils/areFilesEqual.d.ts.map +1 -1
  276. package/dist/utils/areHunkDataEqual.d.ts +0 -1
  277. package/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  278. package/dist/utils/areLineAnnotationsEqual.d.ts +0 -1
  279. package/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  280. package/dist/utils/areManagedSnapshotsEqual.d.ts +0 -1
  281. package/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  282. package/dist/utils/areMergeConflictActionsEqual.d.ts +0 -1
  283. package/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  284. package/dist/utils/areObjectsEqual.d.ts.map +1 -1
  285. package/dist/utils/areOptionsEqual.d.ts +1 -0
  286. package/dist/utils/areOptionsEqual.d.ts.map +1 -1
  287. package/dist/utils/arePrePropertiesEqual.d.ts +0 -1
  288. package/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  289. package/dist/utils/areRenderRangesEqual.d.ts +0 -1
  290. package/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  291. package/dist/utils/areSelectionPointsEqual.d.ts +0 -1
  292. package/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  293. package/dist/utils/areSelectionsEqual.d.ts +0 -1
  294. package/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  295. package/dist/utils/areThemesEqual.d.ts +0 -1
  296. package/dist/utils/areThemesEqual.d.ts.map +1 -1
  297. package/dist/utils/areVirtualWindowSpecsEqual.d.ts +0 -1
  298. package/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  299. package/dist/utils/areWorkerStatsEqual.d.ts +1 -0
  300. package/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  301. package/dist/utils/awaitWithTimeout.d.ts.map +1 -1
  302. package/dist/utils/cleanLastNewline.d.ts.map +1 -1
  303. package/dist/utils/cloneFileDiffMetadata.d.ts +0 -1
  304. package/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -1
  305. package/dist/utils/composeCacheKey.d.ts.map +1 -1
  306. package/dist/utils/computeEstimatedDiffHeights.d.ts +1 -11
  307. package/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  308. package/dist/utils/computeFileOffsets.d.ts.map +1 -1
  309. package/dist/utils/computeFileOffsets.js +9 -8
  310. package/dist/utils/computeFileOffsets.js.map +1 -1
  311. package/dist/utils/computeVirtualFileMetrics.d.ts +0 -1
  312. package/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  313. package/dist/utils/createAnnotationElement.d.ts +0 -1
  314. package/dist/utils/createAnnotationElement.d.ts.map +1 -1
  315. package/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  316. package/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -1
  317. package/dist/utils/createContentColumn.d.ts +0 -1
  318. package/dist/utils/createContentColumn.d.ts.map +1 -1
  319. package/dist/utils/createEmptyRowBuffer.d.ts +0 -1
  320. package/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  321. package/dist/utils/createFileHeaderElement.d.ts +1 -6
  322. package/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  323. package/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  324. package/dist/utils/createGutterUtilityElement.d.ts +0 -1
  325. package/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  326. package/dist/utils/createNoNewlineElement.d.ts +0 -1
  327. package/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  328. package/dist/utils/createPreElement.d.ts +1 -11
  329. package/dist/utils/createPreElement.d.ts.map +1 -1
  330. package/dist/utils/createRowNodes.d.ts.map +1 -1
  331. package/dist/utils/createSeparator.d.ts +1 -10
  332. package/dist/utils/createSeparator.d.ts.map +1 -1
  333. package/dist/utils/createSeparator.js +12 -10
  334. package/dist/utils/createSeparator.js.map +1 -1
  335. package/dist/utils/createSpanNodeFromToken.d.ts +0 -1
  336. package/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  337. package/dist/utils/createSpanNodeFromToken.js +2 -1
  338. package/dist/utils/createSpanNodeFromToken.js.map +1 -1
  339. package/dist/utils/createStyleElement.d.ts +0 -1
  340. package/dist/utils/createStyleElement.d.ts.map +1 -1
  341. package/dist/utils/createTransformerWithState.d.ts +0 -1
  342. package/dist/utils/createTransformerWithState.d.ts.map +1 -1
  343. package/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  344. package/dist/utils/createWindowFromScrollPosition.d.ts +1 -9
  345. package/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  346. package/dist/utils/cssWrappers.d.ts +0 -1
  347. package/dist/utils/cssWrappers.d.ts.map +1 -1
  348. package/dist/utils/cssWrappers.js +5 -3
  349. package/dist/utils/cssWrappers.js.map +1 -1
  350. package/dist/utils/detachString.d.ts.map +1 -1
  351. package/dist/utils/diffAcceptRejectHunk.d.ts +0 -1
  352. package/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  353. package/dist/utils/editSessionAnnotations.d.ts +0 -1
  354. package/dist/utils/editSessionAnnotations.d.ts.map +1 -1
  355. package/dist/utils/editSessionHunks.d.ts +0 -1
  356. package/dist/utils/editSessionHunks.d.ts.map +1 -1
  357. package/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  358. package/dist/utils/getDiffFileInput.d.ts +1 -5
  359. package/dist/utils/getDiffFileInput.d.ts.map +1 -1
  360. package/dist/utils/getDiffHunksRendererOptions.d.ts +0 -1
  361. package/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  362. package/dist/utils/getFileRendererOptions.d.ts +0 -1
  363. package/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  364. package/dist/utils/getFiletypeFromFileName.d.ts +0 -1
  365. package/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  366. package/dist/utils/getFiletypeFromFileName.js.map +1 -1
  367. package/dist/utils/getHighlighterOptions.d.ts +1 -5
  368. package/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  369. package/dist/utils/getHighlighterOptions.js +1 -1
  370. package/dist/utils/getHighlighterOptions.js.map +1 -1
  371. package/dist/utils/getHighlighterThemeStyles.d.ts +1 -6
  372. package/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  373. package/dist/utils/getHunkSeparatorSlotName.d.ts +0 -1
  374. package/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  375. package/dist/utils/getHunkSideBoundaries.d.ts.map +1 -1
  376. package/dist/utils/getIconForType.d.ts +0 -1
  377. package/dist/utils/getIconForType.d.ts.map +1 -1
  378. package/dist/utils/getLineAnnotationName.d.ts +0 -1
  379. package/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  380. package/dist/utils/getLineEndingType.d.ts.map +1 -1
  381. package/dist/utils/getLineNodes.d.ts +0 -1
  382. package/dist/utils/getLineNodes.d.ts.map +1 -1
  383. package/dist/utils/getMergeConflictActionSlotName.d.ts +1 -5
  384. package/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  385. package/dist/utils/getMergeConflictLineTypes.d.ts +0 -1
  386. package/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  387. package/dist/utils/getOrCreateCodeNode.d.ts +1 -7
  388. package/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  389. package/dist/utils/getSingularPatch.d.ts +0 -1
  390. package/dist/utils/getSingularPatch.d.ts.map +1 -1
  391. package/dist/utils/getThemes.d.ts +0 -1
  392. package/dist/utils/getThemes.d.ts.map +1 -1
  393. package/dist/utils/getTotalLineCountFromHunks.d.ts +0 -1
  394. package/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  395. package/dist/utils/guardWebKitScrollDuringRebuild.d.ts.map +1 -1
  396. package/dist/utils/hast_utils.d.ts +2 -12
  397. package/dist/utils/hast_utils.d.ts.map +1 -1
  398. package/dist/utils/hostTheme.d.ts +1 -5
  399. package/dist/utils/hostTheme.d.ts.map +1 -1
  400. package/dist/utils/hydratePartialDiff.d.ts +0 -1
  401. package/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  402. package/dist/utils/includesFileAnnotations.d.ts +0 -1
  403. package/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  404. package/dist/utils/isDefaultRenderRange.d.ts +0 -1
  405. package/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  406. package/dist/utils/isDiffPlainText.d.ts +0 -1
  407. package/dist/utils/isDiffPlainText.d.ts.map +1 -1
  408. package/dist/utils/isFilePlainText.d.ts +0 -1
  409. package/dist/utils/isFilePlainText.d.ts.map +1 -1
  410. package/dist/utils/isGutterUtilityPath.d.ts.map +1 -1
  411. package/dist/utils/isStyleNode.d.ts.map +1 -1
  412. package/dist/utils/isWorkerContext.d.ts.map +1 -1
  413. package/dist/utils/iterateOverDiff.d.ts +1 -10
  414. package/dist/utils/iterateOverDiff.d.ts.map +1 -1
  415. package/dist/utils/iterateOverDiff.js +5 -3
  416. package/dist/utils/iterateOverDiff.js.map +1 -1
  417. package/dist/utils/lineAnnotationIdentity.d.ts +0 -1
  418. package/dist/utils/lineAnnotationIdentity.d.ts.map +1 -1
  419. package/dist/utils/normalizeDiffResolution.d.ts +0 -1
  420. package/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  421. package/dist/utils/parseDiffDecorations.d.ts +2 -13
  422. package/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  423. package/dist/utils/parseDiffFromFile.d.ts +0 -1
  424. package/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  425. package/dist/utils/parseDiffFromFile.js +2 -1
  426. package/dist/utils/parseDiffFromFile.js.map +1 -1
  427. package/dist/utils/parseLineType.d.ts +0 -1
  428. package/dist/utils/parseLineType.d.ts.map +1 -1
  429. package/dist/utils/parseMergeConflictDiffFromFile.d.ts +0 -1
  430. package/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  431. package/dist/utils/parsePatchFiles.d.ts +0 -1
  432. package/dist/utils/parsePatchFiles.d.ts.map +1 -1
  433. package/dist/utils/parsePatchFiles.js +8 -5
  434. package/dist/utils/parsePatchFiles.js.map +1 -1
  435. package/dist/utils/platform.d.ts.map +1 -1
  436. package/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  437. package/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  438. package/dist/utils/processLine.d.ts +0 -1
  439. package/dist/utils/processLine.d.ts.map +1 -1
  440. package/dist/utils/realignChangeContent.d.ts +0 -1
  441. package/dist/utils/realignChangeContent.d.ts.map +1 -1
  442. package/dist/utils/renderDiffWithHighlighter.d.ts +1 -8
  443. package/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  444. package/dist/utils/renderFileWithHighlighter.d.ts +1 -11
  445. package/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  446. package/dist/utils/resolveConflict.d.ts +0 -1
  447. package/dist/utils/resolveConflict.d.ts.map +1 -1
  448. package/dist/utils/resolveRegion.d.ts +0 -1
  449. package/dist/utils/resolveRegion.d.ts.map +1 -1
  450. package/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  451. package/dist/utils/scrollbarGutter.d.ts.map +1 -1
  452. package/dist/utils/scrollbarGutter.js +2 -1
  453. package/dist/utils/scrollbarGutter.js.map +1 -1
  454. package/dist/utils/setLanguageOverride.d.ts +0 -1
  455. package/dist/utils/setLanguageOverride.d.ts.map +1 -1
  456. package/dist/utils/setWrapperNodeProps.d.ts +1 -11
  457. package/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  458. package/dist/utils/setWrapperNodeProps.js +1 -3
  459. package/dist/utils/setWrapperNodeProps.js.map +1 -1
  460. package/dist/utils/shouldUseTokenTransformer.d.ts +0 -1
  461. package/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  462. package/dist/utils/splitFileContents.d.ts.map +1 -1
  463. package/dist/utils/trimPatchContext.d.ts.map +1 -1
  464. package/dist/utils/updateDiffHunks.d.ts +0 -1
  465. package/dist/utils/updateDiffHunks.d.ts.map +1 -1
  466. package/dist/utils/virtualDiffLayout.d.ts +10 -55
  467. package/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  468. package/dist/utils/wrapTokenFragments.d.ts +0 -1
  469. package/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  470. package/dist/worker/WorkerPoolManager.d.ts +2 -17
  471. package/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  472. package/dist/worker/WorkerPoolManager.js +48 -43
  473. package/dist/worker/WorkerPoolManager.js.map +1 -1
  474. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +1 -5
  475. package/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  476. package/dist/worker/types.d.ts +0 -1
  477. package/dist/worker/types.d.ts.map +1 -1
  478. package/dist/worker/worker-portable.d.ts +1 -1
  479. package/dist/worker/worker-portable.js +121 -355
  480. package/dist/worker/worker-portable.js.map +1 -1
  481. package/dist/worker/worker.d.ts +1 -1
  482. package/dist/worker/worker.js +22 -12
  483. package/dist/worker/worker.js.map +1 -1
  484. package/package.json +4 -5
@@ -1 +1 @@
1
- {"version":3,"file":"searchPanel.js","names":["#updateMatches","#navigate","#close","#inputElement","#applyMode","#container"],"sources":["../../src/editor/searchPanel.ts"],"sourcesContent":["import { resolveFindAgainShortcut } from './command';\nimport { buildSearchReplacementText } from './pieceTable';\nimport { isPrimaryModifier } from './platform';\nimport { getEditorIconSvg, type SVGSpriteNames } from './sprite';\nimport type { TextDocument } from './textDocument';\nimport type { ResolvedTextEdit } from './types';\nimport { h } from './utils';\n\nexport type MatchRange = [startOffset: number, endOffset: number];\n\nexport type SearchPanelMode = 'find' | 'replace';\n\nexport interface SearchParams {\n text: string;\n replaceText: string;\n caseSensitive: boolean;\n wholeWord: boolean;\n regex: boolean;\n}\n\nexport interface SearchPanelOptions {\n textDocument: TextDocument;\n containerElement: HTMLElement;\n defaultQuery: string;\n mode?: SearchPanelMode;\n initialMatch?: MatchRange;\n scrollToMatch: (nextMatch: MatchRange, retainFocus: boolean) => void;\n applyReplace: (edits: ResolvedTextEdit[]) => void;\n onUpdate: (\n matches: MatchRange[],\n options?: { syncSelection?: boolean }\n ) => MatchRange | undefined;\n onClose: () => void;\n}\n\nexport class SearchPanelWidget {\n #container: HTMLDivElement;\n #inputElement: HTMLInputElement;\n #updateMatches?: (options?: { syncSelection?: boolean }) => void;\n #applyMode?: (mode: SearchPanelMode) => void;\n #navigate?: (findPrevious: boolean) => void;\n #close?: () => void;\n\n constructor(options: SearchPanelOptions) {\n const {\n textDocument,\n containerElement,\n defaultQuery,\n mode = 'find',\n initialMatch,\n scrollToMatch,\n applyReplace,\n onUpdate,\n onClose,\n } = options;\n\n const searchParams: SearchParams = {\n text: defaultQuery,\n replaceText: '',\n caseSensitive: false,\n wholeWord: false,\n regex: false,\n };\n\n const matches = {\n all: [] as MatchRange[],\n current: undefined as MatchRange | undefined,\n };\n\n // Default to the empty-query \"no results\" state so it shows on open before\n // any search runs.\n const matchResultElement = h('div', {\n dataset: { matches: '', noMatches: '' },\n textContent: 'No results',\n });\n const updateMatches = (options?: { syncSelection?: boolean }) => {\n matches.all =\n searchParams.text !== '' ? textDocument.search(searchParams) : [];\n const noMatches = matches.all.length === 0;\n prevButton.disabled = noMatches;\n nextButton.disabled = noMatches;\n\n // An empty query and a query with zero hits are the same \"no results\"\n // state. Both push an empty match set through onUpdate so the editor\n // drops #matches and clears the painted highlights.\n if (noMatches) {\n matchResultElement.textContent = 'No results';\n matchResultElement.dataset.noMatches = '';\n matches.current = undefined;\n onUpdate([]);\n return;\n }\n\n delete matchResultElement.dataset.noMatches;\n if (options?.syncSelection === false) {\n const currentMatch = onUpdate(matches.all, { syncSelection: false });\n updateCurrentMatch(currentMatch);\n return;\n }\n\n updateCurrentMatch(onUpdate(matches.all));\n };\n this.#updateMatches = updateMatches;\n\n const updateCurrentMatch = (currentMatch: MatchRange | undefined) => {\n if (currentMatch === undefined) {\n matchResultElement.textContent = `${matches.all.length} results`;\n } else {\n const [start, end] = currentMatch;\n const index = matches.all.findIndex(\n (m) => m[0] === start && m[1] === end\n );\n matchResultElement.textContent = `${index + 1} of ${matches.all.length}`;\n }\n matches.current = currentMatch;\n };\n\n const updateSearchParam = <K extends keyof SearchParams>(\n key: K,\n value: SearchParams[K]\n ) => {\n searchParams[key] = value;\n updateMatches();\n };\n\n const findNextMatch = (\n findPrevious: boolean = false,\n retainFocus: boolean = false\n ) => {\n const allMatches = matches.all;\n let nextMatch: MatchRange | undefined = allMatches[0];\n if (allMatches.length > 0) {\n if (findPrevious) {\n const searchOffset = matches.current?.[0] ?? 0;\n nextMatch = allMatches.at(-1);\n for (const m of allMatches) {\n if (m[1] <= searchOffset) {\n nextMatch = m;\n } else {\n break;\n }\n }\n } else {\n const searchOffset = matches.current?.[1] ?? 0;\n for (const m of allMatches) {\n if (m[0] >= searchOffset) {\n nextMatch = m;\n break;\n }\n }\n }\n }\n if (nextMatch !== undefined) {\n updateCurrentMatch(nextMatch);\n scrollToMatch(nextMatch, retainFocus);\n }\n matches.current = nextMatch;\n };\n // Keep focus in the panel when stepping through matches from the inputs.\n this.#navigate = (findPrevious: boolean) =>\n findNextMatch(findPrevious, true);\n\n const buildReplacementEdit = (\n matchStart: number,\n matchEnd: number\n ): ResolvedTextEdit => ({\n start: matchStart,\n end: matchEnd,\n text: buildSearchReplacementText(\n (offset) => textDocument.positionAt(offset),\n (position) => textDocument.offsetAt(position),\n (line) => textDocument.getLineText(line),\n searchParams,\n matchStart,\n matchEnd\n ),\n });\n\n const replace = () => {\n if (searchParams.text === '' || matches.all.length === 0) {\n return;\n }\n\n let currentMatch = matches.current;\n if (currentMatch === undefined) {\n findNextMatch(false, true);\n currentMatch = matches.current;\n if (currentMatch === undefined) {\n return;\n }\n }\n\n const [start, end] = currentMatch;\n const edit = buildReplacementEdit(start, end);\n applyReplace([edit]);\n\n // Collapse after the replacement so the next search pass advances.\n scrollToMatch([start + edit.text.length, start + edit.text.length], true);\n matches.current = undefined;\n updateMatches();\n };\n\n const replaceAll = () => {\n if (searchParams.text === '' || matches.all.length === 0) {\n return;\n }\n\n applyReplace(\n matches.all.map(([start, end]) => buildReplacementEdit(start, end))\n );\n matches.current = undefined;\n updateMatches();\n };\n\n const close = () => {\n this.cleanup();\n onClose();\n };\n this.#close = close;\n\n // Shared builder for the panel's icon controls. Every clickable control is a\n // real <button> so it gets focus, keyboard activation, and native disabled\n // handling for free; `getEditorIconSvg` marks the glyph aria-hidden, so the\n // accessible name comes from `label` (also used as the hover title).\n const iconButton = (opts: {\n icon: SVGSpriteNames;\n label: string;\n size?: number;\n dataset?: Record<string, string>;\n onClick: () => void;\n }) =>\n h('button', {\n type: 'button',\n title: opts.label,\n ariaLabel: opts.label,\n dataset: { searchIcon: '', ...opts.dataset },\n innerHTML: getEditorIconSvg(opts.icon, opts.size ?? 16),\n onclick: opts.onClick,\n });\n\n // Builds an always-visible icon button that toggles one boolean search\n // option (case/whole-word/regex). The button reflects its on/off state via\n // `aria-pressed` so the stylesheet can highlight it and assistive tech can\n // announce it.\n const makeToggle = (\n icon: SVGSpriteNames,\n title: string,\n key: 'caseSensitive' | 'wholeWord' | 'regex'\n ) => {\n const button = iconButton({\n icon,\n label: title,\n size: 14,\n onClick: () => {\n const next = !searchParams[key];\n button.ariaPressed = String(next);\n updateSearchParam(key, next);\n },\n });\n button.ariaPressed = String(searchParams[key]);\n return button;\n };\n\n const caseSensitiveToggle = makeToggle(\n 'case',\n 'Match Case',\n 'caseSensitive'\n );\n const wholeWordToggle = makeToggle('whole-word', 'Whole Word', 'wholeWord');\n const regexToggle = makeToggle('regex', 'Regexp', 'regex');\n\n const replaceInputElement = h('input', {\n type: 'text',\n placeholder: 'Replace',\n dataset: 'replace',\n value: '',\n oninput: (e: Event) => {\n searchParams.replaceText = (e.target as HTMLInputElement).value;\n },\n onkeydown: (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n const findAgain = resolveFindAgainShortcut(e);\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n replace();\n } else if (findAgain !== undefined) {\n e.preventDefault();\n findNextMatch(findAgain === 'previous', true);\n }\n },\n });\n\n this.#inputElement = h('input', {\n type: 'text',\n placeholder: 'Search',\n dataset: 'search',\n value: defaultQuery,\n oninput: (e: Event) => {\n searchParams.text = (e.target as HTMLInputElement).value;\n matches.current = undefined;\n updateMatches();\n },\n onkeydown: (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n const findAgain = resolveFindAgainShortcut(e);\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n findNextMatch(e.shiftKey, true);\n } else if (findAgain !== undefined) {\n // Override the native browser find-again shortcut so cmd+g steps to\n // the next match and cmd+shift+g to the previous one.\n e.preventDefault();\n findNextMatch(findAgain === 'previous', true);\n } else if (\n isPrimaryModifier(e) &&\n (e.key === 'f' || e.code === 'KeyF')\n ) {\n // Prevent the default browser search panel and switch the panel mode\n // in place (cmd+f -> find, cmd+opt+f -> find/replace).\n e.preventDefault();\n applyMode(e.altKey ? 'replace' : 'find');\n }\n },\n });\n\n // The three search-option toggles are overlaid on the right edge of the\n // find input instead of sitting beside it.\n const searchTogglesElement = h('div', {\n dataset: 'searchToggles',\n children: [caseSensitiveToggle, wholeWordToggle, regexToggle],\n });\n\n const findInputBox = h('div', {\n dataset: { inputBox: '', find: '' },\n children: [this.#inputElement, searchTogglesElement],\n });\n\n // The replace input and its action buttons are tagged as replace cells so\n // they can be hidden together when the panel is in find-only mode.\n const replaceInputBox = h('div', {\n dataset: { inputBox: '', replace: '', replaceCell: '' },\n children: [replaceInputElement],\n });\n\n const replaceActionsElement = h('div', {\n dataset: { replaceActions: '', replaceCell: '' },\n children: [\n iconButton({ icon: 'replace', label: 'Replace', onClick: replace }),\n iconButton({\n icon: 'replace-all',\n label: 'Replace All',\n onClick: replaceAll,\n }),\n ],\n });\n\n // Held so the no-results state can toggle their native disabled flag.\n const prevButton = iconButton({\n icon: 'arrow-up',\n label: 'Previous',\n onClick: () => {\n findNextMatch(true);\n },\n });\n const nextButton = iconButton({\n icon: 'arrow-down',\n label: 'Next',\n onClick: () => {\n findNextMatch();\n },\n });\n prevButton.disabled = true;\n nextButton.disabled = true;\n\n const navElement = h('div', {\n dataset: 'searchNav',\n children: [prevButton, nextButton],\n });\n\n const closeElement = iconButton({\n icon: 'close',\n label: 'Close',\n onClick: close,\n dataset: { searchClose: '' },\n });\n\n // Cells are positioned by CSS grid-template-areas (see editor.css), so DOM\n // order here only drives tab/reading order, not layout. Keep the replace\n // input directly after the find input (and its toggles) so Tab walks\n // find -> replace before reaching the nav arrows and close button.\n const gridElement = h('div', {\n dataset: { searchGrid: '', mode },\n children: [\n findInputBox,\n replaceInputBox,\n replaceActionsElement,\n matchResultElement,\n navElement,\n closeElement,\n ],\n });\n\n // Toggles the panel between find and find/replace modes by showing or\n // hiding the replace cells, then returns focus to the find input.\n const applyMode = (next: SearchPanelMode) => {\n gridElement.dataset.mode = next;\n this.#inputElement.focus();\n this.#inputElement.select();\n };\n this.#applyMode = applyMode;\n\n this.#container = h('div', {\n dataset: 'searchPanel',\n children: [\n h('div', {\n dataset: 'editorWidget',\n children: [gridElement],\n }),\n ],\n });\n\n matches.current = initialMatch;\n containerElement.before(this.#container);\n\n requestAnimationFrame(() => {\n if (initialMatch !== undefined) {\n updateMatches();\n } else {\n onUpdate([]);\n }\n this.#inputElement.select();\n });\n }\n\n focus(): void {\n this.#inputElement.focus();\n }\n\n navigate(findPrevious: boolean): void {\n this.#navigate?.(findPrevious);\n }\n\n updateMatches(options?: { syncSelection?: boolean }): void {\n this.#updateMatches?.(options);\n }\n\n setMode(mode: SearchPanelMode): void {\n this.#applyMode?.(mode);\n }\n\n // Tears the panel down the way the close button and Escape-in-input do:\n // removes the DOM and runs onClose so the editor clears its match highlights.\n // Prefer this over cleanup() for any user-initiated dismissal.\n close(): void {\n this.#close?.();\n }\n\n // DOM-only teardown. Does NOT run onClose, so it leaves the editor's match\n // highlights in place; only use it when the caller clears that state itself\n // (e.g. a full editor reset). User-initiated dismissals should call close().\n cleanup(): void {\n this.#container.remove();\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"searchPanel.js","names":[],"sources":["../../src/editor/searchPanel.ts"],"sourcesContent":["import { resolveFindAgainShortcut } from './command';\nimport { buildSearchReplacementText } from './pieceTable';\nimport { isPrimaryModifier } from './platform';\nimport { getEditorIconSvg, type SVGSpriteNames } from './sprite';\nimport type { TextDocument } from './textDocument';\nimport type { ResolvedTextEdit } from './types';\nimport { h } from './utils';\n\nexport type MatchRange = [startOffset: number, endOffset: number];\n\nexport type SearchPanelMode = 'find' | 'replace';\n\nexport interface SearchParams {\n text: string;\n replaceText: string;\n caseSensitive: boolean;\n wholeWord: boolean;\n regex: boolean;\n}\n\nexport interface SearchPanelOptions {\n textDocument: TextDocument;\n containerElement: HTMLElement;\n defaultQuery: string;\n mode?: SearchPanelMode;\n initialMatch?: MatchRange;\n scrollToMatch: (nextMatch: MatchRange, retainFocus: boolean) => void;\n applyReplace: (edits: ResolvedTextEdit[]) => void;\n onUpdate: (\n matches: MatchRange[],\n options?: { syncSelection?: boolean }\n ) => MatchRange | undefined;\n onClose: () => void;\n}\n\nexport class SearchPanelWidget {\n #container: HTMLDivElement;\n #inputElement: HTMLInputElement;\n #updateMatches?: (options?: { syncSelection?: boolean }) => void;\n #applyMode?: (mode: SearchPanelMode) => void;\n #navigate?: (findPrevious: boolean) => void;\n #close?: () => void;\n\n constructor(options: SearchPanelOptions) {\n const {\n textDocument,\n containerElement,\n defaultQuery,\n mode = 'find',\n initialMatch,\n scrollToMatch,\n applyReplace,\n onUpdate,\n onClose,\n } = options;\n\n const searchParams: SearchParams = {\n text: defaultQuery,\n replaceText: '',\n caseSensitive: false,\n wholeWord: false,\n regex: false,\n };\n\n const matches = {\n all: [] as MatchRange[],\n current: undefined as MatchRange | undefined,\n };\n\n // Default to the empty-query \"no results\" state so it shows on open before\n // any search runs.\n const matchResultElement = h('div', {\n dataset: { matches: '', noMatches: '' },\n textContent: 'No results',\n });\n const updateMatches = (options?: { syncSelection?: boolean }) => {\n matches.all =\n searchParams.text !== '' ? textDocument.search(searchParams) : [];\n const noMatches = matches.all.length === 0;\n prevButton.disabled = noMatches;\n nextButton.disabled = noMatches;\n\n // An empty query and a query with zero hits are the same \"no results\"\n // state. Both push an empty match set through onUpdate so the editor\n // drops #matches and clears the painted highlights.\n if (noMatches) {\n matchResultElement.textContent = 'No results';\n matchResultElement.dataset.noMatches = '';\n matches.current = undefined;\n onUpdate([]);\n return;\n }\n\n delete matchResultElement.dataset.noMatches;\n if (options?.syncSelection === false) {\n const currentMatch = onUpdate(matches.all, { syncSelection: false });\n updateCurrentMatch(currentMatch);\n return;\n }\n\n updateCurrentMatch(onUpdate(matches.all));\n };\n this.#updateMatches = updateMatches;\n\n const updateCurrentMatch = (currentMatch: MatchRange | undefined) => {\n if (currentMatch === undefined) {\n matchResultElement.textContent = `${matches.all.length} results`;\n } else {\n const [start, end] = currentMatch;\n const index = matches.all.findIndex(\n (m) => m[0] === start && m[1] === end\n );\n matchResultElement.textContent = `${index + 1} of ${matches.all.length}`;\n }\n matches.current = currentMatch;\n };\n\n const updateSearchParam = <K extends keyof SearchParams>(\n key: K,\n value: SearchParams[K]\n ) => {\n searchParams[key] = value;\n updateMatches();\n };\n\n const findNextMatch = (\n findPrevious: boolean = false,\n retainFocus: boolean = false\n ) => {\n const allMatches = matches.all;\n let nextMatch: MatchRange | undefined = allMatches[0];\n if (allMatches.length > 0) {\n if (findPrevious) {\n const searchOffset = matches.current?.[0] ?? 0;\n nextMatch = allMatches.at(-1);\n for (const m of allMatches) {\n if (m[1] <= searchOffset) {\n nextMatch = m;\n } else {\n break;\n }\n }\n } else {\n const searchOffset = matches.current?.[1] ?? 0;\n for (const m of allMatches) {\n if (m[0] >= searchOffset) {\n nextMatch = m;\n break;\n }\n }\n }\n }\n if (nextMatch !== undefined) {\n updateCurrentMatch(nextMatch);\n scrollToMatch(nextMatch, retainFocus);\n }\n matches.current = nextMatch;\n };\n // Keep focus in the panel when stepping through matches from the inputs.\n this.#navigate = (findPrevious: boolean) =>\n findNextMatch(findPrevious, true);\n\n const buildReplacementEdit = (\n matchStart: number,\n matchEnd: number\n ): ResolvedTextEdit => ({\n start: matchStart,\n end: matchEnd,\n text: buildSearchReplacementText(\n (offset) => textDocument.positionAt(offset),\n (position) => textDocument.offsetAt(position),\n (line) => textDocument.getLineText(line),\n searchParams,\n matchStart,\n matchEnd\n ),\n });\n\n const replace = () => {\n if (searchParams.text === '' || matches.all.length === 0) {\n return;\n }\n\n let currentMatch = matches.current;\n if (currentMatch === undefined) {\n findNextMatch(false, true);\n currentMatch = matches.current;\n if (currentMatch === undefined) {\n return;\n }\n }\n\n const [start, end] = currentMatch;\n const edit = buildReplacementEdit(start, end);\n applyReplace([edit]);\n\n // Collapse after the replacement so the next search pass advances.\n scrollToMatch([start + edit.text.length, start + edit.text.length], true);\n matches.current = undefined;\n updateMatches();\n };\n\n const replaceAll = () => {\n if (searchParams.text === '' || matches.all.length === 0) {\n return;\n }\n\n applyReplace(\n matches.all.map(([start, end]) => buildReplacementEdit(start, end))\n );\n matches.current = undefined;\n updateMatches();\n };\n\n const close = () => {\n this.cleanup();\n onClose();\n };\n this.#close = close;\n\n // Shared builder for the panel's icon controls. Every clickable control is a\n // real <button> so it gets focus, keyboard activation, and native disabled\n // handling for free; `getEditorIconSvg` marks the glyph aria-hidden, so the\n // accessible name comes from `label` (also used as the hover title).\n const iconButton = (opts: {\n icon: SVGSpriteNames;\n label: string;\n size?: number;\n dataset?: Record<string, string>;\n onClick: () => void;\n }) =>\n h('button', {\n type: 'button',\n title: opts.label,\n ariaLabel: opts.label,\n dataset: { searchIcon: '', ...opts.dataset },\n innerHTML: getEditorIconSvg(opts.icon, opts.size ?? 16),\n onclick: opts.onClick,\n });\n\n // Builds an always-visible icon button that toggles one boolean search\n // option (case/whole-word/regex). The button reflects its on/off state via\n // `aria-pressed` so the stylesheet can highlight it and assistive tech can\n // announce it.\n const makeToggle = (\n icon: SVGSpriteNames,\n title: string,\n key: 'caseSensitive' | 'wholeWord' | 'regex'\n ) => {\n const button = iconButton({\n icon,\n label: title,\n size: 14,\n onClick: () => {\n const next = !searchParams[key];\n button.ariaPressed = String(next);\n updateSearchParam(key, next);\n },\n });\n button.ariaPressed = String(searchParams[key]);\n return button;\n };\n\n const caseSensitiveToggle = makeToggle(\n 'case',\n 'Match Case',\n 'caseSensitive'\n );\n const wholeWordToggle = makeToggle('whole-word', 'Whole Word', 'wholeWord');\n const regexToggle = makeToggle('regex', 'Regexp', 'regex');\n\n const replaceInputElement = h('input', {\n type: 'text',\n placeholder: 'Replace',\n dataset: 'replace',\n value: '',\n oninput: (e: Event) => {\n searchParams.replaceText = (e.target as HTMLInputElement).value;\n },\n onkeydown: (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n const findAgain = resolveFindAgainShortcut(e);\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n replace();\n } else if (findAgain !== undefined) {\n e.preventDefault();\n findNextMatch(findAgain === 'previous', true);\n }\n },\n });\n\n this.#inputElement = h('input', {\n type: 'text',\n placeholder: 'Search',\n dataset: 'search',\n value: defaultQuery,\n oninput: (e: Event) => {\n searchParams.text = (e.target as HTMLInputElement).value;\n matches.current = undefined;\n updateMatches();\n },\n onkeydown: (e: KeyboardEvent) => {\n if (e.isComposing || e.keyCode === 229) {\n return;\n }\n const findAgain = resolveFindAgainShortcut(e);\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n findNextMatch(e.shiftKey, true);\n } else if (findAgain !== undefined) {\n // Override the native browser find-again shortcut so cmd+g steps to\n // the next match and cmd+shift+g to the previous one.\n e.preventDefault();\n findNextMatch(findAgain === 'previous', true);\n } else if (\n isPrimaryModifier(e) &&\n (e.key === 'f' || e.code === 'KeyF')\n ) {\n // Prevent the default browser search panel and switch the panel mode\n // in place (cmd+f -> find, cmd+opt+f -> find/replace).\n e.preventDefault();\n applyMode(e.altKey ? 'replace' : 'find');\n }\n },\n });\n\n // The three search-option toggles are overlaid on the right edge of the\n // find input instead of sitting beside it.\n const searchTogglesElement = h('div', {\n dataset: 'searchToggles',\n children: [caseSensitiveToggle, wholeWordToggle, regexToggle],\n });\n\n const findInputBox = h('div', {\n dataset: { inputBox: '', find: '' },\n children: [this.#inputElement, searchTogglesElement],\n });\n\n // The replace input and its action buttons are tagged as replace cells so\n // they can be hidden together when the panel is in find-only mode.\n const replaceInputBox = h('div', {\n dataset: { inputBox: '', replace: '', replaceCell: '' },\n children: [replaceInputElement],\n });\n\n const replaceActionsElement = h('div', {\n dataset: { replaceActions: '', replaceCell: '' },\n children: [\n iconButton({ icon: 'replace', label: 'Replace', onClick: replace }),\n iconButton({\n icon: 'replace-all',\n label: 'Replace All',\n onClick: replaceAll,\n }),\n ],\n });\n\n // Held so the no-results state can toggle their native disabled flag.\n const prevButton = iconButton({\n icon: 'arrow-up',\n label: 'Previous',\n onClick: () => {\n findNextMatch(true);\n },\n });\n const nextButton = iconButton({\n icon: 'arrow-down',\n label: 'Next',\n onClick: () => {\n findNextMatch();\n },\n });\n prevButton.disabled = true;\n nextButton.disabled = true;\n\n const navElement = h('div', {\n dataset: 'searchNav',\n children: [prevButton, nextButton],\n });\n\n const closeElement = iconButton({\n icon: 'close',\n label: 'Close',\n onClick: close,\n dataset: { searchClose: '' },\n });\n\n // Cells are positioned by CSS grid-template-areas (see editor.css), so DOM\n // order here only drives tab/reading order, not layout. Keep the replace\n // input directly after the find input (and its toggles) so Tab walks\n // find -> replace before reaching the nav arrows and close button.\n const gridElement = h('div', {\n dataset: { searchGrid: '', mode },\n children: [\n findInputBox,\n replaceInputBox,\n replaceActionsElement,\n matchResultElement,\n navElement,\n closeElement,\n ],\n });\n\n // Toggles the panel between find and find/replace modes by showing or\n // hiding the replace cells, then returns focus to the find input.\n const applyMode = (next: SearchPanelMode) => {\n gridElement.dataset.mode = next;\n this.#inputElement.focus();\n this.#inputElement.select();\n };\n this.#applyMode = applyMode;\n\n this.#container = h('div', {\n dataset: 'searchPanel',\n children: [\n h('div', {\n dataset: 'editorWidget',\n children: [gridElement],\n }),\n ],\n });\n\n matches.current = initialMatch;\n containerElement.before(this.#container);\n\n requestAnimationFrame(() => {\n if (initialMatch !== undefined) {\n updateMatches();\n } else {\n onUpdate([]);\n }\n this.#inputElement.select();\n });\n }\n\n focus(): void {\n this.#inputElement.focus();\n }\n\n navigate(findPrevious: boolean): void {\n this.#navigate?.(findPrevious);\n }\n\n updateMatches(options?: { syncSelection?: boolean }): void {\n this.#updateMatches?.(options);\n }\n\n setMode(mode: SearchPanelMode): void {\n this.#applyMode?.(mode);\n }\n\n // Tears the panel down the way the close button and Escape-in-input do:\n // removes the DOM and runs onClose so the editor clears its match highlights.\n // Prefer this over cleanup() for any user-initiated dismissal.\n close(): void {\n this.#close?.();\n }\n\n // DOM-only teardown. Does NOT run onClose, so it leaves the editor's match\n // highlights in place; only use it when the caller clears that state itself\n // (e.g. a full editor reset). User-initiated dismissals should call close().\n cleanup(): void {\n this.#container.remove();\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { EditorLineAnnotation, EditorSelection, EditorType, Position, Range, ResolvedTextEdit, SelectionDirection, TextEdit } from "./types.js";
2
2
  import { TextDocument, TextDocumentChange } from "./textDocument.js";
3
-
4
3
  //#region src/editor/selection.d.ts
5
4
  declare const DirectionBackward = -1;
6
5
  declare const DirectionNone = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"selection.d.ts","names":[],"sources":["../../src/editor/selection.ts"],"mappings":"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"}
1
+ {"version":3,"file":"selection.d.ts","names":[],"sources":["../../src/editor/selection.ts"],"mappings":"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"}