@openclaw/diffs 2026.9.4 → 2026.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1284) hide show
  1. package/README.md +2 -1
  2. package/assets/activity.svg +3 -0
  3. package/assets/icon.png +0 -0
  4. package/dist/{browser.runtime-DTKAejqd.js → .setup/browser.runtime-VjaO3wrj.mjs} +1 -1
  5. package/dist/assets/viewer-runtime.js +50 -56
  6. package/dist/index.js +44 -18
  7. package/node_modules/@pierre/diffs/dist/components/CodeView.d.ts +117 -70
  8. package/node_modules/@pierre/diffs/dist/components/CodeView.d.ts.map +1 -1
  9. package/node_modules/@pierre/diffs/dist/components/CodeView.js +197 -65
  10. package/node_modules/@pierre/diffs/dist/components/CodeView.js.map +1 -1
  11. package/node_modules/@pierre/diffs/dist/components/File.d.ts +81 -29
  12. package/node_modules/@pierre/diffs/dist/components/File.d.ts.map +1 -1
  13. package/node_modules/@pierre/diffs/dist/components/File.js +244 -66
  14. package/node_modules/@pierre/diffs/dist/components/File.js.map +1 -1
  15. package/node_modules/@pierre/diffs/dist/components/FileDiff.d.ts +109 -57
  16. package/node_modules/@pierre/diffs/dist/components/FileDiff.d.ts.map +1 -1
  17. package/node_modules/@pierre/diffs/dist/components/FileDiff.js +445 -112
  18. package/node_modules/@pierre/diffs/dist/components/FileDiff.js.map +1 -1
  19. package/node_modules/@pierre/diffs/dist/components/FileStream.d.ts +1 -0
  20. package/node_modules/@pierre/diffs/dist/components/FileStream.d.ts.map +1 -1
  21. package/node_modules/@pierre/diffs/dist/components/FileStream.js +1 -1
  22. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.d.ts +3 -3
  23. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.d.ts.map +1 -1
  24. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.js +4 -3
  25. package/node_modules/@pierre/diffs/dist/components/UnresolvedFile.js.map +1 -1
  26. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.d.ts +18 -14
  27. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.d.ts.map +1 -1
  28. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.js +153 -62
  29. package/node_modules/@pierre/diffs/dist/components/VirtualizedFile.js.map +1 -1
  30. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.d.ts +17 -16
  31. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.d.ts.map +1 -1
  32. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js +197 -105
  33. package/node_modules/@pierre/diffs/dist/components/VirtualizedFileDiff.js.map +1 -1
  34. package/node_modules/@pierre/diffs/dist/components/Virtualizer.d.ts +1 -5
  35. package/node_modules/@pierre/diffs/dist/components/Virtualizer.d.ts.map +1 -1
  36. package/node_modules/@pierre/diffs/dist/components/Virtualizer.js.map +1 -1
  37. package/node_modules/@pierre/diffs/dist/components/VirtulizerDevelopment.d.ts +1 -2
  38. package/node_modules/@pierre/diffs/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  39. package/node_modules/@pierre/diffs/dist/components/web-components.d.ts.map +1 -1
  40. package/node_modules/@pierre/diffs/dist/components/web-components.js +2 -1
  41. package/node_modules/@pierre/diffs/dist/components/web-components.js.map +1 -1
  42. package/node_modules/@pierre/diffs/dist/constants.d.ts +0 -1
  43. package/node_modules/@pierre/diffs/dist/constants.d.ts.map +1 -1
  44. package/node_modules/@pierre/diffs/dist/edit/index.d.ts +7 -4
  45. package/node_modules/@pierre/diffs/dist/edit/index.js +5 -1
  46. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.d.ts +55 -0
  47. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.d.ts.map +1 -0
  48. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.js +135 -0
  49. package/node_modules/@pierre/diffs/dist/editor/EditStateManager.js.map +1 -0
  50. package/node_modules/@pierre/diffs/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts +6 -0
  51. package/node_modules/@pierre/diffs/dist/editor/cloneRetainedDiffSessionSnapshot.d.ts.map +1 -0
  52. package/node_modules/@pierre/diffs/dist/editor/cloneRetainedDiffSessionSnapshot.js +16 -0
  53. package/node_modules/@pierre/diffs/dist/editor/cloneRetainedDiffSessionSnapshot.js.map +1 -0
  54. package/node_modules/@pierre/diffs/dist/editor/command.d.ts +2 -1
  55. package/node_modules/@pierre/diffs/dist/editor/command.d.ts.map +1 -1
  56. package/node_modules/@pierre/diffs/dist/editor/editPrediction.d.ts +77 -0
  57. package/node_modules/@pierre/diffs/dist/editor/editPrediction.d.ts.map +1 -0
  58. package/node_modules/@pierre/diffs/dist/editor/editPrediction.js +365 -0
  59. package/node_modules/@pierre/diffs/dist/editor/editPrediction.js.map +1 -0
  60. package/node_modules/@pierre/diffs/dist/editor/editStack.d.ts +19 -41
  61. package/node_modules/@pierre/diffs/dist/editor/editStack.d.ts.map +1 -1
  62. package/node_modules/@pierre/diffs/dist/editor/editStack.js +67 -4
  63. package/node_modules/@pierre/diffs/dist/editor/editStack.js.map +1 -1
  64. package/node_modules/@pierre/diffs/dist/editor/editor.d.ts +117 -32
  65. package/node_modules/@pierre/diffs/dist/editor/editor.d.ts.map +1 -1
  66. package/node_modules/@pierre/diffs/dist/editor/editor.js +1125 -396
  67. package/node_modules/@pierre/diffs/dist/editor/editor.js.map +1 -1
  68. package/node_modules/@pierre/diffs/dist/editor/editor2.js +1 -1
  69. package/node_modules/@pierre/diffs/dist/editor/editor2.js.map +1 -1
  70. package/node_modules/@pierre/diffs/dist/editor/languages.d.ts +3 -4
  71. package/node_modules/@pierre/diffs/dist/editor/languages.d.ts.map +1 -1
  72. package/node_modules/@pierre/diffs/dist/editor/languages.js +1 -1
  73. package/node_modules/@pierre/diffs/dist/editor/languages.js.map +1 -1
  74. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.d.ts +3 -4
  75. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.d.ts.map +1 -1
  76. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.js +18 -8
  77. package/node_modules/@pierre/diffs/dist/editor/lineAnnotations.js.map +1 -1
  78. package/node_modules/@pierre/diffs/dist/editor/marker.d.ts +2 -3
  79. package/node_modules/@pierre/diffs/dist/editor/marker.d.ts.map +1 -1
  80. package/node_modules/@pierre/diffs/dist/editor/marker.js +5 -3
  81. package/node_modules/@pierre/diffs/dist/editor/marker.js.map +1 -1
  82. package/node_modules/@pierre/diffs/dist/editor/matchBrackets.d.ts +2 -3
  83. package/node_modules/@pierre/diffs/dist/editor/matchBrackets.d.ts.map +1 -1
  84. package/node_modules/@pierre/diffs/dist/editor/matchBrackets.js.map +1 -1
  85. package/node_modules/@pierre/diffs/dist/editor/pieceTable.d.ts +1 -2
  86. package/node_modules/@pierre/diffs/dist/editor/pieceTable.d.ts.map +1 -1
  87. package/node_modules/@pierre/diffs/dist/editor/pieceTable.js.map +1 -1
  88. package/node_modules/@pierre/diffs/dist/editor/platform.d.ts +1 -5
  89. package/node_modules/@pierre/diffs/dist/editor/platform.d.ts.map +1 -1
  90. package/node_modules/@pierre/diffs/dist/editor/platform.js.map +1 -1
  91. package/node_modules/@pierre/diffs/dist/editor/popover.d.ts +12 -12
  92. package/node_modules/@pierre/diffs/dist/editor/popover.d.ts.map +1 -1
  93. package/node_modules/@pierre/diffs/dist/editor/popover.js.map +1 -1
  94. package/node_modules/@pierre/diffs/dist/editor/searchPanel.d.ts +2 -3
  95. package/node_modules/@pierre/diffs/dist/editor/searchPanel.d.ts.map +1 -1
  96. package/node_modules/@pierre/diffs/dist/editor/searchPanel.js +17 -13
  97. package/node_modules/@pierre/diffs/dist/editor/searchPanel.js.map +1 -1
  98. package/node_modules/@pierre/diffs/dist/editor/selection.d.ts +32 -24
  99. package/node_modules/@pierre/diffs/dist/editor/selection.d.ts.map +1 -1
  100. package/node_modules/@pierre/diffs/dist/editor/selection.js +3 -3
  101. package/node_modules/@pierre/diffs/dist/editor/selection.js.map +1 -1
  102. package/node_modules/@pierre/diffs/dist/editor/selectionAction.d.ts +3 -4
  103. package/node_modules/@pierre/diffs/dist/editor/selectionAction.d.ts.map +1 -1
  104. package/node_modules/@pierre/diffs/dist/editor/selectionAction.js.map +1 -1
  105. package/node_modules/@pierre/diffs/dist/editor/sprite.d.ts.map +1 -1
  106. package/node_modules/@pierre/diffs/dist/editor/textDocument.d.ts +11 -9
  107. package/node_modules/@pierre/diffs/dist/editor/textDocument.d.ts.map +1 -1
  108. package/node_modules/@pierre/diffs/dist/editor/textDocument.js +28 -5
  109. package/node_modules/@pierre/diffs/dist/editor/textDocument.js.map +1 -1
  110. package/node_modules/@pierre/diffs/dist/editor/textDocumentChangeTransaction.d.ts +14 -0
  111. package/node_modules/@pierre/diffs/dist/editor/textDocumentChangeTransaction.d.ts.map +1 -0
  112. package/node_modules/@pierre/diffs/dist/editor/textDocumentChangeTransaction.js +12 -0
  113. package/node_modules/@pierre/diffs/dist/editor/textDocumentChangeTransaction.js.map +1 -0
  114. package/node_modules/@pierre/diffs/dist/editor/textMeasure.d.ts +5 -0
  115. package/node_modules/@pierre/diffs/dist/editor/textMeasure.d.ts.map +1 -1
  116. package/node_modules/@pierre/diffs/dist/editor/textMeasure.js +10 -0
  117. package/node_modules/@pierre/diffs/dist/editor/textMeasure.js.map +1 -1
  118. package/node_modules/@pierre/diffs/dist/editor/tokenizer.d.ts +2 -12
  119. package/node_modules/@pierre/diffs/dist/editor/tokenizer.d.ts.map +1 -1
  120. package/node_modules/@pierre/diffs/dist/editor/tokenizer.js +8 -4
  121. package/node_modules/@pierre/diffs/dist/editor/tokenizer.js.map +1 -1
  122. package/node_modules/@pierre/diffs/dist/editor/types.d.ts +266 -0
  123. package/node_modules/@pierre/diffs/dist/editor/types.d.ts.map +1 -0
  124. package/node_modules/@pierre/diffs/dist/editor/types.js +0 -0
  125. package/node_modules/@pierre/diffs/dist/editor/utils.d.ts +2 -1
  126. package/node_modules/@pierre/diffs/dist/editor/utils.d.ts.map +1 -1
  127. package/node_modules/@pierre/diffs/dist/editor/utils.js +15 -8
  128. package/node_modules/@pierre/diffs/dist/editor/utils.js.map +1 -1
  129. package/node_modules/@pierre/diffs/dist/highlighter/languages/areLanguagesAttached.d.ts +0 -1
  130. package/node_modules/@pierre/diffs/dist/highlighter/languages/areLanguagesAttached.d.ts.map +1 -1
  131. package/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.d.ts +1 -0
  132. package/node_modules/@pierre/diffs/dist/highlighter/languages/attachResolvedLanguages.d.ts.map +1 -1
  133. package/node_modules/@pierre/diffs/dist/highlighter/languages/cleanUpResolvedLanguages.d.ts.map +1 -1
  134. package/node_modules/@pierre/diffs/dist/highlighter/languages/constants.d.ts +1 -1
  135. package/node_modules/@pierre/diffs/dist/highlighter/languages/constants.d.ts.map +1 -1
  136. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.d.ts +1 -0
  137. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedLanguages.d.ts.map +1 -1
  138. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts +1 -0
  139. package/node_modules/@pierre/diffs/dist/highlighter/languages/getResolvedOrResolveLanguage.d.ts.map +1 -1
  140. package/node_modules/@pierre/diffs/dist/highlighter/languages/hasResolvedLanguages.d.ts +0 -1
  141. package/node_modules/@pierre/diffs/dist/highlighter/languages/hasResolvedLanguages.d.ts.map +1 -1
  142. package/node_modules/@pierre/diffs/dist/highlighter/languages/registerCustomLanguage.d.ts +0 -1
  143. package/node_modules/@pierre/diffs/dist/highlighter/languages/registerCustomLanguage.d.ts.map +1 -1
  144. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguage.d.ts +1 -0
  145. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguage.d.ts.map +1 -1
  146. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguages.d.ts +1 -0
  147. package/node_modules/@pierre/diffs/dist/highlighter/languages/resolveLanguages.d.ts.map +1 -1
  148. package/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.d.ts +7 -8
  149. package/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.d.ts.map +1 -1
  150. package/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.js +7 -3
  151. package/node_modules/@pierre/diffs/dist/highlighter/shared_highlighter.js.map +1 -1
  152. package/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.d.ts +0 -1
  153. package/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.d.ts.map +1 -1
  154. package/node_modules/@pierre/diffs/dist/highlighter/themes/areThemesAttached.js +1 -1
  155. package/node_modules/@pierre/diffs/dist/highlighter/themes/attachResolvedThemes.d.ts +0 -1
  156. package/node_modules/@pierre/diffs/dist/highlighter/themes/attachResolvedThemes.d.ts.map +1 -1
  157. package/node_modules/@pierre/diffs/dist/highlighter/themes/cleanUpResolvedThemes.d.ts.map +1 -1
  158. package/node_modules/@pierre/diffs/dist/highlighter/themes/constants.d.ts.map +1 -1
  159. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts +0 -1
  160. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedOrResolveTheme.d.ts.map +1 -1
  161. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedThemes.d.ts +0 -1
  162. package/node_modules/@pierre/diffs/dist/highlighter/themes/getResolvedThemes.d.ts.map +1 -1
  163. package/node_modules/@pierre/diffs/dist/highlighter/themes/hasResolvedThemes.d.ts +0 -1
  164. package/node_modules/@pierre/diffs/dist/highlighter/themes/hasResolvedThemes.d.ts.map +1 -1
  165. package/node_modules/@pierre/diffs/dist/highlighter/themes/registerCustomCSSVariableTheme.d.ts.map +1 -1
  166. package/node_modules/@pierre/diffs/dist/highlighter/themes/registerCustomTheme.d.ts +0 -1
  167. package/node_modules/@pierre/diffs/dist/highlighter/themes/registerCustomTheme.d.ts.map +1 -1
  168. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveTheme.d.ts +0 -1
  169. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveTheme.d.ts.map +1 -1
  170. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveThemes.d.ts +0 -1
  171. package/node_modules/@pierre/diffs/dist/highlighter/themes/resolveThemes.d.ts.map +1 -1
  172. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolution.d.ts +0 -1
  173. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolution.d.ts.map +1 -1
  174. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolver.d.ts +0 -1
  175. package/node_modules/@pierre/diffs/dist/highlighter/themes/themeResolver.d.ts.map +1 -1
  176. package/node_modules/@pierre/diffs/dist/index.d.ts +9 -6
  177. package/node_modules/@pierre/diffs/dist/index.js +22 -21
  178. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.d.ts +2 -26
  179. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.d.ts.map +1 -1
  180. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.js +8 -3
  181. package/node_modules/@pierre/diffs/dist/managers/InteractionManager.js.map +1 -1
  182. package/node_modules/@pierre/diffs/dist/managers/ResizeManager.d.ts +1 -4
  183. package/node_modules/@pierre/diffs/dist/managers/ResizeManager.d.ts.map +1 -1
  184. package/node_modules/@pierre/diffs/dist/managers/ScrollSyncManager.d.ts.map +1 -1
  185. package/node_modules/@pierre/diffs/dist/managers/UniversalRenderingManager.d.ts.map +1 -1
  186. package/node_modules/@pierre/diffs/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts +0 -1
  187. package/node_modules/@pierre/diffs/dist/node_modules/.pnpm/@types_hast@3.0.4/node_modules/@types/hast/index.d.ts.map +1 -1
  188. package/node_modules/@pierre/diffs/dist/node_modules/.pnpm/@types_unist@3.0.3/node_modules/@types/unist/index.d.ts.map +1 -1
  189. package/node_modules/@pierre/diffs/dist/react/CodeView.d.ts +45 -26
  190. package/node_modules/@pierre/diffs/dist/react/CodeView.d.ts.map +1 -1
  191. package/node_modules/@pierre/diffs/dist/react/CodeView.js +52 -45
  192. package/node_modules/@pierre/diffs/dist/react/CodeView.js.map +1 -1
  193. package/node_modules/@pierre/diffs/dist/react/EditContext.d.ts +8 -14
  194. package/node_modules/@pierre/diffs/dist/react/EditContext.d.ts.map +1 -1
  195. package/node_modules/@pierre/diffs/dist/react/EditContext.js +2 -9
  196. package/node_modules/@pierre/diffs/dist/react/EditContext.js.map +1 -1
  197. package/node_modules/@pierre/diffs/dist/react/File.d.ts +5 -23
  198. package/node_modules/@pierre/diffs/dist/react/File.d.ts.map +1 -1
  199. package/node_modules/@pierre/diffs/dist/react/File.js +19 -14
  200. package/node_modules/@pierre/diffs/dist/react/File.js.map +1 -1
  201. package/node_modules/@pierre/diffs/dist/react/FileDiff.d.ts +5 -22
  202. package/node_modules/@pierre/diffs/dist/react/FileDiff.d.ts.map +1 -1
  203. package/node_modules/@pierre/diffs/dist/react/FileDiff.js +19 -14
  204. package/node_modules/@pierre/diffs/dist/react/FileDiff.js.map +1 -1
  205. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.d.ts +3 -23
  206. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.d.ts.map +1 -1
  207. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.js +19 -22
  208. package/node_modules/@pierre/diffs/dist/react/MultiFileDiff.js.map +1 -1
  209. package/node_modules/@pierre/diffs/dist/react/PatchDiff.d.ts +2 -21
  210. package/node_modules/@pierre/diffs/dist/react/PatchDiff.d.ts.map +1 -1
  211. package/node_modules/@pierre/diffs/dist/react/PatchDiff.js +19 -14
  212. package/node_modules/@pierre/diffs/dist/react/PatchDiff.js.map +1 -1
  213. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.d.ts +4 -21
  214. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.d.ts.map +1 -1
  215. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.js +15 -14
  216. package/node_modules/@pierre/diffs/dist/react/UnresolvedFile.js.map +1 -1
  217. package/node_modules/@pierre/diffs/dist/react/Virtualizer.d.ts +1 -9
  218. package/node_modules/@pierre/diffs/dist/react/Virtualizer.d.ts.map +1 -1
  219. package/node_modules/@pierre/diffs/dist/react/Virtualizer.js.map +1 -1
  220. package/node_modules/@pierre/diffs/dist/react/WorkerPoolContext.d.ts +2 -6
  221. package/node_modules/@pierre/diffs/dist/react/WorkerPoolContext.d.ts.map +1 -1
  222. package/node_modules/@pierre/diffs/dist/react/constants.d.ts +0 -1
  223. package/node_modules/@pierre/diffs/dist/react/constants.d.ts.map +1 -1
  224. package/node_modules/@pierre/diffs/dist/react/index.d.ts +8 -5
  225. package/node_modules/@pierre/diffs/dist/react/jsx.d.ts +1 -0
  226. package/node_modules/@pierre/diffs/dist/react/jsx.d.ts.map +1 -1
  227. package/node_modules/@pierre/diffs/dist/react/types.d.ts +47 -10
  228. package/node_modules/@pierre/diffs/dist/react/types.d.ts.map +1 -1
  229. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.d.ts +6 -0
  230. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.d.ts.map +1 -0
  231. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.js +9 -0
  232. package/node_modules/@pierre/diffs/dist/react/utils/assignRef.js.map +1 -0
  233. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.d.ts +11 -24
  234. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.d.ts.map +1 -1
  235. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.js +2 -2
  236. package/node_modules/@pierre/diffs/dist/react/utils/renderDiffChildren.js.map +1 -1
  237. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.d.ts +11 -21
  238. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.d.ts.map +1 -1
  239. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.js +2 -2
  240. package/node_modules/@pierre/diffs/dist/react/utils/renderFileChildren.js.map +1 -1
  241. package/node_modules/@pierre/diffs/dist/react/utils/templateRender.d.ts +0 -1
  242. package/node_modules/@pierre/diffs/dist/react/utils/templateRender.d.ts.map +1 -1
  243. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.d.ts +16 -20
  244. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  245. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.js +126 -22
  246. package/node_modules/@pierre/diffs/dist/react/utils/useFileDiffInstance.js.map +1 -1
  247. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.d.ts +11 -19
  248. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.d.ts.map +1 -1
  249. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.js +88 -25
  250. package/node_modules/@pierre/diffs/dist/react/utils/useFileInstance.js.map +1 -1
  251. package/node_modules/@pierre/diffs/dist/react/utils/useStableCallback.d.ts.map +1 -1
  252. package/node_modules/@pierre/diffs/dist/react/utils/useUnresolvedFileInstance.d.ts +1 -12
  253. package/node_modules/@pierre/diffs/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  254. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.d.ts +34 -24
  255. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.d.ts.map +1 -1
  256. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js +188 -118
  257. package/node_modules/@pierre/diffs/dist/renderers/DiffHunksRenderer.js.map +1 -1
  258. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.d.ts +28 -11
  259. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.d.ts.map +1 -1
  260. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.js +141 -67
  261. package/node_modules/@pierre/diffs/dist/renderers/FileRenderer.js.map +1 -1
  262. package/node_modules/@pierre/diffs/dist/renderers/UnresolvedFileHunksRenderer.d.ts +5 -11
  263. package/node_modules/@pierre/diffs/dist/renderers/UnresolvedFileHunksRenderer.d.ts.map +1 -1
  264. package/node_modules/@pierre/diffs/dist/renderers/UnresolvedFileHunksRenderer.js +2 -2
  265. package/node_modules/@pierre/diffs/dist/renderers/UnresolvedFileHunksRenderer.js.map +1 -1
  266. package/node_modules/@pierre/diffs/dist/shiki-stream/stream.d.ts +0 -1
  267. package/node_modules/@pierre/diffs/dist/shiki-stream/stream.d.ts.map +1 -1
  268. package/node_modules/@pierre/diffs/dist/shiki-stream/stream.js.map +1 -1
  269. package/node_modules/@pierre/diffs/dist/shiki-stream/tokenizer.d.ts +0 -1
  270. package/node_modules/@pierre/diffs/dist/shiki-stream/tokenizer.d.ts.map +1 -1
  271. package/node_modules/@pierre/diffs/dist/shiki-stream/tokenizer.js +2 -1
  272. package/node_modules/@pierre/diffs/dist/shiki-stream/tokenizer.js.map +1 -1
  273. package/node_modules/@pierre/diffs/dist/shiki-stream/types.d.ts +0 -1
  274. package/node_modules/@pierre/diffs/dist/shiki-stream/types.d.ts.map +1 -1
  275. package/node_modules/@pierre/diffs/dist/sprite.d.ts.map +1 -1
  276. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.d.ts +1 -8
  277. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.d.ts.map +1 -1
  278. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.js +8 -3
  279. package/node_modules/@pierre/diffs/dist/ssr/FileDiffReact.js.map +1 -1
  280. package/node_modules/@pierre/diffs/dist/ssr/index.d.ts +2 -2
  281. package/node_modules/@pierre/diffs/dist/ssr/preloadDiffs.d.ts +19 -47
  282. package/node_modules/@pierre/diffs/dist/ssr/preloadDiffs.d.ts.map +1 -1
  283. package/node_modules/@pierre/diffs/dist/ssr/preloadDiffs.js +1 -1
  284. package/node_modules/@pierre/diffs/dist/ssr/preloadDiffs.js.map +1 -1
  285. package/node_modules/@pierre/diffs/dist/ssr/preloadFile.d.ts +5 -10
  286. package/node_modules/@pierre/diffs/dist/ssr/preloadFile.d.ts.map +1 -1
  287. package/node_modules/@pierre/diffs/dist/ssr/preloadFile.js.map +1 -1
  288. package/node_modules/@pierre/diffs/dist/ssr/preloadPatchFile.d.ts +3 -7
  289. package/node_modules/@pierre/diffs/dist/ssr/preloadPatchFile.d.ts.map +1 -1
  290. package/node_modules/@pierre/diffs/dist/ssr/preloadPatchFile.js.map +1 -1
  291. package/node_modules/@pierre/diffs/dist/ssr/renderHTML.d.ts +0 -1
  292. package/node_modules/@pierre/diffs/dist/ssr/renderHTML.d.ts.map +1 -1
  293. package/node_modules/@pierre/diffs/dist/string-import.d.ts.map +1 -1
  294. package/node_modules/@pierre/diffs/dist/style.js +1 -1
  295. package/node_modules/@pierre/diffs/dist/style.js.map +1 -1
  296. package/node_modules/@pierre/diffs/dist/types.d.ts +13 -264
  297. package/node_modules/@pierre/diffs/dist/types.d.ts.map +1 -1
  298. package/node_modules/@pierre/diffs/dist/utils/annotationHelpers.d.ts +0 -1
  299. package/node_modules/@pierre/diffs/dist/utils/annotationHelpers.d.ts.map +1 -1
  300. package/node_modules/@pierre/diffs/dist/utils/appendItems.d.ts +5 -0
  301. package/node_modules/@pierre/diffs/dist/utils/appendItems.d.ts.map +1 -0
  302. package/node_modules/@pierre/diffs/dist/utils/appendItems.js +8 -0
  303. package/node_modules/@pierre/diffs/dist/utils/appendItems.js.map +1 -0
  304. package/node_modules/@pierre/diffs/dist/utils/applyLineTextWithNewline.d.ts.map +1 -1
  305. package/node_modules/@pierre/diffs/dist/utils/areDiffLineAnnotationsEqual.d.ts +0 -1
  306. package/node_modules/@pierre/diffs/dist/utils/areDiffLineAnnotationsEqual.d.ts.map +1 -1
  307. package/node_modules/@pierre/diffs/dist/utils/areDiffRenderOptionsEqual.d.ts +0 -1
  308. package/node_modules/@pierre/diffs/dist/utils/areDiffRenderOptionsEqual.d.ts.map +1 -1
  309. package/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.d.ts +0 -1
  310. package/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.d.ts.map +1 -1
  311. package/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.js +1 -1
  312. package/node_modules/@pierre/diffs/dist/utils/areDiffTargetsEqual.js.map +1 -1
  313. package/node_modules/@pierre/diffs/dist/utils/areFileRenderOptionsEqual.d.ts +0 -1
  314. package/node_modules/@pierre/diffs/dist/utils/areFileRenderOptionsEqual.d.ts.map +1 -1
  315. package/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.d.ts +6 -0
  316. package/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.d.ts.map +1 -0
  317. package/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.js +8 -0
  318. package/node_modules/@pierre/diffs/dist/utils/areFileTargetsEqual.js.map +1 -0
  319. package/node_modules/@pierre/diffs/dist/utils/areFilesEqual.d.ts +0 -1
  320. package/node_modules/@pierre/diffs/dist/utils/areFilesEqual.d.ts.map +1 -1
  321. package/node_modules/@pierre/diffs/dist/utils/areHunkDataEqual.d.ts +0 -1
  322. package/node_modules/@pierre/diffs/dist/utils/areHunkDataEqual.d.ts.map +1 -1
  323. package/node_modules/@pierre/diffs/dist/utils/areLineAnnotationsEqual.d.ts +0 -1
  324. package/node_modules/@pierre/diffs/dist/utils/areLineAnnotationsEqual.d.ts.map +1 -1
  325. package/node_modules/@pierre/diffs/dist/utils/areManagedSnapshotsEqual.d.ts +1 -2
  326. package/node_modules/@pierre/diffs/dist/utils/areManagedSnapshotsEqual.d.ts.map +1 -1
  327. package/node_modules/@pierre/diffs/dist/utils/areManagedSnapshotsEqual.js.map +1 -1
  328. package/node_modules/@pierre/diffs/dist/utils/areMergeConflictActionsEqual.d.ts +0 -1
  329. package/node_modules/@pierre/diffs/dist/utils/areMergeConflictActionsEqual.d.ts.map +1 -1
  330. package/node_modules/@pierre/diffs/dist/utils/areObjectsEqual.d.ts.map +1 -1
  331. package/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.d.ts +4 -3
  332. package/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.d.ts.map +1 -1
  333. package/node_modules/@pierre/diffs/dist/utils/areOptionsEqual.js.map +1 -1
  334. package/node_modules/@pierre/diffs/dist/utils/arePrePropertiesEqual.d.ts +0 -1
  335. package/node_modules/@pierre/diffs/dist/utils/arePrePropertiesEqual.d.ts.map +1 -1
  336. package/node_modules/@pierre/diffs/dist/utils/areRenderRangesEqual.d.ts +0 -1
  337. package/node_modules/@pierre/diffs/dist/utils/areRenderRangesEqual.d.ts.map +1 -1
  338. package/node_modules/@pierre/diffs/dist/utils/areSelectionPointsEqual.d.ts +0 -1
  339. package/node_modules/@pierre/diffs/dist/utils/areSelectionPointsEqual.d.ts.map +1 -1
  340. package/node_modules/@pierre/diffs/dist/utils/areSelectionsEqual.d.ts +0 -1
  341. package/node_modules/@pierre/diffs/dist/utils/areSelectionsEqual.d.ts.map +1 -1
  342. package/node_modules/@pierre/diffs/dist/utils/areThemesEqual.d.ts +0 -1
  343. package/node_modules/@pierre/diffs/dist/utils/areThemesEqual.d.ts.map +1 -1
  344. package/node_modules/@pierre/diffs/dist/utils/areVirtualWindowSpecsEqual.d.ts +0 -1
  345. package/node_modules/@pierre/diffs/dist/utils/areVirtualWindowSpecsEqual.d.ts.map +1 -1
  346. package/node_modules/@pierre/diffs/dist/utils/areWorkerStatsEqual.d.ts +1 -0
  347. package/node_modules/@pierre/diffs/dist/utils/areWorkerStatsEqual.d.ts.map +1 -1
  348. package/node_modules/@pierre/diffs/dist/utils/awaitWithTimeout.d.ts.map +1 -1
  349. package/node_modules/@pierre/diffs/dist/utils/cleanLastNewline.d.ts.map +1 -1
  350. package/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.d.ts +3 -3
  351. package/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.d.ts.map +1 -1
  352. package/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.js +8 -5
  353. package/node_modules/@pierre/diffs/dist/utils/cloneFileDiffMetadata.js.map +1 -1
  354. package/node_modules/@pierre/diffs/dist/utils/composeCacheKey.d.ts +6 -0
  355. package/node_modules/@pierre/diffs/dist/utils/composeCacheKey.d.ts.map +1 -0
  356. package/node_modules/@pierre/diffs/dist/utils/composeCacheKey.js +10 -0
  357. package/node_modules/@pierre/diffs/dist/utils/composeCacheKey.js.map +1 -0
  358. package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.d.ts +1 -11
  359. package/node_modules/@pierre/diffs/dist/utils/computeEstimatedDiffHeights.d.ts.map +1 -1
  360. package/node_modules/@pierre/diffs/dist/utils/computeFileOffsets.d.ts.map +1 -1
  361. package/node_modules/@pierre/diffs/dist/utils/computeFileOffsets.js +9 -8
  362. package/node_modules/@pierre/diffs/dist/utils/computeFileOffsets.js.map +1 -1
  363. package/node_modules/@pierre/diffs/dist/utils/computeVirtualFileMetrics.d.ts +0 -1
  364. package/node_modules/@pierre/diffs/dist/utils/computeVirtualFileMetrics.d.ts.map +1 -1
  365. package/node_modules/@pierre/diffs/dist/utils/createAnnotationElement.d.ts +0 -1
  366. package/node_modules/@pierre/diffs/dist/utils/createAnnotationElement.d.ts.map +1 -1
  367. package/node_modules/@pierre/diffs/dist/utils/createAnnotationWrapperNode.d.ts.map +1 -1
  368. package/node_modules/@pierre/diffs/dist/utils/createCodeViewHeaderFooterHostElement.d.ts.map +1 -1
  369. package/node_modules/@pierre/diffs/dist/utils/createContentColumn.d.ts +0 -1
  370. package/node_modules/@pierre/diffs/dist/utils/createContentColumn.d.ts.map +1 -1
  371. package/node_modules/@pierre/diffs/dist/utils/createEmptyRowBuffer.d.ts +0 -1
  372. package/node_modules/@pierre/diffs/dist/utils/createEmptyRowBuffer.d.ts.map +1 -1
  373. package/node_modules/@pierre/diffs/dist/utils/createFileHeaderElement.d.ts +1 -6
  374. package/node_modules/@pierre/diffs/dist/utils/createFileHeaderElement.d.ts.map +1 -1
  375. package/node_modules/@pierre/diffs/dist/utils/createGutterUtilityContentNode.d.ts.map +1 -1
  376. package/node_modules/@pierre/diffs/dist/utils/createGutterUtilityElement.d.ts +0 -1
  377. package/node_modules/@pierre/diffs/dist/utils/createGutterUtilityElement.d.ts.map +1 -1
  378. package/node_modules/@pierre/diffs/dist/utils/createNoNewlineElement.d.ts +0 -1
  379. package/node_modules/@pierre/diffs/dist/utils/createNoNewlineElement.d.ts.map +1 -1
  380. package/node_modules/@pierre/diffs/dist/utils/createPreElement.d.ts +1 -11
  381. package/node_modules/@pierre/diffs/dist/utils/createPreElement.d.ts.map +1 -1
  382. package/node_modules/@pierre/diffs/dist/utils/createRowNodes.d.ts.map +1 -1
  383. package/node_modules/@pierre/diffs/dist/utils/createSeparator.d.ts +1 -10
  384. package/node_modules/@pierre/diffs/dist/utils/createSeparator.d.ts.map +1 -1
  385. package/node_modules/@pierre/diffs/dist/utils/createSeparator.js +12 -10
  386. package/node_modules/@pierre/diffs/dist/utils/createSeparator.js.map +1 -1
  387. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.d.ts +0 -1
  388. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.d.ts.map +1 -1
  389. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.js +2 -1
  390. package/node_modules/@pierre/diffs/dist/utils/createSpanNodeFromToken.js.map +1 -1
  391. package/node_modules/@pierre/diffs/dist/utils/createStyleElement.d.ts +0 -1
  392. package/node_modules/@pierre/diffs/dist/utils/createStyleElement.d.ts.map +1 -1
  393. package/node_modules/@pierre/diffs/dist/utils/createTransformerWithState.d.ts +0 -1
  394. package/node_modules/@pierre/diffs/dist/utils/createTransformerWithState.d.ts.map +1 -1
  395. package/node_modules/@pierre/diffs/dist/utils/createUnsafeCSSStyleNode.d.ts.map +1 -1
  396. package/node_modules/@pierre/diffs/dist/utils/createWindowFromScrollPosition.d.ts +1 -9
  397. package/node_modules/@pierre/diffs/dist/utils/createWindowFromScrollPosition.d.ts.map +1 -1
  398. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.d.ts +0 -1
  399. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.d.ts.map +1 -1
  400. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.js +5 -3
  401. package/node_modules/@pierre/diffs/dist/utils/cssWrappers.js.map +1 -1
  402. package/node_modules/@pierre/diffs/dist/utils/detachString.d.ts.map +1 -1
  403. package/node_modules/@pierre/diffs/dist/utils/diffAcceptRejectHunk.d.ts +0 -1
  404. package/node_modules/@pierre/diffs/dist/utils/diffAcceptRejectHunk.d.ts.map +1 -1
  405. package/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.d.ts +68 -0
  406. package/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.d.ts.map +1 -0
  407. package/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.js +64 -0
  408. package/node_modules/@pierre/diffs/dist/utils/editSessionAnnotations.js.map +1 -0
  409. package/node_modules/@pierre/diffs/dist/utils/editSessionHunks.d.ts +5 -4
  410. package/node_modules/@pierre/diffs/dist/utils/editSessionHunks.d.ts.map +1 -1
  411. package/node_modules/@pierre/diffs/dist/utils/editSessionHunks.js +7 -5
  412. package/node_modules/@pierre/diffs/dist/utils/editSessionHunks.js.map +1 -1
  413. package/node_modules/@pierre/diffs/dist/utils/formatCSSVariablePrefix.d.ts.map +1 -1
  414. package/node_modules/@pierre/diffs/dist/utils/getDiffFileInput.d.ts +1 -5
  415. package/node_modules/@pierre/diffs/dist/utils/getDiffFileInput.d.ts.map +1 -1
  416. package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.d.ts +1 -2
  417. package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.d.ts.map +1 -1
  418. package/node_modules/@pierre/diffs/dist/utils/getDiffHunksRendererOptions.js.map +1 -1
  419. package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.d.ts +1 -2
  420. package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.d.ts.map +1 -1
  421. package/node_modules/@pierre/diffs/dist/utils/getFileRendererOptions.js.map +1 -1
  422. package/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.d.ts +0 -1
  423. package/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.d.ts.map +1 -1
  424. package/node_modules/@pierre/diffs/dist/utils/getFiletypeFromFileName.js.map +1 -1
  425. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.d.ts +1 -5
  426. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.d.ts.map +1 -1
  427. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.js +1 -1
  428. package/node_modules/@pierre/diffs/dist/utils/getHighlighterOptions.js.map +1 -1
  429. package/node_modules/@pierre/diffs/dist/utils/getHighlighterThemeStyles.d.ts +1 -6
  430. package/node_modules/@pierre/diffs/dist/utils/getHighlighterThemeStyles.d.ts.map +1 -1
  431. package/node_modules/@pierre/diffs/dist/utils/getHunkSeparatorSlotName.d.ts +0 -1
  432. package/node_modules/@pierre/diffs/dist/utils/getHunkSeparatorSlotName.d.ts.map +1 -1
  433. package/node_modules/@pierre/diffs/dist/utils/getHunkSideBoundaries.d.ts.map +1 -1
  434. package/node_modules/@pierre/diffs/dist/utils/getIconForType.d.ts +0 -1
  435. package/node_modules/@pierre/diffs/dist/utils/getIconForType.d.ts.map +1 -1
  436. package/node_modules/@pierre/diffs/dist/utils/getLineAnnotationName.d.ts +0 -1
  437. package/node_modules/@pierre/diffs/dist/utils/getLineAnnotationName.d.ts.map +1 -1
  438. package/node_modules/@pierre/diffs/dist/utils/getLineEndingType.d.ts.map +1 -1
  439. package/node_modules/@pierre/diffs/dist/utils/getLineNodes.d.ts +0 -1
  440. package/node_modules/@pierre/diffs/dist/utils/getLineNodes.d.ts.map +1 -1
  441. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictActionSlotName.d.ts +1 -5
  442. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictActionSlotName.d.ts.map +1 -1
  443. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictLineTypes.d.ts +0 -1
  444. package/node_modules/@pierre/diffs/dist/utils/getMergeConflictLineTypes.d.ts.map +1 -1
  445. package/node_modules/@pierre/diffs/dist/utils/getOrCreateCodeNode.d.ts +1 -7
  446. package/node_modules/@pierre/diffs/dist/utils/getOrCreateCodeNode.d.ts.map +1 -1
  447. package/node_modules/@pierre/diffs/dist/utils/getSingularPatch.d.ts +0 -1
  448. package/node_modules/@pierre/diffs/dist/utils/getSingularPatch.d.ts.map +1 -1
  449. package/node_modules/@pierre/diffs/dist/utils/getThemes.d.ts +0 -1
  450. package/node_modules/@pierre/diffs/dist/utils/getThemes.d.ts.map +1 -1
  451. package/node_modules/@pierre/diffs/dist/utils/getTotalLineCountFromHunks.d.ts +0 -1
  452. package/node_modules/@pierre/diffs/dist/utils/getTotalLineCountFromHunks.d.ts.map +1 -1
  453. package/node_modules/@pierre/diffs/dist/utils/guardWebKitScrollDuringRebuild.d.ts.map +1 -1
  454. package/node_modules/@pierre/diffs/dist/utils/hast_utils.d.ts +2 -12
  455. package/node_modules/@pierre/diffs/dist/utils/hast_utils.d.ts.map +1 -1
  456. package/node_modules/@pierre/diffs/dist/utils/hostTheme.d.ts +1 -5
  457. package/node_modules/@pierre/diffs/dist/utils/hostTheme.d.ts.map +1 -1
  458. package/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.d.ts +0 -1
  459. package/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.d.ts.map +1 -1
  460. package/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.js +2 -1
  461. package/node_modules/@pierre/diffs/dist/utils/hydratePartialDiff.js.map +1 -1
  462. package/node_modules/@pierre/diffs/dist/utils/includesFileAnnotations.d.ts +0 -1
  463. package/node_modules/@pierre/diffs/dist/utils/includesFileAnnotations.d.ts.map +1 -1
  464. package/node_modules/@pierre/diffs/dist/utils/isDefaultRenderRange.d.ts +0 -1
  465. package/node_modules/@pierre/diffs/dist/utils/isDefaultRenderRange.d.ts.map +1 -1
  466. package/node_modules/@pierre/diffs/dist/utils/isDiffPlainText.d.ts +0 -1
  467. package/node_modules/@pierre/diffs/dist/utils/isDiffPlainText.d.ts.map +1 -1
  468. package/node_modules/@pierre/diffs/dist/utils/isFilePlainText.d.ts +0 -1
  469. package/node_modules/@pierre/diffs/dist/utils/isFilePlainText.d.ts.map +1 -1
  470. package/node_modules/@pierre/diffs/dist/utils/isGutterUtilityPath.d.ts.map +1 -1
  471. package/node_modules/@pierre/diffs/dist/utils/isStyleNode.d.ts.map +1 -1
  472. package/node_modules/@pierre/diffs/dist/utils/isWorkerContext.d.ts.map +1 -1
  473. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.d.ts +1 -10
  474. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.d.ts.map +1 -1
  475. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js +5 -3
  476. package/node_modules/@pierre/diffs/dist/utils/iterateOverDiff.js.map +1 -1
  477. package/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.d.ts +15 -0
  478. package/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.d.ts.map +1 -0
  479. package/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.js +17 -0
  480. package/node_modules/@pierre/diffs/dist/utils/lineAnnotationIdentity.js.map +1 -0
  481. package/node_modules/@pierre/diffs/dist/utils/normalizeDiffResolution.d.ts +0 -1
  482. package/node_modules/@pierre/diffs/dist/utils/normalizeDiffResolution.d.ts.map +1 -1
  483. package/node_modules/@pierre/diffs/dist/utils/parseDiffDecorations.d.ts +2 -13
  484. package/node_modules/@pierre/diffs/dist/utils/parseDiffDecorations.d.ts.map +1 -1
  485. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.d.ts +2 -3
  486. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.d.ts.map +1 -1
  487. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.js +8 -7
  488. package/node_modules/@pierre/diffs/dist/utils/parseDiffFromFile.js.map +1 -1
  489. package/node_modules/@pierre/diffs/dist/utils/parseLineType.d.ts +0 -1
  490. package/node_modules/@pierre/diffs/dist/utils/parseLineType.d.ts.map +1 -1
  491. package/node_modules/@pierre/diffs/dist/utils/parseMergeConflictDiffFromFile.d.ts +0 -1
  492. package/node_modules/@pierre/diffs/dist/utils/parseMergeConflictDiffFromFile.d.ts.map +1 -1
  493. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.d.ts +6 -4
  494. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.d.ts.map +1 -1
  495. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js +42 -14
  496. package/node_modules/@pierre/diffs/dist/utils/parsePatchFiles.js.map +1 -1
  497. package/node_modules/@pierre/diffs/dist/utils/platform.d.ts.map +1 -1
  498. package/node_modules/@pierre/diffs/dist/utils/prefersReducedMotion.d.ts.map +1 -1
  499. package/node_modules/@pierre/diffs/dist/utils/prerenderHTMLIfNecessary.d.ts.map +1 -1
  500. package/node_modules/@pierre/diffs/dist/utils/processLine.d.ts +0 -1
  501. package/node_modules/@pierre/diffs/dist/utils/processLine.d.ts.map +1 -1
  502. package/node_modules/@pierre/diffs/dist/utils/realignChangeContent.d.ts +0 -1
  503. package/node_modules/@pierre/diffs/dist/utils/realignChangeContent.d.ts.map +1 -1
  504. package/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.d.ts +1 -8
  505. package/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.d.ts.map +1 -1
  506. package/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.js +6 -5
  507. package/node_modules/@pierre/diffs/dist/utils/renderDiffWithHighlighter.js.map +1 -1
  508. package/node_modules/@pierre/diffs/dist/utils/renderFileWithHighlighter.d.ts +1 -11
  509. package/node_modules/@pierre/diffs/dist/utils/renderFileWithHighlighter.d.ts.map +1 -1
  510. package/node_modules/@pierre/diffs/dist/utils/renderFileWithHighlighter.js +7 -4
  511. package/node_modules/@pierre/diffs/dist/utils/renderFileWithHighlighter.js.map +1 -1
  512. package/node_modules/@pierre/diffs/dist/utils/resolveConflict.d.ts +0 -1
  513. package/node_modules/@pierre/diffs/dist/utils/resolveConflict.d.ts.map +1 -1
  514. package/node_modules/@pierre/diffs/dist/utils/resolveRegion.d.ts +0 -1
  515. package/node_modules/@pierre/diffs/dist/utils/resolveRegion.d.ts.map +1 -1
  516. package/node_modules/@pierre/diffs/dist/utils/roundToDevicePixel.d.ts.map +1 -1
  517. package/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.d.ts.map +1 -1
  518. package/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.js +2 -1
  519. package/node_modules/@pierre/diffs/dist/utils/scrollbarGutter.js.map +1 -1
  520. package/node_modules/@pierre/diffs/dist/utils/setLanguageOverride.d.ts +0 -1
  521. package/node_modules/@pierre/diffs/dist/utils/setLanguageOverride.d.ts.map +1 -1
  522. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.d.ts +1 -11
  523. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.d.ts.map +1 -1
  524. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.js +1 -3
  525. package/node_modules/@pierre/diffs/dist/utils/setWrapperNodeProps.js.map +1 -1
  526. package/node_modules/@pierre/diffs/dist/utils/shouldUseTokenTransformer.d.ts +0 -1
  527. package/node_modules/@pierre/diffs/dist/utils/shouldUseTokenTransformer.d.ts.map +1 -1
  528. package/node_modules/@pierre/diffs/dist/utils/splitFileContents.d.ts.map +1 -1
  529. package/node_modules/@pierre/diffs/dist/utils/trimPatchContext.d.ts.map +1 -1
  530. package/node_modules/@pierre/diffs/dist/utils/trimPatchContext.js +3 -2
  531. package/node_modules/@pierre/diffs/dist/utils/trimPatchContext.js.map +1 -1
  532. package/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.d.ts +0 -1
  533. package/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.d.ts.map +1 -1
  534. package/node_modules/@pierre/diffs/dist/utils/updateDiffHunks.js +1 -1
  535. package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.d.ts +10 -55
  536. package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.d.ts.map +1 -1
  537. package/node_modules/@pierre/diffs/dist/utils/virtualDiffLayout.js +1 -1
  538. package/node_modules/@pierre/diffs/dist/utils/wrapTokenFragments.d.ts +0 -1
  539. package/node_modules/@pierre/diffs/dist/utils/wrapTokenFragments.d.ts.map +1 -1
  540. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.d.ts +6 -20
  541. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.d.ts.map +1 -1
  542. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.js +52 -11
  543. package/node_modules/@pierre/diffs/dist/worker/WorkerPoolManager.js.map +1 -1
  544. package/node_modules/@pierre/diffs/dist/worker/getOrCreateWorkerPoolSingleton.d.ts +1 -5
  545. package/node_modules/@pierre/diffs/dist/worker/getOrCreateWorkerPoolSingleton.d.ts.map +1 -1
  546. package/node_modules/@pierre/diffs/dist/worker/types.d.ts +5 -1
  547. package/node_modules/@pierre/diffs/dist/worker/types.d.ts.map +1 -1
  548. package/node_modules/@pierre/diffs/dist/worker/worker-portable.d.ts +1 -1
  549. package/node_modules/@pierre/diffs/dist/worker/worker-portable.js +125 -358
  550. package/node_modules/@pierre/diffs/dist/worker/worker-portable.js.map +1 -1
  551. package/node_modules/@pierre/diffs/dist/worker/worker.d.ts +1 -1
  552. package/node_modules/@pierre/diffs/dist/worker/worker.js +28 -17
  553. package/node_modules/@pierre/diffs/dist/worker/worker.js.map +1 -1
  554. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/cjs/deserialize.js +12 -2
  555. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/cjs/serialize.js +5 -1
  556. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/esm/deserialize.js +12 -2
  557. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/esm/serialize.js +5 -1
  558. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/package.json +1 -1
  559. package/node_modules/@pierre/diffs/node_modules/@ungap/structured-clone/structured-json.js +1 -1
  560. package/node_modules/@pierre/diffs/package.json +12 -5
  561. package/node_modules/playwright-core/browsers.json +9 -32
  562. package/node_modules/playwright-core/lib/coreBundle.js +5402 -4419
  563. package/node_modules/playwright-core/lib/server/electron/loader.js +0 -2
  564. package/node_modules/playwright-core/lib/serverRegistry.js +1674 -7082
  565. package/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +8 -297
  566. package/node_modules/playwright-core/lib/tools/cli-client/help.json +19 -6
  567. package/node_modules/playwright-core/lib/tools/cli-client/minimist.js +1 -1
  568. package/node_modules/playwright-core/lib/tools/cli-client/output.js +9 -1
  569. package/node_modules/playwright-core/lib/tools/cli-client/program.js +17 -3
  570. package/node_modules/playwright-core/lib/tools/cli-client/registry.js +9 -5
  571. package/node_modules/playwright-core/lib/tools/cli-client/session.js +2 -1
  572. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +5 -0
  573. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/tracing.md +1 -1
  574. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/SKILL.md +4 -11
  575. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/migration.md +6 -2
  576. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/react.md +2 -0
  577. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/typing.md +173 -0
  578. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/vue.md +2 -0
  579. package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +6 -3
  580. package/node_modules/playwright-core/lib/tools/utils/extension.js +13 -2
  581. package/node_modules/playwright-core/lib/utilsBundle.js +1934 -7341
  582. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +8 -297
  583. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
  584. package/node_modules/playwright-core/lib/vite/{recorder/assets/codeMirrorModule-CwYYHbcZ.js → dashboard/assets/codeMirrorModule-CQ8RZGBm.js} +1 -1
  585. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
  586. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
  587. package/node_modules/playwright-core/lib/vite/dashboard/index.html +2 -2
  588. package/node_modules/playwright-core/lib/vite/htmlReport/report.css +1 -1
  589. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +4 -4
  590. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-CVQWJZAA.js +32 -0
  591. package/node_modules/playwright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
  592. package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +129 -0
  593. package/node_modules/playwright-core/lib/vite/recorder/index.html +2 -2
  594. package/node_modules/playwright-core/lib/vite/traceViewer/assets/{codeMirrorModule-rXmQmLUY.js → codeMirrorModule-BbkfBe3n.js} +1 -1
  595. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +182 -0
  596. package/node_modules/playwright-core/lib/vite/traceViewer/assets/{xtermModule-BuZfJS5v.js → xtermModule-DywYcAf8.js} +1 -1
  597. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.Bqk9acqE.css +1 -0
  598. package/node_modules/playwright-core/lib/vite/traceViewer/index.B4cLoZK3.js +1 -0
  599. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +3 -3
  600. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -3
  601. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CU5KtEkS.js +5 -0
  602. package/node_modules/playwright-core/lib/vite/traceViewer/{uiMode.C7UW1sC9.css → uiMode.CyMfwkXJ.css} +1 -1
  603. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +4 -4
  604. package/node_modules/playwright-core/package.json +1 -1
  605. package/node_modules/playwright-core/types/protocol.d.ts +201 -398
  606. package/node_modules/playwright-core/types/types.d.ts +771 -327
  607. package/node_modules/typebox/build/compile/validator.d.mts +1 -1
  608. package/node_modules/typebox/build/compile/validator.mjs +1 -1
  609. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +7 -5
  610. package/node_modules/typebox/build/format/iri.mjs +5 -1
  611. package/node_modules/typebox/build/guard/emit.mjs +2 -4
  612. package/node_modules/typebox/build/guard/guard.mjs +6 -18
  613. package/node_modules/typebox/build/guard/string.mjs +16 -24
  614. package/node_modules/typebox/build/schema/build.mjs +2 -2
  615. package/node_modules/typebox/build/schema/check.mjs +1 -1
  616. package/node_modules/typebox/build/schema/compile.d.mts +3 -2
  617. package/node_modules/typebox/build/schema/compile.mjs +8 -8
  618. package/node_modules/typebox/build/schema/engine/_context.d.mts +6 -7
  619. package/node_modules/typebox/build/schema/engine/_context.mjs +23 -15
  620. package/node_modules/typebox/build/schema/engine/_functions.d.mts +2 -2
  621. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -1
  622. package/node_modules/typebox/build/schema/engine/_reducer.d.mts +3 -3
  623. package/node_modules/typebox/build/schema/engine/_refine.d.mts +5 -5
  624. package/node_modules/typebox/build/schema/engine/_refine.mjs +4 -7
  625. package/node_modules/typebox/build/schema/engine/_stack.d.mts +34 -16
  626. package/node_modules/typebox/build/schema/engine/_stack.mjs +148 -104
  627. package/node_modules/typebox/build/schema/engine/additionalItems.d.mts +4 -4
  628. package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +8 -8
  629. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +26 -18
  630. package/node_modules/typebox/build/schema/engine/allOf.d.mts +4 -4
  631. package/node_modules/typebox/build/schema/engine/allOf.mjs +3 -3
  632. package/node_modules/typebox/build/schema/engine/anyOf.d.mts +4 -4
  633. package/node_modules/typebox/build/schema/engine/anyOf.mjs +5 -10
  634. package/node_modules/typebox/build/schema/engine/boolean.d.mts +4 -4
  635. package/node_modules/typebox/build/schema/engine/boolean.mjs +2 -6
  636. package/node_modules/typebox/build/schema/engine/const.d.mts +4 -4
  637. package/node_modules/typebox/build/schema/engine/const.mjs +2 -6
  638. package/node_modules/typebox/build/schema/engine/contains.d.mts +4 -4
  639. package/node_modules/typebox/build/schema/engine/contains.mjs +2 -6
  640. package/node_modules/typebox/build/schema/engine/dependencies.d.mts +4 -4
  641. package/node_modules/typebox/build/schema/engine/dependencies.mjs +3 -6
  642. package/node_modules/typebox/build/schema/engine/dependentRequired.d.mts +4 -4
  643. package/node_modules/typebox/build/schema/engine/dependentRequired.mjs +2 -6
  644. package/node_modules/typebox/build/schema/engine/dependentSchemas.d.mts +4 -4
  645. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +4 -4
  646. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +11 -7
  647. package/node_modules/typebox/build/schema/engine/enum.d.mts +4 -4
  648. package/node_modules/typebox/build/schema/engine/enum.mjs +2 -6
  649. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.d.mts +4 -4
  650. package/node_modules/typebox/build/schema/engine/exclusiveMaximum.mjs +2 -6
  651. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.d.mts +4 -4
  652. package/node_modules/typebox/build/schema/engine/exclusiveMinimum.mjs +2 -6
  653. package/node_modules/typebox/build/schema/engine/format.d.mts +4 -4
  654. package/node_modules/typebox/build/schema/engine/format.mjs +2 -6
  655. package/node_modules/typebox/build/schema/engine/if.d.mts +4 -4
  656. package/node_modules/typebox/build/schema/engine/if.mjs +7 -15
  657. package/node_modules/typebox/build/schema/engine/items.d.mts +4 -4
  658. package/node_modules/typebox/build/schema/engine/items.mjs +1 -1
  659. package/node_modules/typebox/build/schema/engine/maxContains.d.mts +4 -4
  660. package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -6
  661. package/node_modules/typebox/build/schema/engine/maxItems.d.mts +4 -4
  662. package/node_modules/typebox/build/schema/engine/maxItems.mjs +2 -6
  663. package/node_modules/typebox/build/schema/engine/maxLength.d.mts +4 -4
  664. package/node_modules/typebox/build/schema/engine/maxLength.mjs +2 -6
  665. package/node_modules/typebox/build/schema/engine/maxProperties.d.mts +4 -4
  666. package/node_modules/typebox/build/schema/engine/maxProperties.mjs +2 -6
  667. package/node_modules/typebox/build/schema/engine/maximum.d.mts +4 -4
  668. package/node_modules/typebox/build/schema/engine/maximum.mjs +2 -6
  669. package/node_modules/typebox/build/schema/engine/minContains.d.mts +4 -4
  670. package/node_modules/typebox/build/schema/engine/minContains.mjs +2 -6
  671. package/node_modules/typebox/build/schema/engine/minItems.d.mts +5 -5
  672. package/node_modules/typebox/build/schema/engine/minItems.mjs +2 -6
  673. package/node_modules/typebox/build/schema/engine/minLength.d.mts +4 -4
  674. package/node_modules/typebox/build/schema/engine/minLength.mjs +2 -6
  675. package/node_modules/typebox/build/schema/engine/minProperties.d.mts +4 -4
  676. package/node_modules/typebox/build/schema/engine/minProperties.mjs +2 -6
  677. package/node_modules/typebox/build/schema/engine/minimum.d.mts +4 -4
  678. package/node_modules/typebox/build/schema/engine/minimum.mjs +2 -6
  679. package/node_modules/typebox/build/schema/engine/multipleOf.d.mts +4 -4
  680. package/node_modules/typebox/build/schema/engine/multipleOf.mjs +2 -6
  681. package/node_modules/typebox/build/schema/engine/not.d.mts +4 -4
  682. package/node_modules/typebox/build/schema/engine/not.mjs +4 -8
  683. package/node_modules/typebox/build/schema/engine/oneOf.d.mts +4 -4
  684. package/node_modules/typebox/build/schema/engine/oneOf.mjs +6 -11
  685. package/node_modules/typebox/build/schema/engine/pattern.d.mts +4 -4
  686. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -7
  687. package/node_modules/typebox/build/schema/engine/patternProperties.d.mts +4 -4
  688. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +1 -1
  689. package/node_modules/typebox/build/schema/engine/prefixItems.d.mts +4 -4
  690. package/node_modules/typebox/build/schema/engine/prefixItems.mjs +1 -1
  691. package/node_modules/typebox/build/schema/engine/properties.d.mts +4 -4
  692. package/node_modules/typebox/build/schema/engine/properties.mjs +1 -1
  693. package/node_modules/typebox/build/schema/engine/propertyNames.d.mts +4 -4
  694. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +4 -10
  695. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +4 -4
  696. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +11 -7
  697. package/node_modules/typebox/build/schema/engine/ref.d.mts +4 -4
  698. package/node_modules/typebox/build/schema/engine/ref.mjs +19 -15
  699. package/node_modules/typebox/build/schema/engine/required.d.mts +4 -4
  700. package/node_modules/typebox/build/schema/engine/required.mjs +2 -6
  701. package/node_modules/typebox/build/schema/engine/schema.d.mts +7 -7
  702. package/node_modules/typebox/build/schema/engine/schema.mjs +137 -133
  703. package/node_modules/typebox/build/schema/engine/type.d.mts +4 -4
  704. package/node_modules/typebox/build/schema/engine/type.mjs +2 -6
  705. package/node_modules/typebox/build/schema/engine/unevaluatedItems.d.mts +4 -4
  706. package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +5 -9
  707. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.d.mts +4 -4
  708. package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +5 -9
  709. package/node_modules/typebox/build/schema/engine/uniqueItems.d.mts +4 -4
  710. package/node_modules/typebox/build/schema/engine/uniqueItems.mjs +2 -6
  711. package/node_modules/typebox/build/schema/errors.d.mts +2 -2
  712. package/node_modules/typebox/build/schema/errors.mjs +8 -14
  713. package/node_modules/typebox/build/schema/intern/index.d.mts +1 -0
  714. package/node_modules/typebox/build/schema/intern/index.mjs +1 -0
  715. package/node_modules/typebox/build/schema/intern/intern.d.mts +11 -0
  716. package/node_modules/typebox/build/schema/intern/intern.mjs +293 -0
  717. package/node_modules/typebox/build/schema/meta/draft_2019_09.d.mts +2 -0
  718. package/node_modules/typebox/build/schema/meta/draft_2019_09.mjs +288 -0
  719. package/node_modules/typebox/build/schema/meta/draft_2020_12.d.mts +2 -0
  720. package/node_modules/typebox/build/schema/meta/draft_2020_12.mjs +300 -0
  721. package/node_modules/typebox/build/schema/meta/draft_3.d.mts +2 -0
  722. package/node_modules/typebox/build/schema/meta/draft_3.mjs +143 -0
  723. package/node_modules/typebox/build/schema/meta/draft_4.d.mts +2 -0
  724. package/node_modules/typebox/build/schema/meta/draft_4.mjs +149 -0
  725. package/node_modules/typebox/build/schema/meta/draft_6.d.mts +2 -0
  726. package/node_modules/typebox/build/schema/meta/draft_6.mjs +155 -0
  727. package/node_modules/typebox/build/schema/meta/draft_7.d.mts +2 -0
  728. package/node_modules/typebox/build/schema/meta/draft_7.mjs +172 -0
  729. package/node_modules/typebox/build/schema/meta/index.d.mts +2 -0
  730. package/node_modules/typebox/build/schema/meta/index.mjs +2 -0
  731. package/node_modules/typebox/build/schema/meta/meta.d.mts +9 -0
  732. package/node_modules/typebox/build/schema/meta/meta.mjs +15 -0
  733. package/node_modules/typebox/build/schema/meta/schema.d.mts +6 -0
  734. package/node_modules/typebox/build/schema/meta/schema.mjs +1 -0
  735. package/node_modules/typebox/build/schema/parse.d.mts +1 -0
  736. package/node_modules/typebox/build/schema/parse.mjs +10 -5
  737. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +8 -3
  738. package/node_modules/typebox/build/schema/resolve/resolve.mjs +268 -139
  739. package/node_modules/typebox/build/schema/schema.d.mts +2 -0
  740. package/node_modules/typebox/build/schema/schema.mjs +2 -0
  741. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -12
  742. package/node_modules/typebox/build/value/errors/errors.mjs +2 -7
  743. package/node_modules/typebox/package.json +1 -1
  744. package/node_modules/typebox/readme.md +59 -89
  745. package/node_modules/zod/README.md +29 -2
  746. package/node_modules/zod/compile.cjs +96 -0
  747. package/node_modules/zod/compile.d.cts +1 -0
  748. package/node_modules/zod/compile.d.ts +1 -0
  749. package/node_modules/zod/compile.js +52 -0
  750. package/node_modules/zod/index.cjs +21 -2
  751. package/node_modules/zod/index.d.cts +1 -2
  752. package/node_modules/zod/index.d.ts +1 -2
  753. package/node_modules/zod/index.js +5 -2
  754. package/node_modules/zod/locales/index.cjs +19 -0
  755. package/node_modules/zod/mini/index.cjs +19 -0
  756. package/node_modules/zod/package.json +20 -8
  757. package/node_modules/zod/src/compile.ts +56 -0
  758. package/node_modules/zod/src/index.ts +5 -2
  759. package/node_modules/zod/src/v3/ZodError.ts +22 -12
  760. package/node_modules/zod/src/v3/helpers/errorUtil.ts +1 -1
  761. package/node_modules/zod/src/v3/tests/error.test.ts +35 -0
  762. package/node_modules/zod/src/v3/tests/intersection.test.ts +18 -0
  763. package/node_modules/zod/src/v3/tests/language-server.test.ts +1 -2
  764. package/node_modules/zod/src/v3/tests/object.test.ts +3 -6
  765. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -80
  766. package/node_modules/zod/src/v3/tests/string.test.ts +6 -0
  767. package/node_modules/zod/src/v3/types.ts +5 -5
  768. package/node_modules/zod/src/v4/classic/checks.ts +1 -0
  769. package/node_modules/zod/src/v4/classic/compat.ts +26 -18
  770. package/node_modules/zod/src/v4/classic/deep-partial.ts +76 -0
  771. package/node_modules/zod/src/v4/classic/errors.ts +59 -44
  772. package/node_modules/zod/src/v4/classic/external.ts +14 -9
  773. package/node_modules/zod/src/v4/classic/from-json-schema.ts +363 -78
  774. package/node_modules/zod/src/v4/classic/in-out.ts +45 -0
  775. package/node_modules/zod/src/v4/classic/index.ts +2 -2
  776. package/node_modules/zod/src/v4/classic/iso.ts +2 -72
  777. package/node_modules/zod/src/v4/classic/parse.ts +10 -4
  778. package/node_modules/zod/src/v4/classic/schemas.ts +640 -375
  779. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +27 -0
  780. package/node_modules/zod/src/v4/classic/tests/array.test.ts +2 -2
  781. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +186 -0
  782. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +36 -1
  783. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +278 -0
  784. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +1 -2
  785. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +2 -1
  786. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +3 -3
  787. package/node_modules/zod/src/v4/classic/tests/credit-card.test.ts +76 -0
  788. package/node_modules/zod/src/v4/classic/tests/cyclic-data.test.ts +985 -0
  789. package/node_modules/zod/src/v4/classic/tests/date.test.ts +30 -0
  790. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +32 -18
  791. package/node_modules/zod/src/v4/classic/tests/deep-partial.test.ts +380 -0
  792. package/node_modules/zod/src/v4/classic/tests/default-locale.test.ts +32 -0
  793. package/node_modules/zod/src/v4/classic/tests/default.test.ts +46 -0
  794. package/node_modules/zod/src/v4/classic/tests/detached-methods.test.ts +31 -7
  795. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +261 -13
  796. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +20 -0
  797. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +112 -2
  798. package/node_modules/zod/src/v4/classic/tests/error.test.ts +403 -6
  799. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +582 -10
  800. package/node_modules/zod/src/v4/classic/tests/function.test.ts +31 -0
  801. package/node_modules/zod/src/v4/classic/tests/global-config.test.ts +2 -9
  802. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +1 -2
  803. package/node_modules/zod/src/v4/classic/tests/iban.test.ts +81 -0
  804. package/node_modules/zod/src/v4/classic/tests/in-out.test.ts +159 -0
  805. package/node_modules/zod/src/v4/classic/tests/index.test.ts +21 -2
  806. package/node_modules/zod/src/v4/classic/tests/instance-footprint.test.ts +319 -0
  807. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +67 -0
  808. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +136 -0
  809. package/node_modules/zod/src/v4/classic/tests/issue-schema.test.ts +215 -0
  810. package/node_modules/zod/src/v4/classic/tests/jitless-allows-eval.test.ts +3 -10
  811. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +36 -1
  812. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +12 -1
  813. package/node_modules/zod/src/v4/classic/tests/map.test.ts +12 -0
  814. package/node_modules/zod/src/v4/classic/tests/number.test.ts +85 -9
  815. package/node_modules/zod/src/v4/classic/tests/object.test.ts +301 -12
  816. package/node_modules/zod/src/v4/classic/tests/optin-ladder.test.ts +235 -0
  817. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +49 -16
  818. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +51 -4
  819. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +70 -0
  820. package/node_modules/zod/src/v4/classic/tests/preprocess-types.test.ts +20 -2
  821. package/node_modules/zod/src/v4/classic/tests/properties.test.ts +141 -0
  822. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -68
  823. package/node_modules/zod/src/v4/classic/tests/record.test.ts +186 -18
  824. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +79 -3
  825. package/node_modules/zod/src/v4/classic/tests/redos.test.ts +68 -0
  826. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +60 -0
  827. package/node_modules/zod/src/v4/classic/tests/set.test.ts +9 -0
  828. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +19 -0
  829. package/node_modules/zod/src/v4/classic/tests/string.test.ts +222 -6
  830. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +18 -0
  831. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +44 -3
  832. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +1812 -204
  833. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +45 -30
  834. package/node_modules/zod/src/v4/classic/tests/union.test.ts +39 -2
  835. package/node_modules/zod/src/v4/classic/tests/validate.test.ts +645 -0
  836. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +2 -2
  837. package/node_modules/zod/src/v4/core/api.ts +87 -35
  838. package/node_modules/zod/src/v4/core/checks.ts +119 -146
  839. package/node_modules/zod/src/v4/core/compile.ts +2313 -0
  840. package/node_modules/zod/src/v4/core/core.ts +99 -22
  841. package/node_modules/zod/src/v4/core/doc.ts +17 -9
  842. package/node_modules/zod/src/v4/core/errors.ts +113 -25
  843. package/node_modules/zod/src/v4/core/index.ts +3 -0
  844. package/node_modules/zod/src/v4/core/json-schema-generator.ts +8 -3
  845. package/node_modules/zod/src/v4/core/json-schema-processors.ts +424 -156
  846. package/node_modules/zod/src/v4/core/json-schema.ts +2 -1
  847. package/node_modules/zod/src/v4/core/memoizer.ts +331 -0
  848. package/node_modules/zod/src/v4/core/parse.ts +164 -50
  849. package/node_modules/zod/src/v4/core/regexes.ts +42 -15
  850. package/node_modules/zod/src/v4/core/registries.ts +2 -2
  851. package/node_modules/zod/src/v4/core/schemas.ts +1000 -538
  852. package/node_modules/zod/src/v4/core/tests/cached.test.ts +54 -0
  853. package/node_modules/zod/src/v4/core/tests/compile-differential.test.ts +1004 -0
  854. package/node_modules/zod/src/v4/core/tests/compile-generative.test.ts +445 -0
  855. package/node_modules/zod/src/v4/core/tests/compile-global.test.ts +89 -0
  856. package/node_modules/zod/src/v4/core/tests/compile-off-by-default.test.ts +26 -0
  857. package/node_modules/zod/src/v4/core/tests/compile-stats.test.ts +34 -0
  858. package/node_modules/zod/src/v4/core/tests/compile.test.ts +2036 -0
  859. package/node_modules/zod/src/v4/core/tests/email-regex.test.ts +140 -0
  860. package/node_modules/zod/src/v4/core/tests/locales/el.test.ts +1 -2
  861. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +1 -2
  862. package/node_modules/zod/src/v4/core/tests/locales/fr.test.ts +3 -3
  863. package/node_modules/zod/src/v4/core/tests/locales/parity.test.ts +42 -0
  864. package/node_modules/zod/src/v4/core/tests/locales/tg.test.ts +85 -0
  865. package/node_modules/zod/src/v4/core/tests/locales/tk.test.ts +69 -0
  866. package/node_modules/zod/src/v4/core/tests/polyfill-collision.test.ts +46 -0
  867. package/node_modules/zod/src/v4/core/tests/treeshake.test.ts +51 -0
  868. package/node_modules/zod/src/v4/core/tests/url-no-canparse.test.ts +133 -0
  869. package/node_modules/zod/src/v4/core/to-json-schema.ts +283 -48
  870. package/node_modules/zod/src/v4/core/util.ts +454 -157
  871. package/node_modules/zod/src/v4/core/versions.ts +2 -2
  872. package/node_modules/zod/src/v4/core/visit.ts +193 -0
  873. package/node_modules/zod/src/v4/index.ts +3 -3
  874. package/node_modules/zod/src/v4/locales/ar.ts +5 -0
  875. package/node_modules/zod/src/v4/locales/az.ts +5 -0
  876. package/node_modules/zod/src/v4/locales/be.ts +12 -0
  877. package/node_modules/zod/src/v4/locales/bg.ts +5 -0
  878. package/node_modules/zod/src/v4/locales/bn.ts +123 -0
  879. package/node_modules/zod/src/v4/locales/ca.ts +5 -0
  880. package/node_modules/zod/src/v4/locales/ckb.ts +140 -0
  881. package/node_modules/zod/src/v4/locales/cs.ts +5 -0
  882. package/node_modules/zod/src/v4/locales/da.ts +7 -2
  883. package/node_modules/zod/src/v4/locales/de.ts +5 -0
  884. package/node_modules/zod/src/v4/locales/el.ts +3 -0
  885. package/node_modules/zod/src/v4/locales/en.ts +17 -4
  886. package/node_modules/zod/src/v4/locales/eo.ts +5 -0
  887. package/node_modules/zod/src/v4/locales/es.ts +4 -0
  888. package/node_modules/zod/src/v4/locales/fa.ts +5 -0
  889. package/node_modules/zod/src/v4/locales/fi.ts +5 -0
  890. package/node_modules/zod/src/v4/locales/fr-CA.ts +5 -0
  891. package/node_modules/zod/src/v4/locales/fr.ts +21 -14
  892. package/node_modules/zod/src/v4/locales/gu.ts +123 -0
  893. package/node_modules/zod/src/v4/locales/he.ts +8 -1
  894. package/node_modules/zod/src/v4/locales/hi.ts +126 -0
  895. package/node_modules/zod/src/v4/locales/hr.ts +4 -0
  896. package/node_modules/zod/src/v4/locales/hu.ts +5 -0
  897. package/node_modules/zod/src/v4/locales/hy.ts +11 -0
  898. package/node_modules/zod/src/v4/locales/id.ts +5 -0
  899. package/node_modules/zod/src/v4/locales/index.ts +11 -0
  900. package/node_modules/zod/src/v4/locales/is.ts +5 -0
  901. package/node_modules/zod/src/v4/locales/it.ts +5 -0
  902. package/node_modules/zod/src/v4/locales/ja.ts +5 -0
  903. package/node_modules/zod/src/v4/locales/ka.ts +5 -0
  904. package/node_modules/zod/src/v4/locales/km.ts +5 -0
  905. package/node_modules/zod/src/v4/locales/kn.ts +126 -0
  906. package/node_modules/zod/src/v4/locales/ko.ts +5 -0
  907. package/node_modules/zod/src/v4/locales/lt.ts +4 -0
  908. package/node_modules/zod/src/v4/locales/mk.ts +5 -0
  909. package/node_modules/zod/src/v4/locales/ms.ts +5 -0
  910. package/node_modules/zod/src/v4/locales/ne.ts +128 -0
  911. package/node_modules/zod/src/v4/locales/nl.ts +5 -0
  912. package/node_modules/zod/src/v4/locales/nn.ts +121 -0
  913. package/node_modules/zod/src/v4/locales/no.ts +7 -2
  914. package/node_modules/zod/src/v4/locales/ota.ts +5 -0
  915. package/node_modules/zod/src/v4/locales/pl.ts +5 -0
  916. package/node_modules/zod/src/v4/locales/ps.ts +5 -0
  917. package/node_modules/zod/src/v4/locales/pt-BR.ts +161 -0
  918. package/node_modules/zod/src/v4/locales/pt.ts +101 -58
  919. package/node_modules/zod/src/v4/locales/ro.ts +3 -0
  920. package/node_modules/zod/src/v4/locales/ru.ts +12 -0
  921. package/node_modules/zod/src/v4/locales/sk.ts +123 -0
  922. package/node_modules/zod/src/v4/locales/sl.ts +5 -0
  923. package/node_modules/zod/src/v4/locales/sv.ts +7 -2
  924. package/node_modules/zod/src/v4/locales/ta.ts +5 -0
  925. package/node_modules/zod/src/v4/locales/tg.ts +135 -0
  926. package/node_modules/zod/src/v4/locales/th.ts +5 -0
  927. package/node_modules/zod/src/v4/locales/tk.ts +113 -0
  928. package/node_modules/zod/src/v4/locales/tr.ts +5 -0
  929. package/node_modules/zod/src/v4/locales/uk.ts +5 -0
  930. package/node_modules/zod/src/v4/locales/ur.ts +5 -0
  931. package/node_modules/zod/src/v4/locales/uz.ts +3 -0
  932. package/node_modules/zod/src/v4/locales/vi.ts +5 -0
  933. package/node_modules/zod/src/v4/locales/yo.ts +5 -0
  934. package/node_modules/zod/src/v4/locales/zh-CN.ts +5 -0
  935. package/node_modules/zod/src/v4/locales/zh-TW.ts +5 -0
  936. package/node_modules/zod/src/v4/mini/checks.ts +1 -0
  937. package/node_modules/zod/src/v4/mini/deep-partial.ts +73 -0
  938. package/node_modules/zod/src/v4/mini/external.ts +12 -1
  939. package/node_modules/zod/src/v4/mini/in-out.ts +45 -0
  940. package/node_modules/zod/src/v4/mini/parse.ts +2 -0
  941. package/node_modules/zod/src/v4/mini/schemas.ts +167 -63
  942. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +33 -0
  943. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +62 -1
  944. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +14 -0
  945. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +35 -1
  946. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +11 -17
  947. package/node_modules/zod/src/v4/mini/tests/cyclic-data.test.ts +84 -0
  948. package/node_modules/zod/src/v4/mini/tests/deep-partial.test.ts +54 -0
  949. package/node_modules/zod/src/v4/mini/tests/error.test.ts +23 -4
  950. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +9 -0
  951. package/node_modules/zod/src/v4/mini/tests/index.test.ts +158 -5
  952. package/node_modules/zod/src/v4/mini/tests/number.test.ts +14 -0
  953. package/node_modules/zod/src/v4/mini/tests/object.test.ts +65 -0
  954. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +16 -0
  955. package/node_modules/zod/src/v4/mini/tests/string.test.ts +44 -0
  956. package/node_modules/zod/v3/ZodError.cjs +41 -12
  957. package/node_modules/zod/v3/ZodError.d.cts +1 -1
  958. package/node_modules/zod/v3/ZodError.d.ts +1 -1
  959. package/node_modules/zod/v3/ZodError.js +22 -12
  960. package/node_modules/zod/v3/errors.cjs +19 -0
  961. package/node_modules/zod/v3/external.cjs +19 -0
  962. package/node_modules/zod/v3/helpers/enumUtil.cjs +19 -0
  963. package/node_modules/zod/v3/helpers/errorUtil.cjs +20 -1
  964. package/node_modules/zod/v3/helpers/errorUtil.js +1 -1
  965. package/node_modules/zod/v3/helpers/parseUtil.cjs +19 -0
  966. package/node_modules/zod/v3/helpers/partialUtil.cjs +19 -0
  967. package/node_modules/zod/v3/helpers/typeAliases.cjs +19 -0
  968. package/node_modules/zod/v3/helpers/util.cjs +19 -0
  969. package/node_modules/zod/v3/index.cjs +19 -0
  970. package/node_modules/zod/v3/standard-schema.cjs +19 -0
  971. package/node_modules/zod/v3/types.cjs +26 -5
  972. package/node_modules/zod/v3/types.js +7 -5
  973. package/node_modules/zod/v4/classic/checks.cjs +21 -1
  974. package/node_modules/zod/v4/classic/checks.d.cts +1 -1
  975. package/node_modules/zod/v4/classic/checks.d.ts +1 -1
  976. package/node_modules/zod/v4/classic/checks.js +1 -1
  977. package/node_modules/zod/v4/classic/coerce.cjs +19 -0
  978. package/node_modules/zod/v4/classic/compat.cjs +19 -0
  979. package/node_modules/zod/v4/classic/compat.d.cts +9 -11
  980. package/node_modules/zod/v4/classic/compat.d.ts +9 -11
  981. package/node_modules/zod/v4/classic/deep-partial.cjs +58 -0
  982. package/node_modules/zod/v4/classic/deep-partial.d.cts +14 -0
  983. package/node_modules/zod/v4/classic/deep-partial.d.ts +14 -0
  984. package/node_modules/zod/v4/classic/deep-partial.js +13 -0
  985. package/node_modules/zod/v4/classic/errors.cjs +62 -34
  986. package/node_modules/zod/v4/classic/errors.d.cts +3 -4
  987. package/node_modules/zod/v4/classic/errors.d.ts +3 -4
  988. package/node_modules/zod/v4/classic/errors.js +43 -34
  989. package/node_modules/zod/v4/classic/external.cjs +51 -27
  990. package/node_modules/zod/v4/classic/external.d.cts +5 -2
  991. package/node_modules/zod/v4/classic/external.d.ts +5 -2
  992. package/node_modules/zod/v4/classic/external.js +5 -8
  993. package/node_modules/zod/v4/classic/from-json-schema.cjs +376 -75
  994. package/node_modules/zod/v4/classic/from-json-schema.js +357 -75
  995. package/node_modules/zod/v4/classic/in-out.cjs +82 -0
  996. package/node_modules/zod/v4/classic/in-out.d.cts +8 -0
  997. package/node_modules/zod/v4/classic/in-out.d.ts +8 -0
  998. package/node_modules/zod/v4/classic/in-out.js +36 -0
  999. package/node_modules/zod/v4/classic/index.cjs +21 -2
  1000. package/node_modules/zod/v4/classic/index.d.cts +1 -2
  1001. package/node_modules/zod/v4/classic/index.d.ts +1 -2
  1002. package/node_modules/zod/v4/classic/index.js +2 -2
  1003. package/node_modules/zod/v4/classic/iso.cjs +30 -22
  1004. package/node_modules/zod/v4/classic/iso.d.cts +2 -17
  1005. package/node_modules/zod/v4/classic/iso.d.ts +2 -17
  1006. package/node_modules/zod/v4/classic/iso.js +2 -17
  1007. package/node_modules/zod/v4/classic/parse.cjs +23 -1
  1008. package/node_modules/zod/v4/classic/parse.d.cts +17 -4
  1009. package/node_modules/zod/v4/classic/parse.d.ts +17 -4
  1010. package/node_modules/zod/v4/classic/parse.js +1 -0
  1011. package/node_modules/zod/v4/classic/schemas.cjs +591 -426
  1012. package/node_modules/zod/v4/classic/schemas.d.cts +68 -19
  1013. package/node_modules/zod/v4/classic/schemas.d.ts +68 -19
  1014. package/node_modules/zod/v4/classic/schemas.js +564 -424
  1015. package/node_modules/zod/v4/core/api.cjs +66 -24
  1016. package/node_modules/zod/v4/core/api.d.cts +22 -12
  1017. package/node_modules/zod/v4/core/api.d.ts +22 -12
  1018. package/node_modules/zod/v4/core/api.js +44 -24
  1019. package/node_modules/zod/v4/core/checks.cjs +88 -128
  1020. package/node_modules/zod/v4/core/checks.d.cts +29 -13
  1021. package/node_modules/zod/v4/core/checks.d.ts +29 -13
  1022. package/node_modules/zod/v4/core/checks.js +68 -127
  1023. package/node_modules/zod/v4/core/compile.cjs +1908 -0
  1024. package/node_modules/zod/v4/core/compile.d.cts +65 -0
  1025. package/node_modules/zod/v4/core/compile.d.ts +65 -0
  1026. package/node_modules/zod/v4/core/compile.js +1858 -0
  1027. package/node_modules/zod/v4/core/core.cjs +101 -19
  1028. package/node_modules/zod/v4/core/core.d.cts +16 -4
  1029. package/node_modules/zod/v4/core/core.d.ts +16 -4
  1030. package/node_modules/zod/v4/core/core.js +83 -20
  1031. package/node_modules/zod/v4/core/doc.cjs +31 -9
  1032. package/node_modules/zod/v4/core/doc.d.cts +3 -1
  1033. package/node_modules/zod/v4/core/doc.d.ts +3 -1
  1034. package/node_modules/zod/v4/core/doc.js +12 -9
  1035. package/node_modules/zod/v4/core/errors.cjs +126 -25
  1036. package/node_modules/zod/v4/core/errors.d.cts +4 -0
  1037. package/node_modules/zod/v4/core/errors.d.ts +4 -0
  1038. package/node_modules/zod/v4/core/errors.js +107 -25
  1039. package/node_modules/zod/v4/core/index.cjs +24 -1
  1040. package/node_modules/zod/v4/core/index.d.cts +3 -0
  1041. package/node_modules/zod/v4/core/index.d.ts +3 -0
  1042. package/node_modules/zod/v4/core/index.js +3 -0
  1043. package/node_modules/zod/v4/core/json-schema-generator.cjs +24 -1
  1044. package/node_modules/zod/v4/core/json-schema-generator.d.cts +2 -2
  1045. package/node_modules/zod/v4/core/json-schema-generator.d.ts +2 -2
  1046. package/node_modules/zod/v4/core/json-schema-generator.js +6 -2
  1047. package/node_modules/zod/v4/core/json-schema-processors.cjs +441 -156
  1048. package/node_modules/zod/v4/core/json-schema-processors.d.cts +16 -0
  1049. package/node_modules/zod/v4/core/json-schema-processors.d.ts +16 -0
  1050. package/node_modules/zod/v4/core/json-schema-processors.js +400 -158
  1051. package/node_modules/zod/v4/core/json-schema.cjs +19 -0
  1052. package/node_modules/zod/v4/core/json-schema.d.cts +2 -1
  1053. package/node_modules/zod/v4/core/json-schema.d.ts +2 -1
  1054. package/node_modules/zod/v4/core/memoizer.cjs +360 -0
  1055. package/node_modules/zod/v4/core/memoizer.d.cts +15 -0
  1056. package/node_modules/zod/v4/core/memoizer.d.ts +15 -0
  1057. package/node_modules/zod/v4/core/memoizer.js +311 -0
  1058. package/node_modules/zod/v4/core/parse.cjs +148 -46
  1059. package/node_modules/zod/v4/core/parse.d.cts +14 -11
  1060. package/node_modules/zod/v4/core/parse.d.ts +14 -11
  1061. package/node_modules/zod/v4/core/parse.js +127 -45
  1062. package/node_modules/zod/v4/core/regexes.cjs +54 -17
  1063. package/node_modules/zod/v4/core/regexes.d.cts +5 -0
  1064. package/node_modules/zod/v4/core/regexes.d.ts +5 -0
  1065. package/node_modules/zod/v4/core/regexes.js +32 -15
  1066. package/node_modules/zod/v4/core/registries.cjs +19 -0
  1067. package/node_modules/zod/v4/core/registries.js +2 -2
  1068. package/node_modules/zod/v4/core/schemas.cjs +785 -386
  1069. package/node_modules/zod/v4/core/schemas.d.cts +123 -34
  1070. package/node_modules/zod/v4/core/schemas.d.ts +123 -34
  1071. package/node_modules/zod/v4/core/schemas.js +753 -386
  1072. package/node_modules/zod/v4/core/standard-schema.cjs +19 -0
  1073. package/node_modules/zod/v4/core/to-json-schema.cjs +269 -45
  1074. package/node_modules/zod/v4/core/to-json-schema.d.cts +45 -5
  1075. package/node_modules/zod/v4/core/to-json-schema.d.ts +45 -5
  1076. package/node_modules/zod/v4/core/to-json-schema.js +247 -44
  1077. package/node_modules/zod/v4/core/util.cjs +372 -157
  1078. package/node_modules/zod/v4/core/util.d.cts +79 -1
  1079. package/node_modules/zod/v4/core/util.d.ts +79 -1
  1080. package/node_modules/zod/v4/core/util.js +341 -156
  1081. package/node_modules/zod/v4/core/versions.cjs +21 -2
  1082. package/node_modules/zod/v4/core/versions.d.cts +1 -1
  1083. package/node_modules/zod/v4/core/versions.d.ts +1 -1
  1084. package/node_modules/zod/v4/core/versions.js +2 -2
  1085. package/node_modules/zod/v4/core/visit.cjs +214 -0
  1086. package/node_modules/zod/v4/core/visit.d.cts +30 -0
  1087. package/node_modules/zod/v4/core/visit.d.ts +30 -0
  1088. package/node_modules/zod/v4/core/visit.js +169 -0
  1089. package/node_modules/zod/v4/index.cjs +34 -5
  1090. package/node_modules/zod/v4/index.d.cts +2 -2
  1091. package/node_modules/zod/v4/index.d.ts +2 -2
  1092. package/node_modules/zod/v4/index.js +3 -2
  1093. package/node_modules/zod/v4/locales/ar.cjs +5 -0
  1094. package/node_modules/zod/v4/locales/ar.js +5 -0
  1095. package/node_modules/zod/v4/locales/az.cjs +5 -0
  1096. package/node_modules/zod/v4/locales/az.js +5 -0
  1097. package/node_modules/zod/v4/locales/be.cjs +12 -0
  1098. package/node_modules/zod/v4/locales/be.js +12 -0
  1099. package/node_modules/zod/v4/locales/bg.cjs +5 -0
  1100. package/node_modules/zod/v4/locales/bg.js +5 -0
  1101. package/node_modules/zod/v4/locales/bn.cjs +140 -0
  1102. package/node_modules/zod/v4/locales/bn.d.cts +5 -0
  1103. package/node_modules/zod/v4/locales/bn.d.ts +4 -0
  1104. package/node_modules/zod/v4/locales/bn.js +113 -0
  1105. package/node_modules/zod/v4/locales/ca.cjs +5 -0
  1106. package/node_modules/zod/v4/locales/ca.js +5 -0
  1107. package/node_modules/zod/v4/locales/ckb.cjs +160 -0
  1108. package/node_modules/zod/v4/locales/ckb.d.cts +5 -0
  1109. package/node_modules/zod/v4/locales/ckb.d.ts +4 -0
  1110. package/node_modules/zod/v4/locales/ckb.js +133 -0
  1111. package/node_modules/zod/v4/locales/cs.cjs +5 -0
  1112. package/node_modules/zod/v4/locales/cs.js +5 -0
  1113. package/node_modules/zod/v4/locales/da.cjs +7 -2
  1114. package/node_modules/zod/v4/locales/da.js +7 -2
  1115. package/node_modules/zod/v4/locales/de.cjs +5 -0
  1116. package/node_modules/zod/v4/locales/de.js +5 -0
  1117. package/node_modules/zod/v4/locales/el.cjs +3 -0
  1118. package/node_modules/zod/v4/locales/el.js +3 -0
  1119. package/node_modules/zod/v4/locales/en.cjs +16 -4
  1120. package/node_modules/zod/v4/locales/en.js +16 -4
  1121. package/node_modules/zod/v4/locales/eo.cjs +5 -0
  1122. package/node_modules/zod/v4/locales/eo.js +5 -0
  1123. package/node_modules/zod/v4/locales/es.cjs +4 -0
  1124. package/node_modules/zod/v4/locales/es.js +4 -0
  1125. package/node_modules/zod/v4/locales/fa.cjs +5 -0
  1126. package/node_modules/zod/v4/locales/fa.js +5 -0
  1127. package/node_modules/zod/v4/locales/fi.cjs +5 -0
  1128. package/node_modules/zod/v4/locales/fi.js +5 -0
  1129. package/node_modules/zod/v4/locales/fr-CA.cjs +5 -0
  1130. package/node_modules/zod/v4/locales/fr-CA.js +5 -0
  1131. package/node_modules/zod/v4/locales/fr.cjs +18 -14
  1132. package/node_modules/zod/v4/locales/fr.js +18 -14
  1133. package/node_modules/zod/v4/locales/gu.cjs +140 -0
  1134. package/node_modules/zod/v4/locales/gu.d.cts +5 -0
  1135. package/node_modules/zod/v4/locales/gu.d.ts +4 -0
  1136. package/node_modules/zod/v4/locales/gu.js +113 -0
  1137. package/node_modules/zod/v4/locales/he.cjs +7 -0
  1138. package/node_modules/zod/v4/locales/he.js +7 -0
  1139. package/node_modules/zod/v4/locales/hi.cjs +138 -0
  1140. package/node_modules/zod/v4/locales/hi.d.cts +5 -0
  1141. package/node_modules/zod/v4/locales/hi.d.ts +4 -0
  1142. package/node_modules/zod/v4/locales/hi.js +111 -0
  1143. package/node_modules/zod/v4/locales/hr.cjs +4 -0
  1144. package/node_modules/zod/v4/locales/hr.js +4 -0
  1145. package/node_modules/zod/v4/locales/hu.cjs +5 -0
  1146. package/node_modules/zod/v4/locales/hu.js +5 -0
  1147. package/node_modules/zod/v4/locales/hy.cjs +11 -0
  1148. package/node_modules/zod/v4/locales/hy.js +11 -0
  1149. package/node_modules/zod/v4/locales/id.cjs +5 -0
  1150. package/node_modules/zod/v4/locales/id.js +5 -0
  1151. package/node_modules/zod/v4/locales/index.cjs +43 -2
  1152. package/node_modules/zod/v4/locales/index.d.cts +11 -0
  1153. package/node_modules/zod/v4/locales/index.d.ts +11 -0
  1154. package/node_modules/zod/v4/locales/index.js +11 -0
  1155. package/node_modules/zod/v4/locales/is.cjs +5 -0
  1156. package/node_modules/zod/v4/locales/is.js +5 -0
  1157. package/node_modules/zod/v4/locales/it.cjs +5 -0
  1158. package/node_modules/zod/v4/locales/it.js +5 -0
  1159. package/node_modules/zod/v4/locales/ja.cjs +5 -0
  1160. package/node_modules/zod/v4/locales/ja.js +5 -0
  1161. package/node_modules/zod/v4/locales/ka.cjs +5 -0
  1162. package/node_modules/zod/v4/locales/ka.js +5 -0
  1163. package/node_modules/zod/v4/locales/km.cjs +5 -0
  1164. package/node_modules/zod/v4/locales/km.js +5 -0
  1165. package/node_modules/zod/v4/locales/kn.cjs +143 -0
  1166. package/node_modules/zod/v4/locales/kn.d.cts +5 -0
  1167. package/node_modules/zod/v4/locales/kn.d.ts +4 -0
  1168. package/node_modules/zod/v4/locales/kn.js +116 -0
  1169. package/node_modules/zod/v4/locales/ko.cjs +5 -0
  1170. package/node_modules/zod/v4/locales/ko.js +5 -0
  1171. package/node_modules/zod/v4/locales/lt.cjs +4 -0
  1172. package/node_modules/zod/v4/locales/lt.js +4 -0
  1173. package/node_modules/zod/v4/locales/mk.cjs +5 -0
  1174. package/node_modules/zod/v4/locales/mk.js +5 -0
  1175. package/node_modules/zod/v4/locales/ms.cjs +5 -0
  1176. package/node_modules/zod/v4/locales/ms.js +5 -0
  1177. package/node_modules/zod/v4/locales/ne.cjs +138 -0
  1178. package/node_modules/zod/v4/locales/ne.d.cts +5 -0
  1179. package/node_modules/zod/v4/locales/ne.d.ts +4 -0
  1180. package/node_modules/zod/v4/locales/ne.js +111 -0
  1181. package/node_modules/zod/v4/locales/nl.cjs +5 -0
  1182. package/node_modules/zod/v4/locales/nl.js +5 -0
  1183. package/node_modules/zod/v4/locales/nn.cjs +140 -0
  1184. package/node_modules/zod/v4/locales/nn.d.cts +5 -0
  1185. package/node_modules/zod/v4/locales/nn.d.ts +4 -0
  1186. package/node_modules/zod/v4/locales/nn.js +113 -0
  1187. package/node_modules/zod/v4/locales/no.cjs +7 -2
  1188. package/node_modules/zod/v4/locales/no.js +7 -2
  1189. package/node_modules/zod/v4/locales/ota.cjs +5 -0
  1190. package/node_modules/zod/v4/locales/ota.js +5 -0
  1191. package/node_modules/zod/v4/locales/pl.cjs +5 -0
  1192. package/node_modules/zod/v4/locales/pl.js +5 -0
  1193. package/node_modules/zod/v4/locales/ps.cjs +5 -0
  1194. package/node_modules/zod/v4/locales/ps.js +5 -0
  1195. package/node_modules/zod/v4/locales/pt-BR.cjs +170 -0
  1196. package/node_modules/zod/v4/locales/pt-BR.d.cts +5 -0
  1197. package/node_modules/zod/v4/locales/pt-BR.d.ts +4 -0
  1198. package/node_modules/zod/v4/locales/pt-BR.js +143 -0
  1199. package/node_modules/zod/v4/locales/pt.cjs +89 -55
  1200. package/node_modules/zod/v4/locales/pt.js +89 -55
  1201. package/node_modules/zod/v4/locales/ro.cjs +3 -0
  1202. package/node_modules/zod/v4/locales/ro.js +3 -0
  1203. package/node_modules/zod/v4/locales/ru.cjs +12 -0
  1204. package/node_modules/zod/v4/locales/ru.js +12 -0
  1205. package/node_modules/zod/v4/locales/sk.cjs +143 -0
  1206. package/node_modules/zod/v4/locales/sk.d.cts +5 -0
  1207. package/node_modules/zod/v4/locales/sk.d.ts +4 -0
  1208. package/node_modules/zod/v4/locales/sk.js +116 -0
  1209. package/node_modules/zod/v4/locales/sl.cjs +5 -0
  1210. package/node_modules/zod/v4/locales/sl.js +5 -0
  1211. package/node_modules/zod/v4/locales/sv.cjs +7 -2
  1212. package/node_modules/zod/v4/locales/sv.js +7 -2
  1213. package/node_modules/zod/v4/locales/ta.cjs +5 -0
  1214. package/node_modules/zod/v4/locales/ta.js +5 -0
  1215. package/node_modules/zod/v4/locales/tg.cjs +144 -0
  1216. package/node_modules/zod/v4/locales/tg.d.cts +5 -0
  1217. package/node_modules/zod/v4/locales/tg.d.ts +4 -0
  1218. package/node_modules/zod/v4/locales/tg.js +117 -0
  1219. package/node_modules/zod/v4/locales/th.cjs +5 -0
  1220. package/node_modules/zod/v4/locales/th.js +5 -0
  1221. package/node_modules/zod/v4/locales/tk.cjs +134 -0
  1222. package/node_modules/zod/v4/locales/tk.d.cts +5 -0
  1223. package/node_modules/zod/v4/locales/tk.d.ts +4 -0
  1224. package/node_modules/zod/v4/locales/tk.js +107 -0
  1225. package/node_modules/zod/v4/locales/tr.cjs +5 -0
  1226. package/node_modules/zod/v4/locales/tr.js +5 -0
  1227. package/node_modules/zod/v4/locales/uk.cjs +5 -0
  1228. package/node_modules/zod/v4/locales/uk.js +5 -0
  1229. package/node_modules/zod/v4/locales/ur.cjs +5 -0
  1230. package/node_modules/zod/v4/locales/ur.js +5 -0
  1231. package/node_modules/zod/v4/locales/uz.cjs +3 -0
  1232. package/node_modules/zod/v4/locales/uz.js +3 -0
  1233. package/node_modules/zod/v4/locales/vi.cjs +5 -0
  1234. package/node_modules/zod/v4/locales/vi.js +5 -0
  1235. package/node_modules/zod/v4/locales/yo.cjs +5 -0
  1236. package/node_modules/zod/v4/locales/yo.js +5 -0
  1237. package/node_modules/zod/v4/locales/zh-CN.cjs +5 -0
  1238. package/node_modules/zod/v4/locales/zh-CN.js +5 -0
  1239. package/node_modules/zod/v4/locales/zh-TW.cjs +5 -0
  1240. package/node_modules/zod/v4/locales/zh-TW.js +5 -0
  1241. package/node_modules/zod/v4/mini/checks.cjs +21 -1
  1242. package/node_modules/zod/v4/mini/checks.d.cts +1 -1
  1243. package/node_modules/zod/v4/mini/checks.d.ts +1 -1
  1244. package/node_modules/zod/v4/mini/checks.js +1 -1
  1245. package/node_modules/zod/v4/mini/coerce.cjs +19 -0
  1246. package/node_modules/zod/v4/mini/deep-partial.cjs +58 -0
  1247. package/node_modules/zod/v4/mini/deep-partial.d.cts +14 -0
  1248. package/node_modules/zod/v4/mini/deep-partial.d.ts +14 -0
  1249. package/node_modules/zod/v4/mini/deep-partial.js +13 -0
  1250. package/node_modules/zod/v4/mini/external.cjs +33 -1
  1251. package/node_modules/zod/v4/mini/external.d.cts +5 -2
  1252. package/node_modules/zod/v4/mini/external.d.ts +5 -2
  1253. package/node_modules/zod/v4/mini/external.js +3 -1
  1254. package/node_modules/zod/v4/mini/in-out.cjs +82 -0
  1255. package/node_modules/zod/v4/mini/in-out.d.cts +8 -0
  1256. package/node_modules/zod/v4/mini/in-out.d.ts +8 -0
  1257. package/node_modules/zod/v4/mini/in-out.js +36 -0
  1258. package/node_modules/zod/v4/mini/index.cjs +19 -0
  1259. package/node_modules/zod/v4/mini/iso.cjs +19 -0
  1260. package/node_modules/zod/v4/mini/parse.cjs +22 -1
  1261. package/node_modules/zod/v4/mini/parse.d.cts +1 -1
  1262. package/node_modules/zod/v4/mini/parse.d.ts +1 -1
  1263. package/node_modules/zod/v4/mini/parse.js +1 -1
  1264. package/node_modules/zod/v4/mini/schemas.cjs +117 -53
  1265. package/node_modules/zod/v4/mini/schemas.d.cts +49 -14
  1266. package/node_modules/zod/v4/mini/schemas.d.ts +49 -14
  1267. package/node_modules/zod/v4/mini/schemas.js +92 -51
  1268. package/node_modules/zod/v4-mini/index.cjs +19 -0
  1269. package/openclaw.plugin.json +19 -3
  1270. package/package.json +10 -8
  1271. package/node_modules/@pierre/diffs/dist/editor/stateStorage.d.ts +0 -15
  1272. package/node_modules/@pierre/diffs/dist/editor/stateStorage.d.ts.map +0 -1
  1273. package/node_modules/@pierre/diffs/dist/editor/stateStorage.js +0 -65
  1274. package/node_modules/@pierre/diffs/dist/editor/stateStorage.js.map +0 -1
  1275. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-CyWAfh-p.js +0 -11
  1276. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-DhC616m4.css +0 -1
  1277. package/node_modules/playwright-core/lib/vite/recorder/assets/index-DYjdXIbE.js +0 -129
  1278. package/node_modules/playwright-core/lib/vite/recorder/assets/index-l_lX622x.css +0 -1
  1279. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-B-dXF5JN.js +0 -181
  1280. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.BLFoOugd.css +0 -1
  1281. package/node_modules/playwright-core/lib/vite/traceViewer/index.KZ4wOW1K.js +0 -1
  1282. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.Dzuouizj.js +0 -5
  1283. package/node_modules/zod/src/v4/core/config.ts +0 -15
  1284. /package/dist/{viewer-assets-D3qrnaxI.js → .setup/viewer-assets-D3qrnaxI.mjs} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"matchBrackets.js","names":[],"sources":["../../src/editor/matchBrackets.ts"],"sourcesContent":["import type { Position, Range } from '../types';\nimport type { TextDocument } from './textDocument';\nimport type { EditorTokenizer } from './tokenizer';\n\nconst OPEN_BRACKETS = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n]);\n\nconst CLOSE_BRACKETS = new Map(\n [...OPEN_BRACKETS].map(([open, close]) => [close, open])\n);\n\nconst MAX_BRACKET_SCAN_LINES = 1_000;\nconst MAX_BRACKET_SCAN_CHARACTERS = 50_000;\n\ninterface BracketPosition extends Position {\n char: string;\n}\n\nexport function findBracketMatchRanges<LAnnotation>(\n textDocument: TextDocument<LAnnotation>,\n tokenizer: EditorTokenizer,\n position: Position\n): [open: Range, close: Range] | undefined {\n const bracketPosition = findAdjacentBracket(\n textDocument,\n tokenizer,\n textDocument.normalizePosition(position)\n );\n if (bracketPosition === undefined) {\n return undefined;\n }\n\n const closingBracket = OPEN_BRACKETS.get(bracketPosition.char);\n const openingBracket = CLOSE_BRACKETS.get(bracketPosition.char);\n if (closingBracket !== undefined) {\n const matchPosition = findClosingBracket(\n textDocument,\n tokenizer,\n bracketPosition,\n closingBracket\n );\n return createBracketMatchRanges(bracketPosition, matchPosition);\n }\n if (openingBracket !== undefined) {\n const matchPosition = findOpeningBracket(\n textDocument,\n tokenizer,\n bracketPosition,\n openingBracket\n );\n return createBracketMatchRanges(matchPosition, bracketPosition);\n }\n return undefined;\n}\n\nfunction findAdjacentBracket<LAnnotation>(\n textDocument: TextDocument<LAnnotation>,\n tokenizer: EditorTokenizer,\n position: Position\n): BracketPosition | undefined {\n const previousPosition = getPreviousCharacterPosition(position);\n if (previousPosition !== undefined) {\n const previousBracket = getBracketAtPosition(\n textDocument,\n tokenizer,\n previousPosition\n );\n if (previousBracket !== undefined) {\n return previousBracket;\n }\n }\n return getBracketAtPosition(textDocument, tokenizer, position);\n}\n\nfunction getPreviousCharacterPosition(\n position: Position\n): Position | undefined {\n if (position.character > 0) {\n return { line: position.line, character: position.character - 1 };\n }\n // Bracket adjacency is line-local: column-zero carets are not visually next to\n // the previous line's last character.\n return undefined;\n}\n\nfunction getBracketAtPosition<LAnnotation>(\n textDocument: TextDocument<LAnnotation>,\n tokenizer: EditorTokenizer,\n position: Position\n): BracketPosition | undefined {\n const lineText = textDocument.getLineText(position.line);\n const char = lineText[position.character];\n if (\n char === undefined ||\n (!OPEN_BRACKETS.has(char) && !CLOSE_BRACKETS.has(char)) ||\n isInIgnoredTokenRange(tokenizer, position)\n ) {\n return undefined;\n }\n return { ...position, char };\n}\n\nfunction findClosingBracket<LAnnotation>(\n textDocument: TextDocument<LAnnotation>,\n tokenizer: EditorTokenizer,\n bracketPosition: BracketPosition,\n closingBracket: string\n): BracketPosition | undefined {\n let depth = 0;\n let scannedLines = 0;\n let scannedCharacters = 0;\n for (let line = bracketPosition.line; line < textDocument.lineCount; line++) {\n if (scannedLines >= MAX_BRACKET_SCAN_LINES) {\n return undefined;\n }\n scannedLines++;\n const lineText = textDocument.getLineText(line);\n const ignoredRanges = tokenizer.getStringCommentRegexpRangesInLine(line);\n const ignoredRangeCursor = { index: 0 };\n const startCharacter =\n line === bracketPosition.line ? bracketPosition.character : 0;\n for (\n let character = startCharacter;\n character < lineText.length;\n character++\n ) {\n if (scannedCharacters >= MAX_BRACKET_SCAN_CHARACTERS) {\n return undefined;\n }\n scannedCharacters++;\n if (\n isCharacterIgnoredForward(ignoredRanges, character, ignoredRangeCursor)\n ) {\n continue;\n }\n const char = lineText[character];\n if (char === bracketPosition.char) {\n depth++;\n } else if (char === closingBracket) {\n depth--;\n if (depth === 0) {\n return { line, character, char };\n }\n }\n }\n }\n return undefined;\n}\n\nfunction findOpeningBracket<LAnnotation>(\n textDocument: TextDocument<LAnnotation>,\n tokenizer: EditorTokenizer,\n bracketPosition: BracketPosition,\n openingBracket: string\n): BracketPosition | undefined {\n let depth = 0;\n let scannedLines = 0;\n let scannedCharacters = 0;\n for (let line = bracketPosition.line; line >= 0; line--) {\n if (scannedLines >= MAX_BRACKET_SCAN_LINES) {\n return undefined;\n }\n scannedLines++;\n const lineText = textDocument.getLineText(line);\n const ignoredRanges = tokenizer.getStringCommentRegexpRangesInLine(line);\n const ignoredRangeCursor = {\n index: ignoredRanges === null ? -1 : ignoredRanges.length - 1,\n };\n const startCharacter =\n line === bracketPosition.line\n ? bracketPosition.character\n : lineText.length - 1;\n for (let character = startCharacter; character >= 0; character--) {\n if (scannedCharacters >= MAX_BRACKET_SCAN_CHARACTERS) {\n return undefined;\n }\n scannedCharacters++;\n if (\n isCharacterIgnoredBackward(ignoredRanges, character, ignoredRangeCursor)\n ) {\n continue;\n }\n const char = lineText[character];\n if (char === bracketPosition.char) {\n depth++;\n } else if (char === openingBracket) {\n depth--;\n if (depth === 0) {\n return { line, character, char };\n }\n }\n }\n }\n return undefined;\n}\n\nfunction isInIgnoredTokenRange(\n tokenizer: EditorTokenizer,\n position: Position\n): boolean {\n const ranges = tokenizer.getStringCommentRegexpRangesInLine(position.line);\n return isCharacterInIgnoredRanges(ranges, position.character);\n}\n\nfunction isCharacterInIgnoredRanges(\n ranges: [start: number, end: number][] | null,\n character: number\n): boolean {\n if (ranges === null) {\n return false;\n }\n for (const [start, end] of ranges) {\n if (character < start) {\n return false;\n }\n if (character < end) {\n return true;\n }\n }\n return false;\n}\n\nfunction isCharacterIgnoredForward(\n ranges: [start: number, end: number][] | null,\n character: number,\n cursor: { index: number }\n): boolean {\n if (ranges === null) {\n return false;\n }\n while (cursor.index < ranges.length && character >= ranges[cursor.index][1]) {\n cursor.index++;\n }\n const range = ranges[cursor.index];\n return range !== undefined && character >= range[0];\n}\n\nfunction isCharacterIgnoredBackward(\n ranges: [start: number, end: number][] | null,\n character: number,\n cursor: { index: number }\n): boolean {\n if (ranges === null) {\n return false;\n }\n while (cursor.index >= 0 && character < ranges[cursor.index][0]) {\n cursor.index--;\n }\n const range = ranges[cursor.index];\n return range !== undefined && character < range[1];\n}\n\nfunction createBracketMatchRanges(\n firstPosition: Position | undefined,\n secondPosition: Position | undefined\n): [open: Range, close: Range] | undefined {\n if (firstPosition === undefined || secondPosition === undefined) {\n return;\n }\n return [\n createCharacterRange(firstPosition),\n createCharacterRange(secondPosition),\n ];\n}\n\nfunction createCharacterRange(position: Position): Range {\n return {\n start: { line: position.line, character: position.character },\n end: { line: position.line, character: position.character + 1 },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"matchBrackets.js","names":[],"sources":["../../src/editor/matchBrackets.ts"],"sourcesContent":["import type { TextDocument } from './textDocument';\nimport type { EditorTokenizer } from './tokenizer';\nimport type { Position, Range } from './types';\n\nconst OPEN_BRACKETS = new Map([\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n]);\n\nconst CLOSE_BRACKETS = new Map(\n [...OPEN_BRACKETS].map(([open, close]) => [close, open])\n);\n\nconst MAX_BRACKET_SCAN_LINES = 1_000;\nconst MAX_BRACKET_SCAN_CHARACTERS = 50_000;\n\ninterface BracketPosition extends Position {\n char: string;\n}\n\nexport function findBracketMatchRanges(\n textDocument: TextDocument,\n tokenizer: EditorTokenizer,\n position: Position\n): [open: Range, close: Range] | undefined {\n const bracketPosition = findAdjacentBracket(\n textDocument,\n tokenizer,\n textDocument.normalizePosition(position)\n );\n if (bracketPosition === undefined) {\n return undefined;\n }\n\n const closingBracket = OPEN_BRACKETS.get(bracketPosition.char);\n const openingBracket = CLOSE_BRACKETS.get(bracketPosition.char);\n if (closingBracket !== undefined) {\n const matchPosition = findClosingBracket(\n textDocument,\n tokenizer,\n bracketPosition,\n closingBracket\n );\n return createBracketMatchRanges(bracketPosition, matchPosition);\n }\n if (openingBracket !== undefined) {\n const matchPosition = findOpeningBracket(\n textDocument,\n tokenizer,\n bracketPosition,\n openingBracket\n );\n return createBracketMatchRanges(matchPosition, bracketPosition);\n }\n return undefined;\n}\n\nfunction findAdjacentBracket(\n textDocument: TextDocument,\n tokenizer: EditorTokenizer,\n position: Position\n): BracketPosition | undefined {\n const previousPosition = getPreviousCharacterPosition(position);\n if (previousPosition !== undefined) {\n const previousBracket = getBracketAtPosition(\n textDocument,\n tokenizer,\n previousPosition\n );\n if (previousBracket !== undefined) {\n return previousBracket;\n }\n }\n return getBracketAtPosition(textDocument, tokenizer, position);\n}\n\nfunction getPreviousCharacterPosition(\n position: Position\n): Position | undefined {\n if (position.character > 0) {\n return { line: position.line, character: position.character - 1 };\n }\n // Bracket adjacency is line-local: column-zero carets are not visually next to\n // the previous line's last character.\n return undefined;\n}\n\nfunction getBracketAtPosition(\n textDocument: TextDocument,\n tokenizer: EditorTokenizer,\n position: Position\n): BracketPosition | undefined {\n const lineText = textDocument.getLineText(position.line);\n const char = lineText[position.character];\n if (\n char === undefined ||\n (!OPEN_BRACKETS.has(char) && !CLOSE_BRACKETS.has(char)) ||\n isInIgnoredTokenRange(tokenizer, position)\n ) {\n return undefined;\n }\n return { ...position, char };\n}\n\nfunction findClosingBracket(\n textDocument: TextDocument,\n tokenizer: EditorTokenizer,\n bracketPosition: BracketPosition,\n closingBracket: string\n): BracketPosition | undefined {\n let depth = 0;\n let scannedLines = 0;\n let scannedCharacters = 0;\n for (let line = bracketPosition.line; line < textDocument.lineCount; line++) {\n if (scannedLines >= MAX_BRACKET_SCAN_LINES) {\n return undefined;\n }\n scannedLines++;\n const lineText = textDocument.getLineText(line);\n const ignoredRanges = tokenizer.getStringCommentRegexpRangesInLine(line);\n const ignoredRangeCursor = { index: 0 };\n const startCharacter =\n line === bracketPosition.line ? bracketPosition.character : 0;\n for (\n let character = startCharacter;\n character < lineText.length;\n character++\n ) {\n if (scannedCharacters >= MAX_BRACKET_SCAN_CHARACTERS) {\n return undefined;\n }\n scannedCharacters++;\n if (\n isCharacterIgnoredForward(ignoredRanges, character, ignoredRangeCursor)\n ) {\n continue;\n }\n const char = lineText[character];\n if (char === bracketPosition.char) {\n depth++;\n } else if (char === closingBracket) {\n depth--;\n if (depth === 0) {\n return { line, character, char };\n }\n }\n }\n }\n return undefined;\n}\n\nfunction findOpeningBracket(\n textDocument: TextDocument,\n tokenizer: EditorTokenizer,\n bracketPosition: BracketPosition,\n openingBracket: string\n): BracketPosition | undefined {\n let depth = 0;\n let scannedLines = 0;\n let scannedCharacters = 0;\n for (let line = bracketPosition.line; line >= 0; line--) {\n if (scannedLines >= MAX_BRACKET_SCAN_LINES) {\n return undefined;\n }\n scannedLines++;\n const lineText = textDocument.getLineText(line);\n const ignoredRanges = tokenizer.getStringCommentRegexpRangesInLine(line);\n const ignoredRangeCursor = {\n index: ignoredRanges === null ? -1 : ignoredRanges.length - 1,\n };\n const startCharacter =\n line === bracketPosition.line\n ? bracketPosition.character\n : lineText.length - 1;\n for (let character = startCharacter; character >= 0; character--) {\n if (scannedCharacters >= MAX_BRACKET_SCAN_CHARACTERS) {\n return undefined;\n }\n scannedCharacters++;\n if (\n isCharacterIgnoredBackward(ignoredRanges, character, ignoredRangeCursor)\n ) {\n continue;\n }\n const char = lineText[character];\n if (char === bracketPosition.char) {\n depth++;\n } else if (char === openingBracket) {\n depth--;\n if (depth === 0) {\n return { line, character, char };\n }\n }\n }\n }\n return undefined;\n}\n\nfunction isInIgnoredTokenRange(\n tokenizer: EditorTokenizer,\n position: Position\n): boolean {\n const ranges = tokenizer.getStringCommentRegexpRangesInLine(position.line);\n return isCharacterInIgnoredRanges(ranges, position.character);\n}\n\nfunction isCharacterInIgnoredRanges(\n ranges: [start: number, end: number][] | null,\n character: number\n): boolean {\n if (ranges === null) {\n return false;\n }\n for (const [start, end] of ranges) {\n if (character < start) {\n return false;\n }\n if (character < end) {\n return true;\n }\n }\n return false;\n}\n\nfunction isCharacterIgnoredForward(\n ranges: [start: number, end: number][] | null,\n character: number,\n cursor: { index: number }\n): boolean {\n if (ranges === null) {\n return false;\n }\n while (cursor.index < ranges.length && character >= ranges[cursor.index][1]) {\n cursor.index++;\n }\n const range = ranges[cursor.index];\n return range !== undefined && character >= range[0];\n}\n\nfunction isCharacterIgnoredBackward(\n ranges: [start: number, end: number][] | null,\n character: number,\n cursor: { index: number }\n): boolean {\n if (ranges === null) {\n return false;\n }\n while (cursor.index >= 0 && character < ranges[cursor.index][0]) {\n cursor.index--;\n }\n const range = ranges[cursor.index];\n return range !== undefined && character < range[1];\n}\n\nfunction createBracketMatchRanges(\n firstPosition: Position | undefined,\n secondPosition: Position | undefined\n): [open: Range, close: Range] | undefined {\n if (firstPosition === undefined || secondPosition === undefined) {\n return;\n }\n return [\n createCharacterRange(firstPosition),\n createCharacterRange(secondPosition),\n ];\n}\n\nfunction createCharacterRange(position: Position): Range {\n return {\n start: { line: position.line, character: position.character },\n end: { line: position.line, character: position.character + 1 },\n };\n}\n"],"mappings":";AAIA,MAAM,gCAAgB,IAAI,IAAI;CAC5B,CAAC,KAAK,GAAG;CACT,CAAC,KAAK,GAAG;CACT,CAAC,KAAK,GAAG;AACX,CAAC;AAED,MAAM,iBAAiB,IAAI,IACzB,CAAC,GAAG,aAAa,CAAC,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,OAAO,IAAI,CAAC,CACzD;AAEA,MAAM,yBAAyB;AAC/B,MAAM,8BAA8B;AAMpC,SAAgB,uBACd,cACA,WACA,UACyC;CACzC,MAAM,kBAAkB,oBACtB,cACA,WACA,aAAa,kBAAkB,QAAQ,CACzC;CACA,IAAI,oBAAoB,KAAA,GACtB;CAGF,MAAM,iBAAiB,cAAc,IAAI,gBAAgB,IAAI;CAC7D,MAAM,iBAAiB,eAAe,IAAI,gBAAgB,IAAI;CAC9D,IAAI,mBAAmB,KAAA,GAOrB,OAAO,yBAAyB,iBANV,mBACpB,cACA,WACA,iBACA,cAE2D,CAAC;CAEhE,IAAI,mBAAmB,KAAA,GAOrB,OAAO,yBANe,mBACpB,cACA,WACA,iBACA,cAE0C,GAAG,eAAe;AAGlE;AAEA,SAAS,oBACP,cACA,WACA,UAC6B;CAC7B,MAAM,mBAAmB,6BAA6B,QAAQ;CAC9D,IAAI,qBAAqB,KAAA,GAAW;EAClC,MAAM,kBAAkB,qBACtB,cACA,WACA,gBACF;EACA,IAAI,oBAAoB,KAAA,GACtB,OAAO;CAEX;CACA,OAAO,qBAAqB,cAAc,WAAW,QAAQ;AAC/D;AAEA,SAAS,6BACP,UACsB;CACtB,IAAI,SAAS,YAAY,GACvB,OAAO;EAAE,MAAM,SAAS;EAAM,WAAW,SAAS,YAAY;CAAE;AAKpE;AAEA,SAAS,qBACP,cACA,WACA,UAC6B;CAE7B,MAAM,OADW,aAAa,YAAY,SAAS,IAC/B,CAAC,CAAC,SAAS;CAC/B,IACE,SAAS,KAAA,KACR,CAAC,cAAc,IAAI,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI,KACrD,sBAAsB,WAAW,QAAQ,GAEzC;CAEF,OAAO;EAAE,GAAG;EAAU;CAAK;AAC7B;AAEA,SAAS,mBACP,cACA,WACA,iBACA,gBAC6B;CAC7B,IAAI,QAAQ;CACZ,IAAI,eAAe;CACnB,IAAI,oBAAoB;CACxB,KAAK,IAAI,OAAO,gBAAgB,MAAM,OAAO,aAAa,WAAW,QAAQ;EAC3E,IAAI,gBAAgB,wBAClB;EAEF;EACA,MAAM,WAAW,aAAa,YAAY,IAAI;EAC9C,MAAM,gBAAgB,UAAU,mCAAmC,IAAI;EACvE,MAAM,qBAAqB,EAAE,OAAO,EAAE;EACtC,MAAM,iBACJ,SAAS,gBAAgB,OAAO,gBAAgB,YAAY;EAC9D,KACE,IAAI,YAAY,gBAChB,YAAY,SAAS,QACrB,aACA;GACA,IAAI,qBAAqB,6BACvB;GAEF;GACA,IACE,0BAA0B,eAAe,WAAW,kBAAkB,GAEtE;GAEF,MAAM,OAAO,SAAS;GACtB,IAAI,SAAS,gBAAgB,MAC3B;QACK,IAAI,SAAS,gBAAgB;IAClC;IACA,IAAI,UAAU,GACZ,OAAO;KAAE;KAAM;KAAW;IAAK;GAEnC;EACF;CACF;AAEF;AAEA,SAAS,mBACP,cACA,WACA,iBACA,gBAC6B;CAC7B,IAAI,QAAQ;CACZ,IAAI,eAAe;CACnB,IAAI,oBAAoB;CACxB,KAAK,IAAI,OAAO,gBAAgB,MAAM,QAAQ,GAAG,QAAQ;EACvD,IAAI,gBAAgB,wBAClB;EAEF;EACA,MAAM,WAAW,aAAa,YAAY,IAAI;EAC9C,MAAM,gBAAgB,UAAU,mCAAmC,IAAI;EACvE,MAAM,qBAAqB,EACzB,OAAO,kBAAkB,OAAO,KAAK,cAAc,SAAS,EAC9D;EACA,MAAM,iBACJ,SAAS,gBAAgB,OACrB,gBAAgB,YAChB,SAAS,SAAS;EACxB,KAAK,IAAI,YAAY,gBAAgB,aAAa,GAAG,aAAa;GAChE,IAAI,qBAAqB,6BACvB;GAEF;GACA,IACE,2BAA2B,eAAe,WAAW,kBAAkB,GAEvE;GAEF,MAAM,OAAO,SAAS;GACtB,IAAI,SAAS,gBAAgB,MAC3B;QACK,IAAI,SAAS,gBAAgB;IAClC;IACA,IAAI,UAAU,GACZ,OAAO;KAAE;KAAM;KAAW;IAAK;GAEnC;EACF;CACF;AAEF;AAEA,SAAS,sBACP,WACA,UACS;CAET,OAAO,2BADQ,UAAU,mCAAmC,SAAS,IAC9B,GAAG,SAAS,SAAS;AAC9D;AAEA,SAAS,2BACP,QACA,WACS;CACT,IAAI,WAAW,MACb,OAAO;CAET,KAAK,MAAM,CAAC,OAAO,QAAQ,QAAQ;EACjC,IAAI,YAAY,OACd,OAAO;EAET,IAAI,YAAY,KACd,OAAO;CAEX;CACA,OAAO;AACT;AAEA,SAAS,0BACP,QACA,WACA,QACS;CACT,IAAI,WAAW,MACb,OAAO;CAET,OAAO,OAAO,QAAQ,OAAO,UAAU,aAAa,OAAO,OAAO,MAAM,CAAC,IACvE,OAAO;CAET,MAAM,QAAQ,OAAO,OAAO;CAC5B,OAAO,UAAU,KAAA,KAAa,aAAa,MAAM;AACnD;AAEA,SAAS,2BACP,QACA,WACA,QACS;CACT,IAAI,WAAW,MACb,OAAO;CAET,OAAO,OAAO,SAAS,KAAK,YAAY,OAAO,OAAO,MAAM,CAAC,IAC3D,OAAO;CAET,MAAM,QAAQ,OAAO,OAAO;CAC5B,OAAO,UAAU,KAAA,KAAa,YAAY,MAAM;AAClD;AAEA,SAAS,yBACP,eACA,gBACyC;CACzC,IAAI,kBAAkB,KAAA,KAAa,mBAAmB,KAAA,GACpD;CAEF,OAAO,CACL,qBAAqB,aAAa,GAClC,qBAAqB,cAAc,CACrC;AACF;AAEA,SAAS,qBAAqB,UAA2B;CACvD,OAAO;EACL,OAAO;GAAE,MAAM,SAAS;GAAM,WAAW,SAAS;EAAU;EAC5D,KAAK;GAAE,MAAM,SAAS;GAAM,WAAW,SAAS,YAAY;EAAE;CAChE;AACF"}
@@ -1,6 +1,5 @@
1
- import { Position, Range, ResolvedTextEdit } from "../types.js";
1
+ import { Position, Range, ResolvedTextEdit } from "./types.js";
2
2
  import { SearchParams } from "./searchPanel.js";
3
-
4
3
  //#region src/editor/pieceTable.d.ts
5
4
  /**
6
5
  * A piece table is a data structure that allows for efficient insertion and deletion of text.
@@ -1 +1 @@
1
- {"version":3,"file":"pieceTable.d.ts","names":[],"sources":["../../src/editor/pieceTable.ts"],"mappings":";;;;;;AAqHA;;;;;;;cAAa,UAAA;EAAA;EAiBX,WAAA,CAAY,YAAA;EAAA,IAQR,SAAA;EAIJ,OAAA,CAAQ,KAAA,GAAQ,KAAA;EAShB,WAAA,CAAY,IAAA,UAAc,gBAAA;EAkB1B,aAAA,CAAc,IAAA,UAAc,gBAAA;EAqC5B,YAAA,CAAa,KAAA,UAAe,GAAA,UAAa,OAAA;EAsCzC,MAAA,CAAO,MAAA;EAWP,QAAA,CAAS,MAAA;EA2BT,+BAAA,CACE,MAAA,UACA,QAAA,YAAoB,KAAA,UAAe,GAAA;EA0CrC,MAAA,CAAO,YAAA,EAAc,YAAA,IAAgB,KAAA,UAAe,GAAA;EAsFpD,MAAA,CAAO,IAAA,UAAc,MAAA;EASrB,MAAA,CAAO,MAAA,UAAgB,MAAA;EAavB,UAAA,CAAW,KAAA,WAAgB,gBAAA;EAiB3B,UAAA,CAAW,MAAA,WAAiB,QAAA;EAY5B,WAAA,CAAY,OAAA,sBAA6B,QAAA;EAgBzC,QAAA,CAAS,QAAA,EAAU,QAAA;AAAA;;;;;iBA6qBL,0BAAA,CACd,UAAA,GAAa,MAAA,aAAmB,QAAA,EAChC,QAAA,GAAW,QAAA,EAAU,QAAA,aACrB,WAAA,GAAc,IAAA,qBACd,YAAA,EAAc,YAAA,EACd,UAAA,UACA,QAAA"}
1
+ {"version":3,"file":"pieceTable.d.ts","names":[],"sources":["../../src/editor/pieceTable.ts"],"mappings":";;;;;;;;;;;;cAqHa;;EAiBX,YAAY;MAQR;EAIJ,QAAQ,QAAQ;EAShB,YAAY,cAAc;EAkB1B,cAAc,cAAc;EAqC5B,aAAa,eAAe,aAAa;EAsCzC,OAAO;EAWP,SAAS;EA2BT,gCACE,gBACA,oBAAoB,eAAe;EA0CrC,OAAO,cAAc,gBAAgB,eAAe;EAsFpD,OAAO,cAAc;EASrB,OAAO,gBAAgB;EAavB,WAAW,gBAAgB;EAiB3B,WAAW,iBAAiB;EAY5B,YAAY,6BAA6B;EAgBzC,SAAS,UAAU;;;;;;iBA6qBL,2BACd,aAAa,mBAAmB,UAChC,WAAW,UAAU,qBACrB,cAAc,yBACd,cAAc,cACd,oBACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"pieceTable.js","names":["#original","#createPiece","#root","#createNode","#length","#lineCount","#textFromPieces","#lastVisitedLine","#getLineOffset","#lastVisitedLineLength","#findPieceAtOffset","#bufferFor","#nextNode","#forEachPieceSegment","#collectSearchMatchesLineByLine","#replaceRangeIncremental","#invalidateCaches","#lineAtOffset","#lineBreakOffset","#lastPosition","#pieceLineBreakOffset","#walk","#add","#split","#dropPrefix","#mergeNodes","#appendCoalescing","#popLeftmost","#priorityState","#nextPriority","#setLeft","#setRight"],"sources":["../../src/editor/pieceTable.ts"],"sourcesContent":["import type { Position, Range, ResolvedTextEdit } from '../types';\nimport { computeLineOffsets } from '../utils/computeFileOffsets';\nimport type { SearchParams } from './searchPanel';\n\nconst MAX_FIND_MATCHES = 100000;\nconst LINE_FEED = 10;\nconst CARRIAGE_RETURN = 13;\n// TODO(ije): use Intl.Segmenter instead of regex for word separators\nconst WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?' as const;\n\n// A piece is a segment of text that is either original or added.\nclass Piece {\n static Original = 0;\n static Added = 1;\n\n constructor(\n public readonly source: number,\n public readonly offset: number,\n public readonly length: number,\n public readonly lineOffsetStart: number,\n public readonly lineOffsetEnd: number,\n public readonly hasVirtualTrailingCRBreak: boolean,\n public readonly firstCharCode: number,\n public readonly lastCharCode: number\n ) {}\n\n // A slice ending between a backing-buffer CRLF needs its own lone-CR break\n // until the tree reconnects it to a piece beginning with LF.\n get lineBreakCount(): number {\n return (\n this.lineOffsetEnd -\n this.lineOffsetStart +\n (this.hasVirtualTrailingCRBreak ? 1 : 0)\n );\n }\n}\n\n// A text buffer is a string with its line offsets.\nclass TextBuffer {\n lineOffsets: number[];\n\n constructor(public text: string) {\n this.lineOffsets = computeLineOffsets(text);\n }\n\n // the append operation is efficient because it only appends\n // elements to the lineOffsets array in the end\n append(text: string): number {\n const offset = this.text.length;\n for (let i = 0; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n if (charCode !== LINE_FEED && charCode !== CARRIAGE_RETURN) {\n continue;\n }\n if (\n charCode === CARRIAGE_RETURN &&\n text.charCodeAt(i + 1) === LINE_FEED\n ) {\n i++;\n }\n this.lineOffsets.push(offset + i + 1);\n }\n this.text += text;\n return offset;\n }\n}\n\n// A node in the balanced piece tree. `priority` keeps the tree balanced as a\n// treap (see PieceTable): the tree is a max-heap on priority while staying a\n// binary search tree on document offset.\nclass PieceNode {\n left: PieceNode | null = null;\n right: PieceNode | null = null;\n parent: PieceNode | null = null;\n priority = 0;\n\n constructor(\n public piece: Piece,\n public subtreeLength: number = piece.length,\n public subtreeLineBreakCount: number = piece.lineBreakCount,\n public subtreeFirstCharCode: number = piece.firstCharCode,\n public subtreeLastCharCode: number = piece.lastCharCode\n ) {}\n\n updateSubtreeLength(): void {\n this.subtreeLength =\n (this.left?.subtreeLength ?? 0) +\n this.piece.length +\n (this.right?.subtreeLength ?? 0);\n // Pieces count their edge characters in isolation. Collapse a CRLF only\n // when the two characters are actually adjacent in this subtree.\n this.subtreeLineBreakCount =\n (this.left?.subtreeLineBreakCount ?? 0) +\n this.piece.lineBreakCount +\n (this.right?.subtreeLineBreakCount ?? 0) -\n (formsCRLF(this.left?.subtreeLastCharCode, this.piece.firstCharCode)\n ? 1\n : 0) -\n (formsCRLF(this.piece.lastCharCode, this.right?.subtreeFirstCharCode)\n ? 1\n : 0);\n this.subtreeFirstCharCode =\n this.left?.subtreeFirstCharCode ?? this.piece.firstCharCode;\n this.subtreeLastCharCode =\n this.right?.subtreeLastCharCode ?? this.piece.lastCharCode;\n }\n}\n\n/**\n * A piece table is a data structure that allows for efficient insertion and deletion of text.\n * It is a tree of pieces, where each piece is a segment of text that is either original or added.\n * The tree is a treap (a binary search tree that also keeps each node's random priority in heap\n * order, which keeps the tree balanced without an explicit rebalancing pass). Each edit reshapes\n * only the nodes along one root-to-leaf path via split and merge in O(log P), instead of\n * rebuilding all P pieces.\n * Inspired by https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation\n */\nexport class PieceTable {\n #original: TextBuffer;\n #add = new TextBuffer('');\n #root: PieceNode | null = null;\n #length = 0;\n #lineCount = 0;\n #lastVisitedLine: [number, boolean, string] | null = null;\n #lastVisitedLineLength: [number, boolean, number] | null = null;\n // Exact inverse of the latest positionAt lookup; edits invalidate it.\n #lastPosition: [line: number, character: number, offset: number] | null =\n null;\n // Seeds the treap priorities. 0x9e3779b9 is the 32-bit golden-ratio\n // constant (2^32 / phi), a well-mixed value commonly used to seed hashes\n // and PRNGs; any fixed nonzero seed works here. A fixed seed keeps the\n // tree shape, and thus performance, deterministic across runs.\n #priorityState = 0x9e3779b9;\n\n constructor(originalText: string) {\n this.#original = new TextBuffer(originalText);\n const piece = this.#createPiece(Piece.Original, 0, originalText.length);\n this.#root = piece.length > 0 ? this.#createNode(piece) : null;\n this.#length = this.#root?.subtreeLength ?? 0;\n this.#lineCount = (this.#root?.subtreeLineBreakCount ?? 0) + 1;\n }\n\n get lineCount(): number {\n return this.#lineCount;\n }\n\n getText(range?: Range): string {\n if (range === undefined) {\n return this.#textFromPieces();\n }\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this.getTextSlice(start, end);\n }\n\n getLineText(line: number, includeLineBreak = false): string {\n if (\n this.#lastVisitedLine !== null &&\n this.#lastVisitedLine[0] === line &&\n this.#lastVisitedLine[1] === includeLineBreak\n ) {\n return this.#lastVisitedLine[2];\n }\n const offset = this.#getLineOffset(line);\n if (offset === undefined) {\n throw new Error(`Line index out of range: ${line}`);\n }\n const text = this.getTextSlice(offset[0], offset[1], !includeLineBreak);\n this.#lastVisitedLine = [line, includeLineBreak, text];\n this.#lastVisitedLineLength = [line, includeLineBreak, text.length];\n return text;\n }\n\n getLineLength(line: number, includeLineBreak = false): number {\n const lastVisitedLineLength = this.#lastVisitedLineLength;\n const lastVisitedLine = this.#lastVisitedLine;\n if (\n lastVisitedLineLength !== null &&\n lastVisitedLineLength[0] === line &&\n lastVisitedLineLength[1] === includeLineBreak\n ) {\n return lastVisitedLineLength[2];\n }\n if (\n lastVisitedLine !== null &&\n lastVisitedLine[0] === line &&\n lastVisitedLine[1] === includeLineBreak\n ) {\n const length = lastVisitedLine[2].length;\n this.#lastVisitedLineLength = [line, includeLineBreak, length];\n return length;\n }\n const offset = this.#getLineOffset(line);\n if (offset === undefined) {\n throw new Error(`Line index out of range: ${line}`);\n }\n const [start, end] = offset;\n let length = end - start;\n if (!includeLineBreak) {\n while (\n length > 0 &&\n isEOL(this.charAt(start + length - 1).charCodeAt(0))\n ) {\n length--;\n }\n }\n this.#lastVisitedLineLength = [line, includeLineBreak, length];\n return length;\n }\n\n getTextSlice(start: number, end: number, trimEOF = false): string {\n if (start >= end) {\n return '';\n }\n\n const sliceStart = clamp(start, 0, this.#length);\n const sliceEnd = clamp(end, sliceStart, this.#length);\n if (sliceStart >= sliceEnd) {\n return '';\n }\n\n const location = this.#findPieceAtOffset(sliceStart);\n if (location === undefined) {\n return '';\n }\n\n const chunks: string[] = [];\n let [node, offsetInPiece] = location as [PieceNode | null, number];\n let remaining = sliceEnd - sliceStart;\n while (node !== null && remaining > 0) {\n const takeLength = Math.min(node.piece.length - offsetInPiece, remaining);\n const buffer = this.#bufferFor(node.piece.source);\n const start = node.piece.offset + offsetInPiece;\n let end = start + takeLength;\n if (trimEOF) {\n while (end > start && isEOL(buffer.text.charCodeAt(end - 1))) {\n end--;\n }\n }\n chunks.push(buffer.text.slice(start, end));\n remaining -= takeLength;\n offsetInPiece = 0;\n node = this.#nextNode(node);\n }\n\n return chunks.join('');\n }\n\n charAt(offset: number): string {\n const location = this.#findPieceAtOffset(offset);\n if (location === undefined) {\n return '';\n }\n\n const [node, offsetInPiece] = location;\n const buffer = this.#bufferFor(node.piece.source);\n return buffer.text.charAt(node.piece.offset + offsetInPiece);\n }\n\n includes(needle: string): boolean {\n if (needle.length === 0) {\n return true;\n }\n\n const prefixTable = createPrefixTable(needle);\n let matched = 0;\n let found = false;\n this.#forEachPieceSegment((segment) => {\n for (let offset = segment.start; offset < segment.end; offset++) {\n const charCode = segment.text.charCodeAt(offset);\n while (matched > 0 && charCode !== needle.charCodeAt(matched)) {\n matched = prefixTable[matched - 1];\n }\n if (charCode === needle.charCodeAt(matched)) {\n matched++;\n }\n if (matched === needle.length) {\n found = true;\n return false;\n }\n }\n return true;\n });\n return found;\n }\n\n findNextNonOverlappingSubstring(\n needle: string,\n occupied: readonly [start: number, end: number][]\n ): number | undefined {\n if (needle.length === 0 || needle.length > this.#length) {\n return undefined;\n }\n\n const ranges = normalizeRanges(occupied, this.#length);\n const pivot = ranges.reduce((max, [, end]) => Math.max(max, end), 0);\n const prefixTable = createPrefixTable(needle);\n let matched = 0;\n let documentOffset = 0;\n let wrappedOffset: number | undefined;\n let foundOffset: number | undefined;\n\n this.#forEachPieceSegment((segment) => {\n for (let offset = segment.start; offset < segment.end; offset++) {\n const charCode = segment.text.charCodeAt(offset);\n while (matched > 0 && charCode !== needle.charCodeAt(matched)) {\n matched = prefixTable[matched - 1];\n }\n if (charCode === needle.charCodeAt(matched)) {\n matched++;\n }\n if (matched === needle.length) {\n const start = documentOffset - needle.length + 1;\n if (!rangeOverlaps(ranges, start, start + needle.length)) {\n if (start >= pivot) {\n foundOffset = start;\n return false;\n }\n wrappedOffset ??= start;\n }\n matched = prefixTable[matched - 1];\n }\n documentOffset++;\n }\n return true;\n });\n\n return foundOffset ?? wrappedOffset;\n }\n\n search(searchParams: SearchParams): [start: number, end: number][] {\n if (searchParams.text.length === 0 || this.#length === 0) {\n return [];\n }\n\n // Search currently operates line-by-line, so newline-spanning patterns are unsupported.\n if (\n searchParams.text.includes('\\n') ||\n searchParams.text.includes('\\r') ||\n (searchParams.regex &&\n (searchParams.text.includes('\\\\n') ||\n searchParams.text.includes('\\\\r')))\n ) {\n return [];\n }\n\n let pattern: RegExp;\n try {\n pattern = compileSearchRegExp(\n searchParams.text,\n searchParams.regex,\n searchParams.caseSensitive\n );\n } catch {\n return [];\n }\n\n return this.#collectSearchMatchesLineByLine(\n pattern,\n searchParams.wholeWord,\n MAX_FIND_MATCHES\n );\n }\n\n #collectSearchMatchesLineByLine(\n pattern: RegExp,\n wholeWord: boolean,\n limit: number\n ): [number, number][] {\n const out: [number, number][] = [];\n // Search visits the whole document, so flatten it once instead of making\n // several treap descents for every line and whole-word boundary.\n const documentText = this.#textFromPieces();\n const docLength = documentText.length;\n const lineOffsets = computeLineOffsets(documentText);\n\n // Reuse the single compiled pattern across every line, resetting its\n // lastIndex before each line, instead of allocating a fresh RegExp per\n // line. The pattern is global, so lastIndex tracks progress within a line.\n for (let line = 0; line < lineOffsets.length; line++) {\n const lineStart = lineOffsets[line];\n let lineEnd = lineOffsets[line + 1] ?? docLength;\n while (\n lineEnd > lineStart &&\n isEOL(documentText.charCodeAt(lineEnd - 1))\n ) {\n lineEnd--;\n }\n const lineText = documentText.slice(lineStart, lineEnd);\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(lineText)) !== null) {\n const rel = match.index;\n const fragment = match[0];\n if (fragment.length === 0) {\n pattern.lastIndex = advancePastEmptyMatch(lineText, rel);\n continue;\n }\n const docStart = lineStart + rel;\n if (\n !wholeWord ||\n isWholeWordAtDocOffsets(documentText, docStart, fragment.length)\n ) {\n out.push([docStart, docStart + fragment.length]);\n if (out.length >= limit) {\n return out;\n }\n }\n if (rel === pattern.lastIndex) {\n pattern.lastIndex = advancePastEmptyMatch(lineText, rel);\n }\n }\n }\n return out;\n }\n\n insert(text: string, offset: number): void {\n if (text.length === 0) {\n return;\n }\n const start = clamp(offset, 0, this.#length);\n this.#replaceRangeIncremental(start, start, text);\n this.#invalidateCaches();\n }\n\n delete(offset: number, length: number): void {\n if (length <= 0 || this.#length === 0) {\n return;\n }\n const start = clamp(offset, 0, this.#length);\n const end = clamp(start + length, start, this.#length);\n if (start === end) {\n return;\n }\n this.#replaceRangeIncremental(start, end, '');\n this.#invalidateCaches();\n }\n\n applyEdits(edits: readonly ResolvedTextEdit[]): void {\n if (edits.length === 0) {\n return;\n }\n // Edits arrive sorted ascending and non-overlapping (TextDocument enforces\n // this). Applying them from last to first keeps each remaining edit's\n // offsets valid, since edits at higher offsets never shift lower ones, and\n // every edit becomes an O(log P) incremental replace.\n for (let i = edits.length - 1; i >= 0; i--) {\n const edit = edits[i];\n const start = clamp(edit.start, 0, this.#length);\n const end = clamp(edit.end, start, this.#length);\n this.#replaceRangeIncremental(start, end, edit.text);\n }\n this.#invalidateCaches();\n }\n\n positionAt(offset: number): Position {\n const clampedOffset = clamp(offset, 0, this.#length);\n if (this.#length === 0) {\n return { line: 0, character: 0 };\n }\n const line = this.#lineAtOffset(clampedOffset);\n const lineStart = line === 0 ? 0 : this.#lineBreakOffset(line - 1);\n const character = clampedOffset - lineStart;\n this.#lastPosition = [line, character, clampedOffset];\n return { line, character };\n }\n\n positionsAt(offsets: readonly number[]): Position[] {\n const positions: Position[] = Array.from({ length: offsets.length });\n if (offsets.length === 0) {\n return positions;\n }\n if (this.#length === 0) {\n return positions.fill({ line: 0, character: 0 });\n }\n\n for (let i = 0; i < offsets.length; i++) {\n positions[i] = this.positionAt(offsets[i]);\n }\n\n return positions;\n }\n\n offsetAt(position: Position): number {\n if (position.line < 0 || this.#length === 0) {\n return 0;\n }\n if (position.line >= this.#lineCount) {\n throw new Error(`Line index out of range: ${position.line}`);\n }\n const lastPosition = this.#lastPosition;\n if (\n lastPosition !== null &&\n lastPosition[0] === position.line &&\n lastPosition[1] === position.character\n ) {\n return lastPosition[2];\n }\n const offset = this.#getLineOffset(position.line);\n if (offset === undefined) {\n throw new Error(`Line index out of range: ${position.line}`);\n }\n const character = clamp(position.character, 0, offset[1] - offset[0]);\n return offset[0] + character;\n }\n\n #findPieceAtOffset(\n offset: number\n ): [node: PieceNode, offsetInPiece: number] | undefined {\n if (offset < 0 || offset >= this.#length) {\n return undefined;\n }\n\n let node = this.#root;\n let remaining = offset;\n while (node !== null) {\n const leftLength = node.left?.subtreeLength ?? 0;\n if (remaining < leftLength) {\n node = node.left;\n continue;\n }\n\n remaining -= leftLength;\n if (remaining < node.piece.length) {\n return [node, remaining];\n }\n\n remaining -= node.piece.length;\n node = node.right;\n }\n\n return undefined;\n }\n\n #nextNode(node: PieceNode): PieceNode | null {\n if (node.right !== null) {\n let next = node.right;\n while (next.left !== null) {\n next = next.left;\n }\n return next;\n }\n\n let current = node;\n while (current.parent !== null && current === current.parent.right) {\n current = current.parent;\n }\n return current.parent;\n }\n\n #getLineOffset(line: number): [start: number, end: number] | undefined {\n if (line < 0) {\n throw new Error(`Line index out of range: ${line}`);\n }\n if (this.#length === 0) {\n if (line === 0) {\n return [0, 0];\n }\n throw new Error(`Line index out of range: ${line}`);\n }\n if (line >= this.#lineCount) {\n throw new Error(`Line index out of range: ${line}`);\n }\n\n const start = line === 0 ? 0 : this.#lineBreakOffset(line - 1);\n const end =\n line < this.#lineCount - 1 ? this.#lineBreakOffset(line) : this.#length;\n return [start, end];\n }\n\n #lineAtOffset(offset: number): number {\n let node = this.#root;\n let remaining = clamp(offset, 0, this.#length);\n let line = 0;\n\n while (node !== null) {\n const leftLength = node.left?.subtreeLength ?? 0;\n if (remaining < leftLength) {\n node = node.left;\n continue;\n }\n\n line +=\n (node.left?.subtreeLineBreakCount ?? 0) -\n (formsCRLF(node.left?.subtreeLastCharCode, node.piece.firstCharCode)\n ? 1\n : 0);\n remaining -= leftLength;\n if (remaining <= node.piece.length) {\n const buffer = this.#bufferFor(node.piece.source);\n const lineOffsetEnd = Math.min(\n upperBound(buffer.lineOffsets, node.piece.offset + remaining),\n node.piece.lineOffsetEnd\n );\n line += lineOffsetEnd - node.piece.lineOffsetStart;\n if (\n remaining === node.piece.length &&\n node.piece.hasVirtualTrailingCRBreak\n ) {\n line++;\n }\n if (\n remaining === node.piece.length &&\n formsCRLF(\n node.piece.lastCharCode,\n this.#nextNode(node)?.piece.firstCharCode\n )\n ) {\n line--;\n }\n return line;\n }\n\n line +=\n node.piece.lineBreakCount -\n (formsCRLF(node.piece.lastCharCode, node.right?.subtreeFirstCharCode)\n ? 1\n : 0);\n remaining -= node.piece.length;\n node = node.right;\n }\n\n return this.#lineCount - 1;\n }\n\n #lineBreakOffset(lineBreakIndex: number): number {\n let node = this.#root;\n let remaining = lineBreakIndex;\n let documentOffset = 0;\n let followingCharCode: number | undefined;\n\n while (node !== null) {\n const leftLineBreakCount =\n (node.left?.subtreeLineBreakCount ?? 0) -\n (formsCRLF(node.left?.subtreeLastCharCode, node.piece.firstCharCode)\n ? 1\n : 0);\n if (remaining < leftLineBreakCount) {\n followingCharCode = node.piece.firstCharCode;\n node = node.left;\n continue;\n }\n\n const leftLength = node.left?.subtreeLength ?? 0;\n documentOffset += leftLength;\n remaining -= leftLineBreakCount;\n\n const nextCharCode =\n node.right?.subtreeFirstCharCode ?? followingCharCode;\n const pieceLineBreakCount =\n node.piece.lineBreakCount -\n (formsCRLF(node.piece.lastCharCode, nextCharCode) ? 1 : 0);\n if (remaining < pieceLineBreakCount) {\n return (\n documentOffset + this.#pieceLineBreakOffset(node.piece, remaining)\n );\n }\n\n documentOffset += node.piece.length;\n remaining -= pieceLineBreakCount;\n node = node.right;\n }\n\n return this.#length;\n }\n\n #pieceLineBreakOffset(piece: Piece, lineBreakIndex: number): number {\n const bufferLineBreakCount = piece.lineOffsetEnd - piece.lineOffsetStart;\n if (lineBreakIndex < bufferLineBreakCount) {\n const bufferLineOffset = this.#bufferFor(piece.source).lineOffsets[\n piece.lineOffsetStart + lineBreakIndex\n ];\n return bufferLineOffset - piece.offset;\n }\n return piece.length;\n }\n\n #textFromPieces(): string {\n const chunks: string[] = [];\n this.#forEachPieceSegment((segment) => {\n chunks.push(segment.text.slice(segment.start, segment.end));\n });\n return chunks.join('');\n }\n\n #forEachPieceSegment(\n callback: (segment: {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n readonly lineOffsets: number[];\n readonly lineOffsetStart: number;\n readonly lineOffsetEnd: number;\n }) => boolean | void\n ): void {\n this.#walk(this.#root, (node) => {\n const buffer = this.#bufferFor(node.piece.source);\n return callback({\n text: buffer.text,\n lineOffsets: buffer.lineOffsets,\n lineOffsetStart: node.piece.lineOffsetStart,\n lineOffsetEnd: node.piece.lineOffsetEnd,\n start: node.piece.offset,\n end: node.piece.offset + node.piece.length,\n });\n });\n }\n\n #bufferFor(source: number): TextBuffer {\n return source === Piece.Original ? this.#original : this.#add;\n }\n\n #createPiece(source: number, offset: number, length: number): Piece {\n const buffer = this.#bufferFor(source);\n const end = offset + length;\n const lineOffsetStart = upperBound(buffer.lineOffsets, offset);\n const lineOffsetEnd = upperBound(buffer.lineOffsets, end);\n const lastCharCode = buffer.text.charCodeAt(end - 1);\n return new Piece(\n source,\n offset,\n length,\n lineOffsetStart,\n lineOffsetEnd,\n lastCharCode === CARRIAGE_RETURN &&\n buffer.lineOffsets[lineOffsetEnd - 1] !== end,\n buffer.text.charCodeAt(offset),\n lastCharCode\n );\n }\n\n // Replaces document range [start, end) with `text` by splitting at the start,\n // dropping the deleted prefix from the remainder, and joining the inserted\n // piece back in. Each tree operation touches only one root-to-leaf path, so\n // the edit is O(log P) instead of rebuilding all P pieces. `start`/`end` must\n // be clamped into [0, length] with start <= end.\n #replaceRangeIncremental(start: number, end: number, text: string): void {\n if (start === end && text.length === 0) {\n return;\n }\n\n const [left, rest] = this.#split(this.#root, start);\n const right = this.#dropPrefix(rest, end - start);\n\n let root: PieceNode | null;\n if (text.length > 0) {\n const insertedPiece = this.#createPiece(\n Piece.Added,\n this.#add.append(text),\n text.length\n );\n // The inserted text is fresh at the end of the add buffer, so it can only\n // sit next to the piece on its left, never the one on its right.\n root = this.#mergeNodes(\n this.#appendCoalescing(left, insertedPiece),\n right\n );\n } else {\n // Pure deletion: the pieces now meeting at the seam may be contiguous in\n // the same buffer, so re-attach the right side's first piece through the\n // coalescing append to merge them when possible.\n const [seamPiece, restRight] = this.#popLeftmost(right);\n root =\n seamPiece === undefined\n ? left\n : this.#mergeNodes(\n this.#appendCoalescing(left, seamPiece),\n restRight\n );\n }\n\n if (root !== null) {\n root.parent = null;\n }\n this.#root = root;\n this.#length = root?.subtreeLength ?? 0;\n this.#lineCount = (root?.subtreeLineBreakCount ?? 0) + 1;\n }\n\n // Public mutations clear read caches once, including multi-edit batches.\n #invalidateCaches(): void {\n this.#lastVisitedLine = null;\n this.#lastVisitedLineLength = null;\n this.#lastPosition = null;\n }\n\n #nextPriority(): number {\n this.#priorityState =\n (Math.imul(this.#priorityState, 1664525) + 1013904223) >>> 0;\n return this.#priorityState;\n }\n\n #createNode(piece: Piece): PieceNode {\n const node = new PieceNode(piece);\n node.priority = this.#nextPriority();\n return node;\n }\n\n // Attaches `child` as a side of `node`, keeping the parent pointer in sync so\n // read-side iteration (#nextNode) can still walk back up the tree.\n #setLeft(node: PieceNode, child: PieceNode | null): void {\n node.left = child;\n if (child !== null) {\n child.parent = node;\n }\n }\n\n #setRight(node: PieceNode, child: PieceNode | null): void {\n node.right = child;\n if (child !== null) {\n child.parent = node;\n }\n }\n\n // Splits the subtree into [0, offset) and [offset, length). When the offset\n // falls inside a piece, that piece is sliced in two so the split lands on a\n // clean boundary. Internal parent pointers stay correct; the caller fixes the\n // returned roots' own parents when it reattaches or stores them.\n #split(\n node: PieceNode | null,\n offset: number\n ): [left: PieceNode | null, right: PieceNode | null] {\n if (node === null) {\n return [null, null];\n }\n if (offset <= 0) {\n return [null, node];\n }\n if (offset >= node.subtreeLength) {\n return [node, null];\n }\n\n const leftLength = node.left?.subtreeLength ?? 0;\n if (offset <= leftLength) {\n const [left, right] = this.#split(node.left, offset);\n this.#setLeft(node, right);\n node.updateSubtreeLength();\n return [left, node];\n }\n\n const pieceLength = node.piece.length;\n if (offset >= leftLength + pieceLength) {\n const [left, right] = this.#split(\n node.right,\n offset - leftLength - pieceLength\n );\n this.#setRight(node, left);\n node.updateSubtreeLength();\n return [node, right];\n }\n\n // The offset is strictly inside this node's piece: slice it in two. Both\n // halves inherit this node's priority, which keeps the heap valid because\n // this node already outranked both of its children.\n const inPiece = offset - leftLength;\n const leftNode = new PieceNode(\n this.#createPiece(node.piece.source, node.piece.offset, inPiece)\n );\n const rightNode = new PieceNode(\n this.#createPiece(\n node.piece.source,\n node.piece.offset + inPiece,\n pieceLength - inPiece\n )\n );\n leftNode.priority = node.priority;\n rightNode.priority = node.priority;\n this.#setLeft(leftNode, node.left);\n this.#setRight(rightNode, node.right);\n leftNode.updateSubtreeLength();\n rightNode.updateSubtreeLength();\n return [leftNode, rightNode];\n }\n\n // Discards [0, offset), allocating only the surviving half of a cut piece.\n #dropPrefix(node: PieceNode | null, offset: number): PieceNode | null {\n if (node === null || offset >= node.subtreeLength) {\n return null;\n }\n if (offset <= 0) {\n return node;\n }\n\n const leftLength = node.left?.subtreeLength ?? 0;\n if (offset <= leftLength) {\n this.#setLeft(node, this.#dropPrefix(node.left, offset));\n node.updateSubtreeLength();\n return node;\n }\n\n const pieceEnd = leftLength + node.piece.length;\n if (offset >= pieceEnd) {\n return this.#dropPrefix(node.right, offset - pieceEnd);\n }\n\n const inPiece = offset - leftLength;\n const rightNode = new PieceNode(\n this.#createPiece(\n node.piece.source,\n node.piece.offset + inPiece,\n node.piece.length - inPiece\n )\n );\n rightNode.priority = node.priority;\n this.#setRight(rightNode, node.right);\n rightNode.updateSubtreeLength();\n return rightNode;\n }\n\n // Joins two subtrees where every offset in `left` precedes every offset in\n // `right`, taking the higher-priority root so the result stays balanced.\n #mergeNodes(\n left: PieceNode | null,\n right: PieceNode | null\n ): PieceNode | null {\n if (left === null) {\n return right;\n }\n if (right === null) {\n return left;\n }\n if (left.priority >= right.priority) {\n this.#setRight(left, this.#mergeNodes(left.right, right));\n left.updateSubtreeLength();\n return left;\n }\n this.#setLeft(right, this.#mergeNodes(left, right.left));\n right.updateSubtreeLength();\n return right;\n }\n\n // Appends `piece` after every node in `tree`. Compatible adjacent pieces in\n // the same buffer are merged in place, keeping sequential typing compact.\n #appendCoalescing(tree: PieceNode | null, piece: Piece): PieceNode {\n if (tree === null) {\n return this.#createNode(piece);\n }\n let last = tree;\n while (last.right !== null) {\n last = last.right;\n }\n if (canCoalescePieces(last.piece, piece)) {\n last.piece = coalesceTwoPieces(last.piece, piece);\n // The last piece grew, so refresh aggregates from it up to the root.\n for (let node: PieceNode | null = last; node !== null; ) {\n node.updateSubtreeLength();\n if (node === tree) {\n break;\n }\n node = node.parent;\n }\n return tree;\n }\n // `tree` is non-null here, so merging in the new node always yields a node.\n return this.#mergeNodes(tree, this.#createNode(piece)) as PieceNode;\n }\n\n // Removes and returns the first piece of the tree along with the remaining\n // tree, so a deletion seam can re-merge the piece that becomes adjacent to\n // the one on the other side of the deletion.\n #popLeftmost(\n tree: PieceNode | null\n ): [piece: Piece | undefined, rest: PieceNode | null] {\n if (tree === null) {\n return [undefined, null];\n }\n if (tree.left === null) {\n return [tree.piece, tree.right];\n }\n const [piece, newLeft] = this.#popLeftmost(tree.left);\n this.#setLeft(tree, newLeft);\n tree.updateSubtreeLength();\n return [piece, tree];\n }\n\n #walk(\n node: PieceNode | null,\n visit: (node: PieceNode) => boolean | void\n ): boolean {\n if (node === null) {\n return true;\n }\n if (!this.#walk(node.left, visit)) {\n return false;\n }\n if (visit(node) === false) {\n return false;\n }\n return this.#walk(node.right, visit);\n }\n}\n\nfunction isEOL(charCode: number): boolean {\n return charCode === /* \\n */ 10 || charCode === /* \\r */ 13;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction createPrefixTable(text: string): number[] {\n const table = Array.from<number>({ length: text.length }).fill(0);\n let matched = 0;\n for (let i = 1; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n while (matched > 0 && charCode !== text.charCodeAt(matched)) {\n matched = table[matched - 1];\n }\n if (charCode === text.charCodeAt(matched)) {\n matched++;\n }\n table[i] = matched;\n }\n return table;\n}\n\nfunction normalizeRanges(\n ranges: readonly [start: number, end: number][],\n length: number\n): [start: number, end: number][] {\n const normalized: [start: number, end: number][] = [];\n for (const [rawStart, rawEnd] of ranges) {\n const start = clamp(rawStart, 0, length);\n const end = clamp(rawEnd, start, length);\n if (start < end) {\n normalized.push([start, end]);\n }\n }\n normalized.sort((a, b) => a[0] - b[0]);\n\n const merged: [start: number, end: number][] = [];\n for (const range of normalized) {\n const previous = merged[merged.length - 1];\n if (previous !== undefined && range[0] <= previous[1]) {\n previous[1] = Math.max(previous[1], range[1]);\n continue;\n }\n merged.push(range);\n }\n return merged;\n}\n\nfunction rangeOverlaps(\n ranges: readonly [start: number, end: number][],\n start: number,\n end: number\n): boolean {\n let low = 0;\n let high = ranges.length;\n while (low < high) {\n const mid = low + Math.floor((high - low) / 2);\n if (ranges[mid][1] <= start) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n const range = ranges[low];\n return range !== undefined && range[0] < end;\n}\n\n// CRLF seams stay explicit because separately appended buffer chunks may each\n// record a break there; the tree aggregate reconciles the document-level pair.\nfunction canCoalescePieces(prev: Piece, next: Piece): boolean {\n return (\n prev.source === next.source &&\n prev.offset + prev.length === next.offset &&\n !formsCRLF(prev.lastCharCode, next.firstCharCode)\n );\n}\n\n// Joins two adjacent pieces (see canCoalescePieces) into one. Keeping the table\n// compact after every edit is what stops the piece count from growing without\n// bound during normal typing.\nfunction coalesceTwoPieces(prev: Piece, next: Piece): Piece {\n return new Piece(\n prev.source,\n prev.offset,\n prev.length + next.length,\n prev.lineOffsetStart,\n next.lineOffsetEnd,\n next.hasVirtualTrailingCRBreak,\n prev.firstCharCode,\n next.lastCharCode\n );\n}\n\nfunction formsCRLF(\n leftCharCode: number | undefined,\n rightCharCode: number | undefined\n): boolean {\n return leftCharCode === CARRIAGE_RETURN && rightCharCode === LINE_FEED;\n}\n\n// Returns the index of the first element in the array that is greater than the target.\nfunction upperBound(values: number[], target: number): number {\n let lo = 0;\n let hi = values.length;\n while (lo < hi) {\n const mid = lo + Math.floor((hi - lo) / 2);\n if (values[mid] <= target) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction isWordSeparatorCharCode(charCode: number): boolean {\n if (charCode <= 32 || charCode === 127) {\n return true;\n }\n const ch = String.fromCharCode(charCode);\n return WORD_SEPARATORS.includes(ch);\n}\n\n// Checks if the given text is a whole word by checking if the\n// characters before and after are word separators.\nfunction isWholeWordAtDocOffsets(\n text: string,\n docStart: number,\n length: number\n): boolean {\n const beforeOk =\n docStart <= 0 || isWordSeparatorCharCode(text.charCodeAt(docStart - 1));\n const afterOk =\n docStart + length >= text.length ||\n isWordSeparatorCharCode(text.charCodeAt(docStart + length));\n return beforeOk && afterOk;\n}\n\nfunction compileSearchRegExp(\n source: string,\n isRegex: boolean,\n caseSensitive: boolean\n): RegExp {\n const body = isRegex ? source : escapeRegExp(source);\n const flags = `g${caseSensitive ? '' : 'i'}${isRegex ? 'm' : ''}`;\n return new RegExp(body, flags);\n}\n\n/** Expands `$&`, `$1`, `$$`, etc. in a regex replace string using a match. */\nfunction expandReplaceString(\n replacement: string,\n match: RegExpExecArray\n): string {\n return replacement.replace(/\\$([$&]|\\d+)/g, (_token, group: string) => {\n if (group === '$') {\n return '$';\n }\n if (group === '&') {\n return match[0] ?? '';\n }\n const index = Number(group);\n return match[index] ?? '';\n });\n}\n\n/**\n * Builds the text to insert for one search match, including regex capture\n * substitution when regex mode is enabled.\n */\nexport function buildSearchReplacementText(\n positionAt: (offset: number) => Position,\n offsetAt: (position: Position) => number,\n getLineText: (line: number) => string,\n searchParams: SearchParams,\n matchStart: number,\n matchEnd: number\n): string {\n if (!searchParams.regex) {\n return searchParams.replaceText;\n }\n\n const position = positionAt(matchStart);\n const lineText = getLineText(position.line);\n const lineStart = offsetAt({ line: position.line, character: 0 });\n const relStart = matchStart - lineStart;\n\n let pattern: RegExp;\n try {\n pattern = compileSearchRegExp(\n searchParams.text,\n true,\n searchParams.caseSensitive\n );\n } catch {\n return searchParams.replaceText;\n }\n\n // Re-run at the original line offset so lookaround can inspect context\n // outside the matched range while captures still come from this exact hit.\n pattern.lastIndex = relStart;\n const match = pattern.exec(lineText);\n if (\n match === null ||\n match.index !== relStart ||\n match[0].length !== matchEnd - matchStart\n ) {\n return searchParams.replaceText;\n }\n return expandReplaceString(searchParams.replaceText, match);\n}\n\nfunction advancePastEmptyMatch(text: string, index: number): number {\n if (index + 1 < text.length) {\n const first = text.charCodeAt(index);\n const second = text.charCodeAt(index + 1);\n if (\n first >= 0xd800 &&\n first <= 0xdbff &&\n second >= 0xdc00 &&\n second <= 0xdfff\n ) {\n return index + 2;\n }\n }\n return index + 1;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"pieceTable.js","names":[],"sources":["../../src/editor/pieceTable.ts"],"sourcesContent":["import { computeLineOffsets } from '../utils/computeFileOffsets';\nimport type { SearchParams } from './searchPanel';\nimport type { Position, Range, ResolvedTextEdit } from './types';\n\nconst MAX_FIND_MATCHES = 100000;\nconst LINE_FEED = 10;\nconst CARRIAGE_RETURN = 13;\n// TODO(ije): use Intl.Segmenter instead of regex for word separators\nconst WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?' as const;\n\n// A piece is a segment of text that is either original or added.\nclass Piece {\n static Original = 0;\n static Added = 1;\n\n constructor(\n public readonly source: number,\n public readonly offset: number,\n public readonly length: number,\n public readonly lineOffsetStart: number,\n public readonly lineOffsetEnd: number,\n public readonly hasVirtualTrailingCRBreak: boolean,\n public readonly firstCharCode: number,\n public readonly lastCharCode: number\n ) {}\n\n // A slice ending between a backing-buffer CRLF needs its own lone-CR break\n // until the tree reconnects it to a piece beginning with LF.\n get lineBreakCount(): number {\n return (\n this.lineOffsetEnd -\n this.lineOffsetStart +\n (this.hasVirtualTrailingCRBreak ? 1 : 0)\n );\n }\n}\n\n// A text buffer is a string with its line offsets.\nclass TextBuffer {\n lineOffsets: number[];\n\n constructor(public text: string) {\n this.lineOffsets = computeLineOffsets(text);\n }\n\n // the append operation is efficient because it only appends\n // elements to the lineOffsets array in the end\n append(text: string): number {\n const offset = this.text.length;\n for (let i = 0; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n if (charCode !== LINE_FEED && charCode !== CARRIAGE_RETURN) {\n continue;\n }\n if (\n charCode === CARRIAGE_RETURN &&\n text.charCodeAt(i + 1) === LINE_FEED\n ) {\n i++;\n }\n this.lineOffsets.push(offset + i + 1);\n }\n this.text += text;\n return offset;\n }\n}\n\n// A node in the balanced piece tree. `priority` keeps the tree balanced as a\n// treap (see PieceTable): the tree is a max-heap on priority while staying a\n// binary search tree on document offset.\nclass PieceNode {\n left: PieceNode | null = null;\n right: PieceNode | null = null;\n parent: PieceNode | null = null;\n priority = 0;\n\n constructor(\n public piece: Piece,\n public subtreeLength: number = piece.length,\n public subtreeLineBreakCount: number = piece.lineBreakCount,\n public subtreeFirstCharCode: number = piece.firstCharCode,\n public subtreeLastCharCode: number = piece.lastCharCode\n ) {}\n\n updateSubtreeLength(): void {\n this.subtreeLength =\n (this.left?.subtreeLength ?? 0) +\n this.piece.length +\n (this.right?.subtreeLength ?? 0);\n // Pieces count their edge characters in isolation. Collapse a CRLF only\n // when the two characters are actually adjacent in this subtree.\n this.subtreeLineBreakCount =\n (this.left?.subtreeLineBreakCount ?? 0) +\n this.piece.lineBreakCount +\n (this.right?.subtreeLineBreakCount ?? 0) -\n (formsCRLF(this.left?.subtreeLastCharCode, this.piece.firstCharCode)\n ? 1\n : 0) -\n (formsCRLF(this.piece.lastCharCode, this.right?.subtreeFirstCharCode)\n ? 1\n : 0);\n this.subtreeFirstCharCode =\n this.left?.subtreeFirstCharCode ?? this.piece.firstCharCode;\n this.subtreeLastCharCode =\n this.right?.subtreeLastCharCode ?? this.piece.lastCharCode;\n }\n}\n\n/**\n * A piece table is a data structure that allows for efficient insertion and deletion of text.\n * It is a tree of pieces, where each piece is a segment of text that is either original or added.\n * The tree is a treap (a binary search tree that also keeps each node's random priority in heap\n * order, which keeps the tree balanced without an explicit rebalancing pass). Each edit reshapes\n * only the nodes along one root-to-leaf path via split and merge in O(log P), instead of\n * rebuilding all P pieces.\n * Inspired by https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation\n */\nexport class PieceTable {\n #original: TextBuffer;\n #add = new TextBuffer('');\n #root: PieceNode | null = null;\n #length = 0;\n #lineCount = 0;\n #lastVisitedLine: [number, boolean, string] | null = null;\n #lastVisitedLineLength: [number, boolean, number] | null = null;\n // Exact inverse of the latest positionAt lookup; edits invalidate it.\n #lastPosition: [line: number, character: number, offset: number] | null =\n null;\n // Seeds the treap priorities. 0x9e3779b9 is the 32-bit golden-ratio\n // constant (2^32 / phi), a well-mixed value commonly used to seed hashes\n // and PRNGs; any fixed nonzero seed works here. A fixed seed keeps the\n // tree shape, and thus performance, deterministic across runs.\n #priorityState = 0x9e3779b9;\n\n constructor(originalText: string) {\n this.#original = new TextBuffer(originalText);\n const piece = this.#createPiece(Piece.Original, 0, originalText.length);\n this.#root = piece.length > 0 ? this.#createNode(piece) : null;\n this.#length = this.#root?.subtreeLength ?? 0;\n this.#lineCount = (this.#root?.subtreeLineBreakCount ?? 0) + 1;\n }\n\n get lineCount(): number {\n return this.#lineCount;\n }\n\n getText(range?: Range): string {\n if (range === undefined) {\n return this.#textFromPieces();\n }\n const start = this.offsetAt(range.start);\n const end = this.offsetAt(range.end);\n return this.getTextSlice(start, end);\n }\n\n getLineText(line: number, includeLineBreak = false): string {\n if (\n this.#lastVisitedLine !== null &&\n this.#lastVisitedLine[0] === line &&\n this.#lastVisitedLine[1] === includeLineBreak\n ) {\n return this.#lastVisitedLine[2];\n }\n const offset = this.#getLineOffset(line);\n if (offset === undefined) {\n throw new Error(`Line index out of range: ${line}`);\n }\n const text = this.getTextSlice(offset[0], offset[1], !includeLineBreak);\n this.#lastVisitedLine = [line, includeLineBreak, text];\n this.#lastVisitedLineLength = [line, includeLineBreak, text.length];\n return text;\n }\n\n getLineLength(line: number, includeLineBreak = false): number {\n const lastVisitedLineLength = this.#lastVisitedLineLength;\n const lastVisitedLine = this.#lastVisitedLine;\n if (\n lastVisitedLineLength !== null &&\n lastVisitedLineLength[0] === line &&\n lastVisitedLineLength[1] === includeLineBreak\n ) {\n return lastVisitedLineLength[2];\n }\n if (\n lastVisitedLine !== null &&\n lastVisitedLine[0] === line &&\n lastVisitedLine[1] === includeLineBreak\n ) {\n const length = lastVisitedLine[2].length;\n this.#lastVisitedLineLength = [line, includeLineBreak, length];\n return length;\n }\n const offset = this.#getLineOffset(line);\n if (offset === undefined) {\n throw new Error(`Line index out of range: ${line}`);\n }\n const [start, end] = offset;\n let length = end - start;\n if (!includeLineBreak) {\n while (\n length > 0 &&\n isEOL(this.charAt(start + length - 1).charCodeAt(0))\n ) {\n length--;\n }\n }\n this.#lastVisitedLineLength = [line, includeLineBreak, length];\n return length;\n }\n\n getTextSlice(start: number, end: number, trimEOF = false): string {\n if (start >= end) {\n return '';\n }\n\n const sliceStart = clamp(start, 0, this.#length);\n const sliceEnd = clamp(end, sliceStart, this.#length);\n if (sliceStart >= sliceEnd) {\n return '';\n }\n\n const location = this.#findPieceAtOffset(sliceStart);\n if (location === undefined) {\n return '';\n }\n\n const chunks: string[] = [];\n let [node, offsetInPiece] = location as [PieceNode | null, number];\n let remaining = sliceEnd - sliceStart;\n while (node !== null && remaining > 0) {\n const takeLength = Math.min(node.piece.length - offsetInPiece, remaining);\n const buffer = this.#bufferFor(node.piece.source);\n const start = node.piece.offset + offsetInPiece;\n let end = start + takeLength;\n if (trimEOF) {\n while (end > start && isEOL(buffer.text.charCodeAt(end - 1))) {\n end--;\n }\n }\n chunks.push(buffer.text.slice(start, end));\n remaining -= takeLength;\n offsetInPiece = 0;\n node = this.#nextNode(node);\n }\n\n return chunks.join('');\n }\n\n charAt(offset: number): string {\n const location = this.#findPieceAtOffset(offset);\n if (location === undefined) {\n return '';\n }\n\n const [node, offsetInPiece] = location;\n const buffer = this.#bufferFor(node.piece.source);\n return buffer.text.charAt(node.piece.offset + offsetInPiece);\n }\n\n includes(needle: string): boolean {\n if (needle.length === 0) {\n return true;\n }\n\n const prefixTable = createPrefixTable(needle);\n let matched = 0;\n let found = false;\n this.#forEachPieceSegment((segment) => {\n for (let offset = segment.start; offset < segment.end; offset++) {\n const charCode = segment.text.charCodeAt(offset);\n while (matched > 0 && charCode !== needle.charCodeAt(matched)) {\n matched = prefixTable[matched - 1];\n }\n if (charCode === needle.charCodeAt(matched)) {\n matched++;\n }\n if (matched === needle.length) {\n found = true;\n return false;\n }\n }\n return true;\n });\n return found;\n }\n\n findNextNonOverlappingSubstring(\n needle: string,\n occupied: readonly [start: number, end: number][]\n ): number | undefined {\n if (needle.length === 0 || needle.length > this.#length) {\n return undefined;\n }\n\n const ranges = normalizeRanges(occupied, this.#length);\n const pivot = ranges.reduce((max, [, end]) => Math.max(max, end), 0);\n const prefixTable = createPrefixTable(needle);\n let matched = 0;\n let documentOffset = 0;\n let wrappedOffset: number | undefined;\n let foundOffset: number | undefined;\n\n this.#forEachPieceSegment((segment) => {\n for (let offset = segment.start; offset < segment.end; offset++) {\n const charCode = segment.text.charCodeAt(offset);\n while (matched > 0 && charCode !== needle.charCodeAt(matched)) {\n matched = prefixTable[matched - 1];\n }\n if (charCode === needle.charCodeAt(matched)) {\n matched++;\n }\n if (matched === needle.length) {\n const start = documentOffset - needle.length + 1;\n if (!rangeOverlaps(ranges, start, start + needle.length)) {\n if (start >= pivot) {\n foundOffset = start;\n return false;\n }\n wrappedOffset ??= start;\n }\n matched = prefixTable[matched - 1];\n }\n documentOffset++;\n }\n return true;\n });\n\n return foundOffset ?? wrappedOffset;\n }\n\n search(searchParams: SearchParams): [start: number, end: number][] {\n if (searchParams.text.length === 0 || this.#length === 0) {\n return [];\n }\n\n // Search currently operates line-by-line, so newline-spanning patterns are unsupported.\n if (\n searchParams.text.includes('\\n') ||\n searchParams.text.includes('\\r') ||\n (searchParams.regex &&\n (searchParams.text.includes('\\\\n') ||\n searchParams.text.includes('\\\\r')))\n ) {\n return [];\n }\n\n let pattern: RegExp;\n try {\n pattern = compileSearchRegExp(\n searchParams.text,\n searchParams.regex,\n searchParams.caseSensitive\n );\n } catch {\n return [];\n }\n\n return this.#collectSearchMatchesLineByLine(\n pattern,\n searchParams.wholeWord,\n MAX_FIND_MATCHES\n );\n }\n\n #collectSearchMatchesLineByLine(\n pattern: RegExp,\n wholeWord: boolean,\n limit: number\n ): [number, number][] {\n const out: [number, number][] = [];\n // Search visits the whole document, so flatten it once instead of making\n // several treap descents for every line and whole-word boundary.\n const documentText = this.#textFromPieces();\n const docLength = documentText.length;\n const lineOffsets = computeLineOffsets(documentText);\n\n // Reuse the single compiled pattern across every line, resetting its\n // lastIndex before each line, instead of allocating a fresh RegExp per\n // line. The pattern is global, so lastIndex tracks progress within a line.\n for (let line = 0; line < lineOffsets.length; line++) {\n const lineStart = lineOffsets[line];\n let lineEnd = lineOffsets[line + 1] ?? docLength;\n while (\n lineEnd > lineStart &&\n isEOL(documentText.charCodeAt(lineEnd - 1))\n ) {\n lineEnd--;\n }\n const lineText = documentText.slice(lineStart, lineEnd);\n pattern.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(lineText)) !== null) {\n const rel = match.index;\n const fragment = match[0];\n if (fragment.length === 0) {\n pattern.lastIndex = advancePastEmptyMatch(lineText, rel);\n continue;\n }\n const docStart = lineStart + rel;\n if (\n !wholeWord ||\n isWholeWordAtDocOffsets(documentText, docStart, fragment.length)\n ) {\n out.push([docStart, docStart + fragment.length]);\n if (out.length >= limit) {\n return out;\n }\n }\n if (rel === pattern.lastIndex) {\n pattern.lastIndex = advancePastEmptyMatch(lineText, rel);\n }\n }\n }\n return out;\n }\n\n insert(text: string, offset: number): void {\n if (text.length === 0) {\n return;\n }\n const start = clamp(offset, 0, this.#length);\n this.#replaceRangeIncremental(start, start, text);\n this.#invalidateCaches();\n }\n\n delete(offset: number, length: number): void {\n if (length <= 0 || this.#length === 0) {\n return;\n }\n const start = clamp(offset, 0, this.#length);\n const end = clamp(start + length, start, this.#length);\n if (start === end) {\n return;\n }\n this.#replaceRangeIncremental(start, end, '');\n this.#invalidateCaches();\n }\n\n applyEdits(edits: readonly ResolvedTextEdit[]): void {\n if (edits.length === 0) {\n return;\n }\n // Edits arrive sorted ascending and non-overlapping (TextDocument enforces\n // this). Applying them from last to first keeps each remaining edit's\n // offsets valid, since edits at higher offsets never shift lower ones, and\n // every edit becomes an O(log P) incremental replace.\n for (let i = edits.length - 1; i >= 0; i--) {\n const edit = edits[i];\n const start = clamp(edit.start, 0, this.#length);\n const end = clamp(edit.end, start, this.#length);\n this.#replaceRangeIncremental(start, end, edit.text);\n }\n this.#invalidateCaches();\n }\n\n positionAt(offset: number): Position {\n const clampedOffset = clamp(offset, 0, this.#length);\n if (this.#length === 0) {\n return { line: 0, character: 0 };\n }\n const line = this.#lineAtOffset(clampedOffset);\n const lineStart = line === 0 ? 0 : this.#lineBreakOffset(line - 1);\n const character = clampedOffset - lineStart;\n this.#lastPosition = [line, character, clampedOffset];\n return { line, character };\n }\n\n positionsAt(offsets: readonly number[]): Position[] {\n const positions: Position[] = Array.from({ length: offsets.length });\n if (offsets.length === 0) {\n return positions;\n }\n if (this.#length === 0) {\n return positions.fill({ line: 0, character: 0 });\n }\n\n for (let i = 0; i < offsets.length; i++) {\n positions[i] = this.positionAt(offsets[i]);\n }\n\n return positions;\n }\n\n offsetAt(position: Position): number {\n if (position.line < 0 || this.#length === 0) {\n return 0;\n }\n if (position.line >= this.#lineCount) {\n throw new Error(`Line index out of range: ${position.line}`);\n }\n const lastPosition = this.#lastPosition;\n if (\n lastPosition !== null &&\n lastPosition[0] === position.line &&\n lastPosition[1] === position.character\n ) {\n return lastPosition[2];\n }\n const offset = this.#getLineOffset(position.line);\n if (offset === undefined) {\n throw new Error(`Line index out of range: ${position.line}`);\n }\n const character = clamp(position.character, 0, offset[1] - offset[0]);\n return offset[0] + character;\n }\n\n #findPieceAtOffset(\n offset: number\n ): [node: PieceNode, offsetInPiece: number] | undefined {\n if (offset < 0 || offset >= this.#length) {\n return undefined;\n }\n\n let node = this.#root;\n let remaining = offset;\n while (node !== null) {\n const leftLength = node.left?.subtreeLength ?? 0;\n if (remaining < leftLength) {\n node = node.left;\n continue;\n }\n\n remaining -= leftLength;\n if (remaining < node.piece.length) {\n return [node, remaining];\n }\n\n remaining -= node.piece.length;\n node = node.right;\n }\n\n return undefined;\n }\n\n #nextNode(node: PieceNode): PieceNode | null {\n if (node.right !== null) {\n let next = node.right;\n while (next.left !== null) {\n next = next.left;\n }\n return next;\n }\n\n let current = node;\n while (current.parent !== null && current === current.parent.right) {\n current = current.parent;\n }\n return current.parent;\n }\n\n #getLineOffset(line: number): [start: number, end: number] | undefined {\n if (line < 0) {\n throw new Error(`Line index out of range: ${line}`);\n }\n if (this.#length === 0) {\n if (line === 0) {\n return [0, 0];\n }\n throw new Error(`Line index out of range: ${line}`);\n }\n if (line >= this.#lineCount) {\n throw new Error(`Line index out of range: ${line}`);\n }\n\n const start = line === 0 ? 0 : this.#lineBreakOffset(line - 1);\n const end =\n line < this.#lineCount - 1 ? this.#lineBreakOffset(line) : this.#length;\n return [start, end];\n }\n\n #lineAtOffset(offset: number): number {\n let node = this.#root;\n let remaining = clamp(offset, 0, this.#length);\n let line = 0;\n\n while (node !== null) {\n const leftLength = node.left?.subtreeLength ?? 0;\n if (remaining < leftLength) {\n node = node.left;\n continue;\n }\n\n line +=\n (node.left?.subtreeLineBreakCount ?? 0) -\n (formsCRLF(node.left?.subtreeLastCharCode, node.piece.firstCharCode)\n ? 1\n : 0);\n remaining -= leftLength;\n if (remaining <= node.piece.length) {\n const buffer = this.#bufferFor(node.piece.source);\n const lineOffsetEnd = Math.min(\n upperBound(buffer.lineOffsets, node.piece.offset + remaining),\n node.piece.lineOffsetEnd\n );\n line += lineOffsetEnd - node.piece.lineOffsetStart;\n if (\n remaining === node.piece.length &&\n node.piece.hasVirtualTrailingCRBreak\n ) {\n line++;\n }\n if (\n remaining === node.piece.length &&\n formsCRLF(\n node.piece.lastCharCode,\n this.#nextNode(node)?.piece.firstCharCode\n )\n ) {\n line--;\n }\n return line;\n }\n\n line +=\n node.piece.lineBreakCount -\n (formsCRLF(node.piece.lastCharCode, node.right?.subtreeFirstCharCode)\n ? 1\n : 0);\n remaining -= node.piece.length;\n node = node.right;\n }\n\n return this.#lineCount - 1;\n }\n\n #lineBreakOffset(lineBreakIndex: number): number {\n let node = this.#root;\n let remaining = lineBreakIndex;\n let documentOffset = 0;\n let followingCharCode: number | undefined;\n\n while (node !== null) {\n const leftLineBreakCount =\n (node.left?.subtreeLineBreakCount ?? 0) -\n (formsCRLF(node.left?.subtreeLastCharCode, node.piece.firstCharCode)\n ? 1\n : 0);\n if (remaining < leftLineBreakCount) {\n followingCharCode = node.piece.firstCharCode;\n node = node.left;\n continue;\n }\n\n const leftLength = node.left?.subtreeLength ?? 0;\n documentOffset += leftLength;\n remaining -= leftLineBreakCount;\n\n const nextCharCode =\n node.right?.subtreeFirstCharCode ?? followingCharCode;\n const pieceLineBreakCount =\n node.piece.lineBreakCount -\n (formsCRLF(node.piece.lastCharCode, nextCharCode) ? 1 : 0);\n if (remaining < pieceLineBreakCount) {\n return (\n documentOffset + this.#pieceLineBreakOffset(node.piece, remaining)\n );\n }\n\n documentOffset += node.piece.length;\n remaining -= pieceLineBreakCount;\n node = node.right;\n }\n\n return this.#length;\n }\n\n #pieceLineBreakOffset(piece: Piece, lineBreakIndex: number): number {\n const bufferLineBreakCount = piece.lineOffsetEnd - piece.lineOffsetStart;\n if (lineBreakIndex < bufferLineBreakCount) {\n const bufferLineOffset = this.#bufferFor(piece.source).lineOffsets[\n piece.lineOffsetStart + lineBreakIndex\n ];\n return bufferLineOffset - piece.offset;\n }\n return piece.length;\n }\n\n #textFromPieces(): string {\n const chunks: string[] = [];\n this.#forEachPieceSegment((segment) => {\n chunks.push(segment.text.slice(segment.start, segment.end));\n });\n return chunks.join('');\n }\n\n #forEachPieceSegment(\n callback: (segment: {\n readonly start: number;\n readonly end: number;\n readonly text: string;\n readonly lineOffsets: number[];\n readonly lineOffsetStart: number;\n readonly lineOffsetEnd: number;\n }) => boolean | void\n ): void {\n this.#walk(this.#root, (node) => {\n const buffer = this.#bufferFor(node.piece.source);\n return callback({\n text: buffer.text,\n lineOffsets: buffer.lineOffsets,\n lineOffsetStart: node.piece.lineOffsetStart,\n lineOffsetEnd: node.piece.lineOffsetEnd,\n start: node.piece.offset,\n end: node.piece.offset + node.piece.length,\n });\n });\n }\n\n #bufferFor(source: number): TextBuffer {\n return source === Piece.Original ? this.#original : this.#add;\n }\n\n #createPiece(source: number, offset: number, length: number): Piece {\n const buffer = this.#bufferFor(source);\n const end = offset + length;\n const lineOffsetStart = upperBound(buffer.lineOffsets, offset);\n const lineOffsetEnd = upperBound(buffer.lineOffsets, end);\n const lastCharCode = buffer.text.charCodeAt(end - 1);\n return new Piece(\n source,\n offset,\n length,\n lineOffsetStart,\n lineOffsetEnd,\n lastCharCode === CARRIAGE_RETURN &&\n buffer.lineOffsets[lineOffsetEnd - 1] !== end,\n buffer.text.charCodeAt(offset),\n lastCharCode\n );\n }\n\n // Replaces document range [start, end) with `text` by splitting at the start,\n // dropping the deleted prefix from the remainder, and joining the inserted\n // piece back in. Each tree operation touches only one root-to-leaf path, so\n // the edit is O(log P) instead of rebuilding all P pieces. `start`/`end` must\n // be clamped into [0, length] with start <= end.\n #replaceRangeIncremental(start: number, end: number, text: string): void {\n if (start === end && text.length === 0) {\n return;\n }\n\n const [left, rest] = this.#split(this.#root, start);\n const right = this.#dropPrefix(rest, end - start);\n\n let root: PieceNode | null;\n if (text.length > 0) {\n const insertedPiece = this.#createPiece(\n Piece.Added,\n this.#add.append(text),\n text.length\n );\n // The inserted text is fresh at the end of the add buffer, so it can only\n // sit next to the piece on its left, never the one on its right.\n root = this.#mergeNodes(\n this.#appendCoalescing(left, insertedPiece),\n right\n );\n } else {\n // Pure deletion: the pieces now meeting at the seam may be contiguous in\n // the same buffer, so re-attach the right side's first piece through the\n // coalescing append to merge them when possible.\n const [seamPiece, restRight] = this.#popLeftmost(right);\n root =\n seamPiece === undefined\n ? left\n : this.#mergeNodes(\n this.#appendCoalescing(left, seamPiece),\n restRight\n );\n }\n\n if (root !== null) {\n root.parent = null;\n }\n this.#root = root;\n this.#length = root?.subtreeLength ?? 0;\n this.#lineCount = (root?.subtreeLineBreakCount ?? 0) + 1;\n }\n\n // Public mutations clear read caches once, including multi-edit batches.\n #invalidateCaches(): void {\n this.#lastVisitedLine = null;\n this.#lastVisitedLineLength = null;\n this.#lastPosition = null;\n }\n\n #nextPriority(): number {\n this.#priorityState =\n (Math.imul(this.#priorityState, 1664525) + 1013904223) >>> 0;\n return this.#priorityState;\n }\n\n #createNode(piece: Piece): PieceNode {\n const node = new PieceNode(piece);\n node.priority = this.#nextPriority();\n return node;\n }\n\n // Attaches `child` as a side of `node`, keeping the parent pointer in sync so\n // read-side iteration (#nextNode) can still walk back up the tree.\n #setLeft(node: PieceNode, child: PieceNode | null): void {\n node.left = child;\n if (child !== null) {\n child.parent = node;\n }\n }\n\n #setRight(node: PieceNode, child: PieceNode | null): void {\n node.right = child;\n if (child !== null) {\n child.parent = node;\n }\n }\n\n // Splits the subtree into [0, offset) and [offset, length). When the offset\n // falls inside a piece, that piece is sliced in two so the split lands on a\n // clean boundary. Internal parent pointers stay correct; the caller fixes the\n // returned roots' own parents when it reattaches or stores them.\n #split(\n node: PieceNode | null,\n offset: number\n ): [left: PieceNode | null, right: PieceNode | null] {\n if (node === null) {\n return [null, null];\n }\n if (offset <= 0) {\n return [null, node];\n }\n if (offset >= node.subtreeLength) {\n return [node, null];\n }\n\n const leftLength = node.left?.subtreeLength ?? 0;\n if (offset <= leftLength) {\n const [left, right] = this.#split(node.left, offset);\n this.#setLeft(node, right);\n node.updateSubtreeLength();\n return [left, node];\n }\n\n const pieceLength = node.piece.length;\n if (offset >= leftLength + pieceLength) {\n const [left, right] = this.#split(\n node.right,\n offset - leftLength - pieceLength\n );\n this.#setRight(node, left);\n node.updateSubtreeLength();\n return [node, right];\n }\n\n // The offset is strictly inside this node's piece: slice it in two. Both\n // halves inherit this node's priority, which keeps the heap valid because\n // this node already outranked both of its children.\n const inPiece = offset - leftLength;\n const leftNode = new PieceNode(\n this.#createPiece(node.piece.source, node.piece.offset, inPiece)\n );\n const rightNode = new PieceNode(\n this.#createPiece(\n node.piece.source,\n node.piece.offset + inPiece,\n pieceLength - inPiece\n )\n );\n leftNode.priority = node.priority;\n rightNode.priority = node.priority;\n this.#setLeft(leftNode, node.left);\n this.#setRight(rightNode, node.right);\n leftNode.updateSubtreeLength();\n rightNode.updateSubtreeLength();\n return [leftNode, rightNode];\n }\n\n // Discards [0, offset), allocating only the surviving half of a cut piece.\n #dropPrefix(node: PieceNode | null, offset: number): PieceNode | null {\n if (node === null || offset >= node.subtreeLength) {\n return null;\n }\n if (offset <= 0) {\n return node;\n }\n\n const leftLength = node.left?.subtreeLength ?? 0;\n if (offset <= leftLength) {\n this.#setLeft(node, this.#dropPrefix(node.left, offset));\n node.updateSubtreeLength();\n return node;\n }\n\n const pieceEnd = leftLength + node.piece.length;\n if (offset >= pieceEnd) {\n return this.#dropPrefix(node.right, offset - pieceEnd);\n }\n\n const inPiece = offset - leftLength;\n const rightNode = new PieceNode(\n this.#createPiece(\n node.piece.source,\n node.piece.offset + inPiece,\n node.piece.length - inPiece\n )\n );\n rightNode.priority = node.priority;\n this.#setRight(rightNode, node.right);\n rightNode.updateSubtreeLength();\n return rightNode;\n }\n\n // Joins two subtrees where every offset in `left` precedes every offset in\n // `right`, taking the higher-priority root so the result stays balanced.\n #mergeNodes(\n left: PieceNode | null,\n right: PieceNode | null\n ): PieceNode | null {\n if (left === null) {\n return right;\n }\n if (right === null) {\n return left;\n }\n if (left.priority >= right.priority) {\n this.#setRight(left, this.#mergeNodes(left.right, right));\n left.updateSubtreeLength();\n return left;\n }\n this.#setLeft(right, this.#mergeNodes(left, right.left));\n right.updateSubtreeLength();\n return right;\n }\n\n // Appends `piece` after every node in `tree`. Compatible adjacent pieces in\n // the same buffer are merged in place, keeping sequential typing compact.\n #appendCoalescing(tree: PieceNode | null, piece: Piece): PieceNode {\n if (tree === null) {\n return this.#createNode(piece);\n }\n let last = tree;\n while (last.right !== null) {\n last = last.right;\n }\n if (canCoalescePieces(last.piece, piece)) {\n last.piece = coalesceTwoPieces(last.piece, piece);\n // The last piece grew, so refresh aggregates from it up to the root.\n for (let node: PieceNode | null = last; node !== null; ) {\n node.updateSubtreeLength();\n if (node === tree) {\n break;\n }\n node = node.parent;\n }\n return tree;\n }\n // `tree` is non-null here, so merging in the new node always yields a node.\n return this.#mergeNodes(tree, this.#createNode(piece)) as PieceNode;\n }\n\n // Removes and returns the first piece of the tree along with the remaining\n // tree, so a deletion seam can re-merge the piece that becomes adjacent to\n // the one on the other side of the deletion.\n #popLeftmost(\n tree: PieceNode | null\n ): [piece: Piece | undefined, rest: PieceNode | null] {\n if (tree === null) {\n return [undefined, null];\n }\n if (tree.left === null) {\n return [tree.piece, tree.right];\n }\n const [piece, newLeft] = this.#popLeftmost(tree.left);\n this.#setLeft(tree, newLeft);\n tree.updateSubtreeLength();\n return [piece, tree];\n }\n\n #walk(\n node: PieceNode | null,\n visit: (node: PieceNode) => boolean | void\n ): boolean {\n if (node === null) {\n return true;\n }\n if (!this.#walk(node.left, visit)) {\n return false;\n }\n if (visit(node) === false) {\n return false;\n }\n return this.#walk(node.right, visit);\n }\n}\n\nfunction isEOL(charCode: number): boolean {\n return charCode === /* \\n */ 10 || charCode === /* \\r */ 13;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction createPrefixTable(text: string): number[] {\n const table = Array.from<number>({ length: text.length }).fill(0);\n let matched = 0;\n for (let i = 1; i < text.length; i++) {\n const charCode = text.charCodeAt(i);\n while (matched > 0 && charCode !== text.charCodeAt(matched)) {\n matched = table[matched - 1];\n }\n if (charCode === text.charCodeAt(matched)) {\n matched++;\n }\n table[i] = matched;\n }\n return table;\n}\n\nfunction normalizeRanges(\n ranges: readonly [start: number, end: number][],\n length: number\n): [start: number, end: number][] {\n const normalized: [start: number, end: number][] = [];\n for (const [rawStart, rawEnd] of ranges) {\n const start = clamp(rawStart, 0, length);\n const end = clamp(rawEnd, start, length);\n if (start < end) {\n normalized.push([start, end]);\n }\n }\n normalized.sort((a, b) => a[0] - b[0]);\n\n const merged: [start: number, end: number][] = [];\n for (const range of normalized) {\n const previous = merged[merged.length - 1];\n if (previous !== undefined && range[0] <= previous[1]) {\n previous[1] = Math.max(previous[1], range[1]);\n continue;\n }\n merged.push(range);\n }\n return merged;\n}\n\nfunction rangeOverlaps(\n ranges: readonly [start: number, end: number][],\n start: number,\n end: number\n): boolean {\n let low = 0;\n let high = ranges.length;\n while (low < high) {\n const mid = low + Math.floor((high - low) / 2);\n if (ranges[mid][1] <= start) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n const range = ranges[low];\n return range !== undefined && range[0] < end;\n}\n\n// CRLF seams stay explicit because separately appended buffer chunks may each\n// record a break there; the tree aggregate reconciles the document-level pair.\nfunction canCoalescePieces(prev: Piece, next: Piece): boolean {\n return (\n prev.source === next.source &&\n prev.offset + prev.length === next.offset &&\n !formsCRLF(prev.lastCharCode, next.firstCharCode)\n );\n}\n\n// Joins two adjacent pieces (see canCoalescePieces) into one. Keeping the table\n// compact after every edit is what stops the piece count from growing without\n// bound during normal typing.\nfunction coalesceTwoPieces(prev: Piece, next: Piece): Piece {\n return new Piece(\n prev.source,\n prev.offset,\n prev.length + next.length,\n prev.lineOffsetStart,\n next.lineOffsetEnd,\n next.hasVirtualTrailingCRBreak,\n prev.firstCharCode,\n next.lastCharCode\n );\n}\n\nfunction formsCRLF(\n leftCharCode: number | undefined,\n rightCharCode: number | undefined\n): boolean {\n return leftCharCode === CARRIAGE_RETURN && rightCharCode === LINE_FEED;\n}\n\n// Returns the index of the first element in the array that is greater than the target.\nfunction upperBound(values: number[], target: number): number {\n let lo = 0;\n let hi = values.length;\n while (lo < hi) {\n const mid = lo + Math.floor((hi - lo) / 2);\n if (values[mid] <= target) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n\nfunction escapeRegExp(text: string): string {\n return text.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nfunction isWordSeparatorCharCode(charCode: number): boolean {\n if (charCode <= 32 || charCode === 127) {\n return true;\n }\n const ch = String.fromCharCode(charCode);\n return WORD_SEPARATORS.includes(ch);\n}\n\n// Checks if the given text is a whole word by checking if the\n// characters before and after are word separators.\nfunction isWholeWordAtDocOffsets(\n text: string,\n docStart: number,\n length: number\n): boolean {\n const beforeOk =\n docStart <= 0 || isWordSeparatorCharCode(text.charCodeAt(docStart - 1));\n const afterOk =\n docStart + length >= text.length ||\n isWordSeparatorCharCode(text.charCodeAt(docStart + length));\n return beforeOk && afterOk;\n}\n\nfunction compileSearchRegExp(\n source: string,\n isRegex: boolean,\n caseSensitive: boolean\n): RegExp {\n const body = isRegex ? source : escapeRegExp(source);\n const flags = `g${caseSensitive ? '' : 'i'}${isRegex ? 'm' : ''}`;\n return new RegExp(body, flags);\n}\n\n/** Expands `$&`, `$1`, `$$`, etc. in a regex replace string using a match. */\nfunction expandReplaceString(\n replacement: string,\n match: RegExpExecArray\n): string {\n return replacement.replace(/\\$([$&]|\\d+)/g, (_token, group: string) => {\n if (group === '$') {\n return '$';\n }\n if (group === '&') {\n return match[0] ?? '';\n }\n const index = Number(group);\n return match[index] ?? '';\n });\n}\n\n/**\n * Builds the text to insert for one search match, including regex capture\n * substitution when regex mode is enabled.\n */\nexport function buildSearchReplacementText(\n positionAt: (offset: number) => Position,\n offsetAt: (position: Position) => number,\n getLineText: (line: number) => string,\n searchParams: SearchParams,\n matchStart: number,\n matchEnd: number\n): string {\n if (!searchParams.regex) {\n return searchParams.replaceText;\n }\n\n const position = positionAt(matchStart);\n const lineText = getLineText(position.line);\n const lineStart = offsetAt({ line: position.line, character: 0 });\n const relStart = matchStart - lineStart;\n\n let pattern: RegExp;\n try {\n pattern = compileSearchRegExp(\n searchParams.text,\n true,\n searchParams.caseSensitive\n );\n } catch {\n return searchParams.replaceText;\n }\n\n // Re-run at the original line offset so lookaround can inspect context\n // outside the matched range while captures still come from this exact hit.\n pattern.lastIndex = relStart;\n const match = pattern.exec(lineText);\n if (\n match === null ||\n match.index !== relStart ||\n match[0].length !== matchEnd - matchStart\n ) {\n return searchParams.replaceText;\n }\n return expandReplaceString(searchParams.replaceText, match);\n}\n\nfunction advancePastEmptyMatch(text: string, index: number): number {\n if (index + 1 < text.length) {\n const first = text.charCodeAt(index);\n const second = text.charCodeAt(index + 1);\n if (\n first >= 0xd800 &&\n first <= 0xdbff &&\n second >= 0xdc00 &&\n second <= 0xdfff\n ) {\n return index + 2;\n }\n }\n return index + 1;\n}\n"],"mappings":"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"}
@@ -1,10 +1,6 @@
1
1
  import { isLinux, isMacLike, isSafari, resetPlatformDetection } from "../utils/platform.js";
2
-
3
2
  //#region src/editor/platform.d.ts
4
- declare function isPrimaryModifier({
5
- metaKey,
6
- ctrlKey
7
- }: MouseEvent | KeyboardEvent, isMac?: boolean): boolean;
3
+ declare function isPrimaryModifier({ metaKey, ctrlKey }: MouseEvent | KeyboardEvent, isMac?: boolean): boolean;
8
4
  declare function isMoveCursorShortcut(e: KeyboardEvent): 'up' | 'down' | 'left' | 'right' | 'start' | 'textStart' | 'end' | undefined;
9
5
  //#endregion
10
6
  export { isLinux, isMacLike, isMoveCursorShortcut, isPrimaryModifier, isSafari, resetPlatformDetection };
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","names":[],"sources":["../../src/editor/platform.ts"],"mappings":";;;iBASgB,iBAAA;EACZ,OAAA;EAAS;AAAA,GAAW,UAAA,GAAa,aAAA,EACnC,KAAA;AAAA,iBAKc,oBAAA,CACd,CAAgB,EAAb,aAAa"}
1
+ {"version":3,"file":"platform.d.ts","names":[],"sources":["../../src/editor/platform.ts"],"mappings":";;iBASgB,oBACZ,SAAS,WAAW,aAAa,eACnC;iBAKc,qBACd,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","names":[],"sources":["../../src/editor/platform.ts"],"sourcesContent":["import {\n isLinux,\n isMacLike,\n isSafari,\n resetPlatformDetection,\n} from '../utils/platform';\n\nexport { isLinux, isMacLike, isSafari, resetPlatformDetection };\n\nexport function isPrimaryModifier(\n { metaKey, ctrlKey }: MouseEvent | KeyboardEvent,\n isMac: boolean = isMacLike()\n): boolean {\n return isMac ? metaKey && !ctrlKey : ctrlKey && !metaKey;\n}\n\nexport function isMoveCursorShortcut(\n e: KeyboardEvent\n):\n | 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'start'\n | 'textStart'\n | 'end'\n | undefined {\n // emacs key bindings\n if (isMacLike() && e.ctrlKey && !e.altKey && !e.metaKey) {\n switch (e.key) {\n case 'a':\n return 'start';\n case 'e':\n return 'end';\n case 'p':\n return 'up';\n case 'n':\n return 'down';\n case 'f':\n return 'right';\n case 'b':\n return 'left';\n }\n }\n\n if (!e.altKey && !e.ctrlKey && !e.metaKey) {\n if (e.key === 'ArrowUp') {\n return 'up';\n } else if (e.key === 'ArrowDown') {\n return 'down';\n } else if (e.key === 'ArrowLeft') {\n return 'left';\n } else if (e.key === 'ArrowRight') {\n return 'right';\n } else if (e.key === 'Home') {\n return 'start';\n } else if (e.key === 'End') {\n return 'end';\n }\n }\n\n if (isPrimaryModifier(e)) {\n if (e.key === 'ArrowLeft') {\n return 'textStart';\n } else if (e.key === 'ArrowRight') {\n return 'end';\n }\n }\n\n return undefined;\n}\n"],"mappings":";;AASA,SAAgB,kBACd,EAAE,SAAS,WACX,QAAiB,UAAU,GAClB;CACT,OAAO,QAAQ,WAAW,CAAC,UAAU,WAAW,CAAC;AACnD;AAEA,SAAgB,qBACd,GASY;CAEZ,IAAI,UAAU,KAAK,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,SAC9C,QAAQ,EAAE,KAAV;EACE,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;CACX;CAGF,IAAI,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE;MAC5B,EAAE,QAAQ,WACZ,OAAO;OACF,IAAI,EAAE,QAAQ,aACnB,OAAO;OACF,IAAI,EAAE,QAAQ,aACnB,OAAO;OACF,IAAI,EAAE,QAAQ,cACnB,OAAO;OACF,IAAI,EAAE,QAAQ,QACnB,OAAO;OACF,IAAI,EAAE,QAAQ,OACnB,OAAO;CAAA;CAIX,IAAI,kBAAkB,CAAC;MACjB,EAAE,QAAQ,aACZ,OAAO;OACF,IAAI,EAAE,QAAQ,cACnB,OAAO;CAAA;AAKb"}
1
+ {"version":3,"file":"platform.js","names":[],"sources":["../../src/editor/platform.ts"],"sourcesContent":["import {\n isLinux,\n isMacLike,\n isSafari,\n resetPlatformDetection,\n} from '../utils/platform';\n\nexport { isLinux, isMacLike, isSafari, resetPlatformDetection };\n\nexport function isPrimaryModifier(\n { metaKey, ctrlKey }: MouseEvent | KeyboardEvent,\n isMac: boolean = isMacLike()\n): boolean {\n return isMac ? metaKey && !ctrlKey : ctrlKey && !metaKey;\n}\n\nexport function isMoveCursorShortcut(\n e: KeyboardEvent\n):\n | 'up'\n | 'down'\n | 'left'\n | 'right'\n | 'start'\n | 'textStart'\n | 'end'\n | undefined {\n // emacs key bindings\n if (isMacLike() && e.ctrlKey && !e.altKey && !e.metaKey) {\n switch (e.key) {\n case 'a':\n return 'start';\n case 'e':\n return 'end';\n case 'p':\n return 'up';\n case 'n':\n return 'down';\n case 'f':\n return 'right';\n case 'b':\n return 'left';\n }\n }\n\n if (!e.altKey && !e.ctrlKey && !e.metaKey) {\n if (e.key === 'ArrowUp') {\n return 'up';\n } else if (e.key === 'ArrowDown') {\n return 'down';\n } else if (e.key === 'ArrowLeft') {\n return 'left';\n } else if (e.key === 'ArrowRight') {\n return 'right';\n } else if (e.key === 'Home') {\n return 'start';\n } else if (e.key === 'End') {\n return 'end';\n }\n }\n\n if (isPrimaryModifier(e)) {\n if (e.key === 'ArrowLeft') {\n return 'textStart';\n } else if (e.key === 'ArrowRight') {\n return 'end';\n }\n }\n\n return undefined;\n}\n"],"mappings":";;AASA,SAAgB,kBACd,EAAE,SAAS,WACX,QAAiB,UAAU,GAClB;CACT,OAAO,QAAQ,WAAW,CAAC,UAAU,WAAW,CAAC;AACnD;AAEA,SAAgB,qBACd,GASY;CAEZ,IAAI,UAAU,KAAK,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,SAC9C,QAAQ,EAAE,KAAV;EACE,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;EACT,KAAK,KACH,OAAO;CACX;CAGF,IAAI,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS;EACzC,IAAI,EAAE,QAAQ,WACZ,OAAO;OACF,IAAI,EAAE,QAAQ,aACnB,OAAO;OACF,IAAI,EAAE,QAAQ,aACnB,OAAO;OACF,IAAI,EAAE,QAAQ,cACnB,OAAO;OACF,IAAI,EAAE,QAAQ,QACnB,OAAO;OACF,IAAI,EAAE,QAAQ,OACnB,OAAO;CAEX;CAEA,IAAI,kBAAkB,CAAC,GAAG;EACxB,IAAI,EAAE,QAAQ,aACZ,OAAO;OACF,IAAI,EAAE,QAAQ,cACnB,OAAO;CAEX;AAGF"}
@@ -35,11 +35,17 @@ declare class PopoverManager {
35
35
  resetPlacement(placementKey?: string): void;
36
36
  setPlacement(placement: 'preferred' | 'fallback', placementKey?: string): void;
37
37
  choosePlacement(input: {
38
- /** Bounds for the anchor's preferred side (e.g. above for backward, below for forward). */preferred: PopoverPlacementBounds; /** Bounds for the opposite edge we flip to when the preferred side has no room. */
39
- fallback: PopoverPlacementBounds; /** The visible scrollport in overlay coordinate space, or undefined without layout geometry (e.g. a detached test DOM). */
40
- viewport: PopoverPlacementBounds | undefined; /** The popover's measured height; 0 before it has laid out. */
41
- popoverHeight: number; /** Whether the anchor is within the document's first/last rows; only used as a fallback signal when `viewport` is unavailable. */
42
- atDocumentEdge: boolean; /** Keeps hysteresis independent when more than one popover kind is active. */
38
+ /** Bounds for the anchor's preferred side (e.g. above for backward, below for forward). */
39
+ preferred: PopoverPlacementBounds;
40
+ /** Bounds for the opposite edge we flip to when the preferred side has no room. */
41
+ fallback: PopoverPlacementBounds;
42
+ /** The visible scrollport in overlay coordinate space, or undefined without layout geometry (e.g. a detached test DOM). */
43
+ viewport: PopoverPlacementBounds | undefined;
44
+ /** The popover's measured height; 0 before it has laid out. */
45
+ popoverHeight: number;
46
+ /** Whether the anchor is within the document's first/last rows; only used as a fallback signal when `viewport` is unavailable. */
47
+ atDocumentEdge: boolean;
48
+ /** Keeps hysteresis independent when more than one popover kind is active. */
43
49
  placementKey?: string;
44
50
  }): 'preferred' | 'fallback';
45
51
  /**
@@ -47,13 +53,7 @@ declare class PopoverManager {
47
53
  */
48
54
  getPlacementBounds(): PopoverViewportBounds | undefined;
49
55
  }
50
- declare function setPopoverPositionStyles(popover: HTMLElement, {
51
- gutterWidth,
52
- placeAbove,
53
- viewport,
54
- x,
55
- y
56
- }: {
56
+ declare function setPopoverPositionStyles(popover: HTMLElement, { gutterWidth, placeAbove, viewport, x, y }: {
57
57
  gutterWidth: number;
58
58
  placeAbove: boolean;
59
59
  viewport: PopoverViewportBounds | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"popover.d.ts","names":[],"sources":["../../src/editor/popover.ts"],"mappings":";cAIa,sBAAA;AAAA,cAKA,0BAAA;;;;AALsB;AAKnC;UAOiB,sBAAA;;EAEf,GAAA;EATqC;EAWrC,MAAM;AAAA;AAAA,UAGS,qBAAA,SAA8B,sBAAsB;EALnE;EAOA,IAAA;EAFe;EAIf,KAAA;AAAA;AAAA,UAGe,qBAAA;EACf,gBAAA;EACA,mBAAmB;AAAA;;AALd;AAGP;;;cAUa,cAAA;EAAA;EAiBX,WAAA,CAAY,OAAA,EAAS,qBAAA;EAKrB,mBAAA,CACE,aAAA,EAAe,WAAA,EACf,WAAA,EAAa,WAAA;EAkBf,OAAA;EAgBA,cAAA,CAAe,YAAA;EAIf,YAAA,CACE,SAAA,4BACA,YAAA;EAQF,eAAA,CAAgB,KAAA;IAEH,2FAAX,SAAA,EAAW,sBAAA,EAID;IAFV,QAAA,EAAU,sBAAA,EA6C+B;IA3CzC,QAAA,EAAU,sBAAA;IAEV,aAAA,UA/DmB;IAiEnB,cAAA,WA5DF;IA8DE,YAAA;EAAA;EA5Da;;;EAiGf,kBAAA,IAAsB,qBAAA;AAAA;AAAA,iBAoLR,wBAAA,CACd,OAAA,EAAS,WAAA;EAEP,WAAA;EACA,UAAA;EACA,QAAA;EACA,CAAA;EACA;AAAA;EAEA,WAAA;EACA,UAAA;EACA,QAAA,EAAU,qBAAA;EACV,CAAA;EACA,CAAA;AAAA"}
1
+ {"version":3,"file":"popover.d.ts","names":[],"sources":["../../src/editor/popover.ts"],"mappings":";cAIa;cAKA;;;;;;UAOI;;EAEf;;EAEA;;UAGe,8BAA8B;;EAE7C;;EAEA;;UAGe;EACf;EACA;;;;;;;cAQW;;EAiBX,YAAY,SAAS;EAKrB,oBACE,eAAe,aACf,aAAa;EAkBf;EAgBA,eAAe;EAIf,aACE,qCACA;EAQF,gBAAgB;;IAEd,WAAW;;IAEX,UAAU;;IAEV,UAAU;;IAEV;;IAEA;;IAEA;;;;;EAqCF,sBAAsB;;iBAoLR,yBACd,SAAS,eAEP,aACA,YACA,UACA,GACA;EAEA;EACA;EACA,UAAU;EACV;EACA"}
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","names":["#hasActivePopover","#updateActivePopover","#fileContainer","#codeElement","#viewportRectsDirty","#viewportRectListenersDisposes","#scrollContainer","#scrollContainerSource","#cachedCodeRect","#cachedScrollContainerRect","#cachedCodeScrollLeft","#cachedCodeScrollTop","#cachedCodeClientWidth","#placements","#getCodeRect","#getScrollContainerRect","#ensureViewportRectListeners","#getScrollContainer","#refreshViewportRectsIfNeeded"],"sources":["../../src/editor/popover.ts"],"sourcesContent":["import { addEventListener } from './utils';\n\n// Lines from the document edge at which the no-viewport fallback heuristic\n// (see `atDocumentEdge` below) flips placement.\nexport const POPOVER_BOUNDARY_LINES = 3;\n\n// Extra clearance (px) `preferred` must regain before a popover that flipped\n// to `fallback` flips back, so an anchor sitting right at the flip boundary\n// doesn't flicker between sides on every recompute.\nexport const POPOVER_FLIP_HYSTERESIS_PX = 4;\n\n/**\n * The visible scroll viewport expressed in the overlay's coordinate space (the\n * same space --popover-y uses), or undefined when no usable layout geometry\n * exists (e.g. a detached unit-test DOM, where every rect is zero).\n */\nexport interface PopoverPlacementBounds {\n /** The top of the popover in overlay coordinate space. */\n top: number;\n /** The bottom of the popover in overlay coordinate space. */\n bottom: number;\n}\n\nexport interface PopoverViewportBounds extends PopoverPlacementBounds {\n /** The left edge of the visible viewport in overlay coordinate space. */\n left: number;\n /** The right edge of the visible viewport in overlay coordinate space. */\n right: number;\n}\n\nexport interface PopoverManagerOptions {\n hasActivePopover: () => boolean;\n updateActivePopover: () => void;\n}\n\n/**\n * Shared placement logic for the editor's overlay popovers: each anchors below\n * or above a document position, flipping to the opposite side only when the\n * preferred side would be clipped by the visible scrollport.\n */\nexport class PopoverManager {\n #fileContainer?: HTMLElement;\n #codeElement?: HTMLElement;\n #scrollContainer?: HTMLElement;\n #scrollContainerSource?: HTMLElement;\n #cachedCodeRect?: DOMRect;\n #cachedScrollContainerRect?: DOMRect;\n #cachedCodeScrollLeft = 0;\n #cachedCodeScrollTop = 0;\n #cachedCodeClientWidth = 0;\n #viewportRectsDirty = true;\n #viewportRectListenersDisposes?: (() => void)[];\n #placements = new Map<string, 'preferred' | 'fallback'>();\n\n readonly #hasActivePopover: () => boolean;\n readonly #updateActivePopover: () => void;\n\n constructor(options: PopoverManagerOptions) {\n this.#hasActivePopover = options.hasActivePopover;\n this.#updateActivePopover = options.updateActivePopover;\n }\n\n setViewportElements(\n fileContainer: HTMLElement,\n codeElement: HTMLElement\n ): void {\n const viewportElementChanged =\n this.#fileContainer !== fileContainer ||\n this.#codeElement !== codeElement;\n this.#fileContainer = fileContainer;\n if (!viewportElementChanged) {\n return;\n }\n this.#codeElement = codeElement;\n // A new [data-code] element invalidates the cached viewport rects (e.g. a\n // full re-render loaded a different file, possibly at a different on-screen\n // position) even without an intervening scroll/resize event.\n this.#viewportRectsDirty = true;\n this.#viewportRectListenersDisposes?.forEach((dispose) => dispose());\n this.#viewportRectListenersDisposes = undefined;\n }\n\n cleanUp(): void {\n this.#codeElement = undefined;\n this.#fileContainer = undefined;\n this.#scrollContainer = undefined;\n this.#scrollContainerSource = undefined;\n this.#cachedCodeRect = undefined;\n this.#cachedScrollContainerRect = undefined;\n this.#cachedCodeScrollLeft = 0;\n this.#cachedCodeScrollTop = 0;\n this.#cachedCodeClientWidth = 0;\n this.#viewportRectsDirty = true;\n this.#viewportRectListenersDisposes?.forEach((dispose) => dispose());\n this.#viewportRectListenersDisposes = undefined;\n this.#placements.clear();\n }\n\n resetPlacement(placementKey = 'default'): void {\n this.#placements.delete(placementKey);\n }\n\n setPlacement(\n placement: 'preferred' | 'fallback',\n placementKey = 'default'\n ): void {\n this.#placements.set(placementKey, placement);\n }\n\n // Flips to the opposite side only when the preferred side would be clipped by\n // the real scrollport and the fallback side fits; without viewport geometry,\n // falls back to the document-edge signal so the first/last rows still flip.\n choosePlacement(input: {\n /** Bounds for the anchor's preferred side (e.g. above for backward, below for forward). */\n preferred: PopoverPlacementBounds;\n /** Bounds for the opposite edge we flip to when the preferred side has no room. */\n fallback: PopoverPlacementBounds;\n /** The visible scrollport in overlay coordinate space, or undefined without layout geometry (e.g. a detached test DOM). */\n viewport: PopoverPlacementBounds | undefined;\n /** The popover's measured height; 0 before it has laid out. */\n popoverHeight: number;\n /** Whether the anchor is within the document's first/last rows; only used as a fallback signal when `viewport` is unavailable. */\n atDocumentEdge: boolean;\n /** Keeps hysteresis independent when more than one popover kind is active. */\n placementKey?: string;\n }): 'preferred' | 'fallback' {\n const {\n preferred,\n fallback,\n viewport,\n popoverHeight,\n atDocumentEdge,\n placementKey = 'default',\n } = input;\n const previousPlacement = this.#placements.get(placementKey);\n let placement: 'preferred' | 'fallback';\n if (viewport !== undefined && popoverHeight > 0) {\n const fits = (bounds: PopoverPlacementBounds, margin = 0): boolean =>\n bounds.top >= viewport.top + margin &&\n bounds.bottom <= viewport.bottom - margin;\n if (\n previousPlacement === 'fallback' &&\n fits(fallback) &&\n !fits(preferred, POPOVER_FLIP_HYSTERESIS_PX)\n ) {\n placement = 'fallback';\n } else if (!fits(preferred) && fits(fallback)) {\n placement = 'fallback';\n } else {\n placement = 'preferred';\n }\n } else {\n placement = atDocumentEdge ? 'fallback' : 'preferred';\n }\n this.#placements.set(placementKey, placement);\n return placement;\n }\n\n /**\n * Returns the bounds of the popover in overlay coordinate space.\n */\n getPlacementBounds(): PopoverViewportBounds | undefined {\n const codeRect = this.#getCodeRect();\n if (codeRect === undefined) {\n return undefined;\n }\n const scrollContainerRect = this.#getScrollContainerRect();\n let topScreen: number;\n let bottomScreen: number;\n if (scrollContainerRect !== undefined) {\n topScreen = scrollContainerRect.top;\n bottomScreen = scrollContainerRect.bottom;\n } else {\n // No scrollable ancestor: the page itself scrolls, so the window is the\n // clip region.\n topScreen = 0;\n bottomScreen = window.innerHeight;\n }\n // The overlay that hosts the popover lives inside `[data-code]`, which uses\n // `overflow-y: clip` (see style.css). A short file smaller than the\n // scrollport therefore clips the popover at its own top/bottom even when the\n // window/scroll container still has room beyond those edges. Intersect the\n // scrollport with the code element's own box so a first/last-line popover\n // flips to the side that actually fits within that clip, not just within the\n // outer viewport.\n topScreen = Math.max(topScreen, codeRect.top);\n bottomScreen = Math.min(bottomScreen, codeRect.bottom);\n if (bottomScreen <= topScreen) {\n return undefined;\n }\n const codeScrollLeft = this.#cachedCodeScrollLeft;\n const codeScrollTop = this.#cachedCodeScrollTop;\n const codeViewportWidth =\n this.#cachedCodeClientWidth > 0\n ? this.#cachedCodeClientWidth\n : codeRect.width;\n const leftScreen =\n scrollContainerRect !== undefined ? scrollContainerRect.left : 0;\n const rightScreen =\n scrollContainerRect !== undefined\n ? scrollContainerRect.right\n : window.innerWidth;\n const codeViewportLeft = codeScrollLeft;\n const codeViewportRight = codeScrollLeft + codeViewportWidth;\n const visibleLeft = Math.max(\n codeViewportLeft,\n leftScreen - codeRect.left + codeScrollLeft\n );\n const visibleRight = Math.min(\n codeViewportRight,\n rightScreen - codeRect.left + codeScrollLeft\n );\n return {\n top: topScreen - codeRect.top + codeScrollTop,\n bottom: bottomScreen - codeRect.top + codeScrollTop,\n left: visibleLeft,\n right: Math.max(visibleLeft, visibleRight),\n };\n }\n\n // The nearest scrollable ancestor of the file container -- the element whose\n // overflow clips overlay widgets. Walks the light-DOM ancestor chain (the\n // overlay lives in the file container's shadow root) and caches the result per\n // file container so it is not re-resolved on every render.\n //\n // Known limitations: this only inspects light-DOM ancestors outside the\n // shadow root, so it cannot see arbitrary clip boundaries inside it and cannot\n // cross into an outer shadow root if the file container is itself nested in\n // another web component. It also only considers the *nearest* scrollable\n // ancestor, not the intersection of every clipping ancestor, so a popover\n // could still be clipped by an outer scroll context even when it fits within\n // this nearer one. The `[data-code]` element's own `overflow-y: clip` box is\n // handled separately in getPlacementBounds, which intersects it with whatever\n // scrollport this method resolves.\n #getScrollContainer(): HTMLElement | undefined {\n const fileContainer = this.#fileContainer;\n if (fileContainer === undefined) {\n return undefined;\n }\n if (this.#scrollContainerSource === fileContainer) {\n // A cached element can detach across re-mounts; re-resolve in that case\n // but otherwise trust the cache (including a cached \"no scroller\" result).\n if (\n this.#scrollContainer === undefined ||\n this.#scrollContainer.isConnected\n ) {\n return this.#scrollContainer;\n }\n }\n let element: HTMLElement | null = fileContainer.parentElement;\n while (element !== null) {\n const overflowY = getComputedStyle(element).overflowY;\n if (\n overflowY === 'auto' ||\n overflowY === 'scroll' ||\n overflowY === 'overlay'\n ) {\n this.#scrollContainer = element;\n this.#scrollContainerSource = fileContainer;\n return element;\n }\n element = element.parentElement;\n }\n this.#scrollContainer = undefined;\n this.#scrollContainerSource = fileContainer;\n return undefined;\n }\n\n // Lazily measures and caches the screen-space rects getOverlayViewport needs,\n // refreshing only when a scroll or resize event marks them dirty rather than\n // on every call. Selection-action placement can run once per keystroke while a\n // ranged selection stays open, so re-measuring via getBoundingClientRect on\n // every call would force a synchronous layout reflow on that hot path.\n #refreshViewportRectsIfNeeded(): void {\n if (!this.#viewportRectsDirty) {\n return;\n }\n this.#ensureViewportRectListeners();\n const codeElement = this.#codeElement;\n this.#cachedCodeRect = codeElement?.getBoundingClientRect();\n this.#cachedCodeScrollLeft = codeElement?.scrollLeft ?? 0;\n this.#cachedCodeScrollTop = codeElement?.scrollTop ?? 0;\n this.#cachedCodeClientWidth = codeElement?.clientWidth ?? 0;\n this.#cachedScrollContainerRect =\n this.#getScrollContainer()?.getBoundingClientRect();\n this.#viewportRectsDirty = false;\n }\n\n #getCodeRect(): DOMRect | undefined {\n this.#refreshViewportRectsIfNeeded();\n return this.#cachedCodeRect;\n }\n\n #getScrollContainerRect(): DOMRect | undefined {\n this.#refreshViewportRectsIfNeeded();\n return this.#cachedScrollContainerRect;\n }\n\n // Subscribes once to events that can move or resize the cached rects: a scroll\n // on the resolved scroll container (or the window, when the page itself\n // scrolls) and a window resize. Scrolling/resizing can change whether the open\n // popover still fits, so this re-runs placement rAF-throttled.\n #ensureViewportRectListeners(): void {\n if (this.#viewportRectListenersDisposes !== undefined) {\n return;\n }\n let repositionRafId: number | undefined;\n const markDirty = () => {\n this.#viewportRectsDirty = true;\n if (!this.#hasActivePopover() || repositionRafId !== undefined) {\n return;\n }\n repositionRafId = requestAnimationFrame(() => {\n repositionRafId = undefined;\n this.#updateActivePopover();\n });\n };\n const scroller = this.#getScrollContainer();\n const codeElement = this.#codeElement;\n this.#viewportRectListenersDisposes = [\n scroller !== undefined\n ? addEventListener(scroller, 'scroll', markDirty, { passive: true })\n : addEventListener(window, 'scroll', markDirty, { passive: true }),\n ...(codeElement !== undefined\n ? [\n addEventListener(codeElement, 'scroll', markDirty, {\n passive: true,\n }),\n ]\n : []),\n addEventListener(window, 'resize', markDirty, { passive: true }),\n () => {\n if (repositionRafId !== undefined) {\n cancelAnimationFrame(repositionRafId);\n repositionRafId = undefined;\n }\n },\n ];\n }\n}\n\nexport function setPopoverPositionStyles(\n popover: HTMLElement,\n {\n gutterWidth,\n placeAbove,\n viewport,\n x,\n y,\n }: {\n gutterWidth: number;\n placeAbove: boolean;\n viewport: PopoverViewportBounds | undefined;\n x: number;\n y: number;\n }\n): void {\n popover.style.setProperty('--gutter-width', gutterWidth + 'px');\n popover.style.setProperty('--popover-x', x + 'px');\n popover.style.setProperty('--popover-y', y + 'px');\n popover.style.setProperty('--popover-y-shift', placeAbove ? '-100%' : '0px');\n if (viewport === undefined) {\n popover.style.removeProperty('--popover-viewport-left');\n popover.style.removeProperty('--popover-viewport-right');\n popover.style.removeProperty('--popover-viewport-top');\n popover.style.removeProperty('--popover-viewport-bottom');\n return;\n }\n popover.style.setProperty('--popover-viewport-left', viewport.left + 'px');\n popover.style.setProperty('--popover-viewport-right', viewport.right + 'px');\n // Vertical bounds let the CSS clamp keep the popover on-screen when neither\n // side fits (e.g. a select-all spanning the first and last rows).\n popover.style.setProperty('--popover-viewport-top', viewport.top + 'px');\n popover.style.setProperty(\n '--popover-viewport-bottom',\n viewport.bottom + 'px'\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"popover.js","names":[],"sources":["../../src/editor/popover.ts"],"sourcesContent":["import { addEventListener } from './utils';\n\n// Lines from the document edge at which the no-viewport fallback heuristic\n// (see `atDocumentEdge` below) flips placement.\nexport const POPOVER_BOUNDARY_LINES = 3;\n\n// Extra clearance (px) `preferred` must regain before a popover that flipped\n// to `fallback` flips back, so an anchor sitting right at the flip boundary\n// doesn't flicker between sides on every recompute.\nexport const POPOVER_FLIP_HYSTERESIS_PX = 4;\n\n/**\n * The visible scroll viewport expressed in the overlay's coordinate space (the\n * same space --popover-y uses), or undefined when no usable layout geometry\n * exists (e.g. a detached unit-test DOM, where every rect is zero).\n */\nexport interface PopoverPlacementBounds {\n /** The top of the popover in overlay coordinate space. */\n top: number;\n /** The bottom of the popover in overlay coordinate space. */\n bottom: number;\n}\n\nexport interface PopoverViewportBounds extends PopoverPlacementBounds {\n /** The left edge of the visible viewport in overlay coordinate space. */\n left: number;\n /** The right edge of the visible viewport in overlay coordinate space. */\n right: number;\n}\n\nexport interface PopoverManagerOptions {\n hasActivePopover: () => boolean;\n updateActivePopover: () => void;\n}\n\n/**\n * Shared placement logic for the editor's overlay popovers: each anchors below\n * or above a document position, flipping to the opposite side only when the\n * preferred side would be clipped by the visible scrollport.\n */\nexport class PopoverManager {\n #fileContainer?: HTMLElement;\n #codeElement?: HTMLElement;\n #scrollContainer?: HTMLElement;\n #scrollContainerSource?: HTMLElement;\n #cachedCodeRect?: DOMRect;\n #cachedScrollContainerRect?: DOMRect;\n #cachedCodeScrollLeft = 0;\n #cachedCodeScrollTop = 0;\n #cachedCodeClientWidth = 0;\n #viewportRectsDirty = true;\n #viewportRectListenersDisposes?: (() => void)[];\n #placements = new Map<string, 'preferred' | 'fallback'>();\n\n readonly #hasActivePopover: () => boolean;\n readonly #updateActivePopover: () => void;\n\n constructor(options: PopoverManagerOptions) {\n this.#hasActivePopover = options.hasActivePopover;\n this.#updateActivePopover = options.updateActivePopover;\n }\n\n setViewportElements(\n fileContainer: HTMLElement,\n codeElement: HTMLElement\n ): void {\n const viewportElementChanged =\n this.#fileContainer !== fileContainer ||\n this.#codeElement !== codeElement;\n this.#fileContainer = fileContainer;\n if (!viewportElementChanged) {\n return;\n }\n this.#codeElement = codeElement;\n // A new [data-code] element invalidates the cached viewport rects (e.g. a\n // full re-render loaded a different file, possibly at a different on-screen\n // position) even without an intervening scroll/resize event.\n this.#viewportRectsDirty = true;\n this.#viewportRectListenersDisposes?.forEach((dispose) => dispose());\n this.#viewportRectListenersDisposes = undefined;\n }\n\n cleanUp(): void {\n this.#codeElement = undefined;\n this.#fileContainer = undefined;\n this.#scrollContainer = undefined;\n this.#scrollContainerSource = undefined;\n this.#cachedCodeRect = undefined;\n this.#cachedScrollContainerRect = undefined;\n this.#cachedCodeScrollLeft = 0;\n this.#cachedCodeScrollTop = 0;\n this.#cachedCodeClientWidth = 0;\n this.#viewportRectsDirty = true;\n this.#viewportRectListenersDisposes?.forEach((dispose) => dispose());\n this.#viewportRectListenersDisposes = undefined;\n this.#placements.clear();\n }\n\n resetPlacement(placementKey = 'default'): void {\n this.#placements.delete(placementKey);\n }\n\n setPlacement(\n placement: 'preferred' | 'fallback',\n placementKey = 'default'\n ): void {\n this.#placements.set(placementKey, placement);\n }\n\n // Flips to the opposite side only when the preferred side would be clipped by\n // the real scrollport and the fallback side fits; without viewport geometry,\n // falls back to the document-edge signal so the first/last rows still flip.\n choosePlacement(input: {\n /** Bounds for the anchor's preferred side (e.g. above for backward, below for forward). */\n preferred: PopoverPlacementBounds;\n /** Bounds for the opposite edge we flip to when the preferred side has no room. */\n fallback: PopoverPlacementBounds;\n /** The visible scrollport in overlay coordinate space, or undefined without layout geometry (e.g. a detached test DOM). */\n viewport: PopoverPlacementBounds | undefined;\n /** The popover's measured height; 0 before it has laid out. */\n popoverHeight: number;\n /** Whether the anchor is within the document's first/last rows; only used as a fallback signal when `viewport` is unavailable. */\n atDocumentEdge: boolean;\n /** Keeps hysteresis independent when more than one popover kind is active. */\n placementKey?: string;\n }): 'preferred' | 'fallback' {\n const {\n preferred,\n fallback,\n viewport,\n popoverHeight,\n atDocumentEdge,\n placementKey = 'default',\n } = input;\n const previousPlacement = this.#placements.get(placementKey);\n let placement: 'preferred' | 'fallback';\n if (viewport !== undefined && popoverHeight > 0) {\n const fits = (bounds: PopoverPlacementBounds, margin = 0): boolean =>\n bounds.top >= viewport.top + margin &&\n bounds.bottom <= viewport.bottom - margin;\n if (\n previousPlacement === 'fallback' &&\n fits(fallback) &&\n !fits(preferred, POPOVER_FLIP_HYSTERESIS_PX)\n ) {\n placement = 'fallback';\n } else if (!fits(preferred) && fits(fallback)) {\n placement = 'fallback';\n } else {\n placement = 'preferred';\n }\n } else {\n placement = atDocumentEdge ? 'fallback' : 'preferred';\n }\n this.#placements.set(placementKey, placement);\n return placement;\n }\n\n /**\n * Returns the bounds of the popover in overlay coordinate space.\n */\n getPlacementBounds(): PopoverViewportBounds | undefined {\n const codeRect = this.#getCodeRect();\n if (codeRect === undefined) {\n return undefined;\n }\n const scrollContainerRect = this.#getScrollContainerRect();\n let topScreen: number;\n let bottomScreen: number;\n if (scrollContainerRect !== undefined) {\n topScreen = scrollContainerRect.top;\n bottomScreen = scrollContainerRect.bottom;\n } else {\n // No scrollable ancestor: the page itself scrolls, so the window is the\n // clip region.\n topScreen = 0;\n bottomScreen = window.innerHeight;\n }\n // The overlay that hosts the popover lives inside `[data-code]`, which uses\n // `overflow-y: clip` (see style.css). A short file smaller than the\n // scrollport therefore clips the popover at its own top/bottom even when the\n // window/scroll container still has room beyond those edges. Intersect the\n // scrollport with the code element's own box so a first/last-line popover\n // flips to the side that actually fits within that clip, not just within the\n // outer viewport.\n topScreen = Math.max(topScreen, codeRect.top);\n bottomScreen = Math.min(bottomScreen, codeRect.bottom);\n if (bottomScreen <= topScreen) {\n return undefined;\n }\n const codeScrollLeft = this.#cachedCodeScrollLeft;\n const codeScrollTop = this.#cachedCodeScrollTop;\n const codeViewportWidth =\n this.#cachedCodeClientWidth > 0\n ? this.#cachedCodeClientWidth\n : codeRect.width;\n const leftScreen =\n scrollContainerRect !== undefined ? scrollContainerRect.left : 0;\n const rightScreen =\n scrollContainerRect !== undefined\n ? scrollContainerRect.right\n : window.innerWidth;\n const codeViewportLeft = codeScrollLeft;\n const codeViewportRight = codeScrollLeft + codeViewportWidth;\n const visibleLeft = Math.max(\n codeViewportLeft,\n leftScreen - codeRect.left + codeScrollLeft\n );\n const visibleRight = Math.min(\n codeViewportRight,\n rightScreen - codeRect.left + codeScrollLeft\n );\n return {\n top: topScreen - codeRect.top + codeScrollTop,\n bottom: bottomScreen - codeRect.top + codeScrollTop,\n left: visibleLeft,\n right: Math.max(visibleLeft, visibleRight),\n };\n }\n\n // The nearest scrollable ancestor of the file container -- the element whose\n // overflow clips overlay widgets. Walks the light-DOM ancestor chain (the\n // overlay lives in the file container's shadow root) and caches the result per\n // file container so it is not re-resolved on every render.\n //\n // Known limitations: this only inspects light-DOM ancestors outside the\n // shadow root, so it cannot see arbitrary clip boundaries inside it and cannot\n // cross into an outer shadow root if the file container is itself nested in\n // another web component. It also only considers the *nearest* scrollable\n // ancestor, not the intersection of every clipping ancestor, so a popover\n // could still be clipped by an outer scroll context even when it fits within\n // this nearer one. The `[data-code]` element's own `overflow-y: clip` box is\n // handled separately in getPlacementBounds, which intersects it with whatever\n // scrollport this method resolves.\n #getScrollContainer(): HTMLElement | undefined {\n const fileContainer = this.#fileContainer;\n if (fileContainer === undefined) {\n return undefined;\n }\n if (this.#scrollContainerSource === fileContainer) {\n // A cached element can detach across re-mounts; re-resolve in that case\n // but otherwise trust the cache (including a cached \"no scroller\" result).\n if (\n this.#scrollContainer === undefined ||\n this.#scrollContainer.isConnected\n ) {\n return this.#scrollContainer;\n }\n }\n let element: HTMLElement | null = fileContainer.parentElement;\n while (element !== null) {\n const overflowY = getComputedStyle(element).overflowY;\n if (\n overflowY === 'auto' ||\n overflowY === 'scroll' ||\n overflowY === 'overlay'\n ) {\n this.#scrollContainer = element;\n this.#scrollContainerSource = fileContainer;\n return element;\n }\n element = element.parentElement;\n }\n this.#scrollContainer = undefined;\n this.#scrollContainerSource = fileContainer;\n return undefined;\n }\n\n // Lazily measures and caches the screen-space rects getOverlayViewport needs,\n // refreshing only when a scroll or resize event marks them dirty rather than\n // on every call. Selection-action placement can run once per keystroke while a\n // ranged selection stays open, so re-measuring via getBoundingClientRect on\n // every call would force a synchronous layout reflow on that hot path.\n #refreshViewportRectsIfNeeded(): void {\n if (!this.#viewportRectsDirty) {\n return;\n }\n this.#ensureViewportRectListeners();\n const codeElement = this.#codeElement;\n this.#cachedCodeRect = codeElement?.getBoundingClientRect();\n this.#cachedCodeScrollLeft = codeElement?.scrollLeft ?? 0;\n this.#cachedCodeScrollTop = codeElement?.scrollTop ?? 0;\n this.#cachedCodeClientWidth = codeElement?.clientWidth ?? 0;\n this.#cachedScrollContainerRect =\n this.#getScrollContainer()?.getBoundingClientRect();\n this.#viewportRectsDirty = false;\n }\n\n #getCodeRect(): DOMRect | undefined {\n this.#refreshViewportRectsIfNeeded();\n return this.#cachedCodeRect;\n }\n\n #getScrollContainerRect(): DOMRect | undefined {\n this.#refreshViewportRectsIfNeeded();\n return this.#cachedScrollContainerRect;\n }\n\n // Subscribes once to events that can move or resize the cached rects: a scroll\n // on the resolved scroll container (or the window, when the page itself\n // scrolls) and a window resize. Scrolling/resizing can change whether the open\n // popover still fits, so this re-runs placement rAF-throttled.\n #ensureViewportRectListeners(): void {\n if (this.#viewportRectListenersDisposes !== undefined) {\n return;\n }\n let repositionRafId: number | undefined;\n const markDirty = () => {\n this.#viewportRectsDirty = true;\n if (!this.#hasActivePopover() || repositionRafId !== undefined) {\n return;\n }\n repositionRafId = requestAnimationFrame(() => {\n repositionRafId = undefined;\n this.#updateActivePopover();\n });\n };\n const scroller = this.#getScrollContainer();\n const codeElement = this.#codeElement;\n this.#viewportRectListenersDisposes = [\n scroller !== undefined\n ? addEventListener(scroller, 'scroll', markDirty, { passive: true })\n : addEventListener(window, 'scroll', markDirty, { passive: true }),\n ...(codeElement !== undefined\n ? [\n addEventListener(codeElement, 'scroll', markDirty, {\n passive: true,\n }),\n ]\n : []),\n addEventListener(window, 'resize', markDirty, { passive: true }),\n () => {\n if (repositionRafId !== undefined) {\n cancelAnimationFrame(repositionRafId);\n repositionRafId = undefined;\n }\n },\n ];\n }\n}\n\nexport function setPopoverPositionStyles(\n popover: HTMLElement,\n {\n gutterWidth,\n placeAbove,\n viewport,\n x,\n y,\n }: {\n gutterWidth: number;\n placeAbove: boolean;\n viewport: PopoverViewportBounds | undefined;\n x: number;\n y: number;\n }\n): void {\n popover.style.setProperty('--gutter-width', gutterWidth + 'px');\n popover.style.setProperty('--popover-x', x + 'px');\n popover.style.setProperty('--popover-y', y + 'px');\n popover.style.setProperty('--popover-y-shift', placeAbove ? '-100%' : '0px');\n if (viewport === undefined) {\n popover.style.removeProperty('--popover-viewport-left');\n popover.style.removeProperty('--popover-viewport-right');\n popover.style.removeProperty('--popover-viewport-top');\n popover.style.removeProperty('--popover-viewport-bottom');\n return;\n }\n popover.style.setProperty('--popover-viewport-left', viewport.left + 'px');\n popover.style.setProperty('--popover-viewport-right', viewport.right + 'px');\n // Vertical bounds let the CSS clamp keep the popover on-screen when neither\n // side fits (e.g. a select-all spanning the first and last rows).\n popover.style.setProperty('--popover-viewport-top', viewport.top + 'px');\n popover.style.setProperty(\n '--popover-viewport-bottom',\n viewport.bottom + 'px'\n );\n}\n"],"mappings":";;AAIA,MAAa,yBAAyB;AAKtC,MAAa,6BAA6B;;;;;;AA+B1C,IAAa,iBAAb,MAA4B;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA,wBAAwB;CACxB,uBAAuB;CACvB,yBAAyB;CACzB,sBAAsB;CACtB;CACA,8BAAc,IAAI,IAAsC;CAExD;CACA;CAEA,YAAY,SAAgC;EAC1C,KAAK,oBAAoB,QAAQ;EACjC,KAAK,uBAAuB,QAAQ;CACtC;CAEA,oBACE,eACA,aACM;EACN,MAAM,yBACJ,KAAK,mBAAmB,iBACxB,KAAK,iBAAiB;EACxB,KAAK,iBAAiB;EACtB,IAAI,CAAC,wBACH;EAEF,KAAK,eAAe;EAIpB,KAAK,sBAAsB;EAC3B,KAAK,gCAAgC,SAAS,YAAY,QAAQ,CAAC;EACnE,KAAK,iCAAiC,KAAA;CACxC;CAEA,UAAgB;EACd,KAAK,eAAe,KAAA;EACpB,KAAK,iBAAiB,KAAA;EACtB,KAAK,mBAAmB,KAAA;EACxB,KAAK,yBAAyB,KAAA;EAC9B,KAAK,kBAAkB,KAAA;EACvB,KAAK,6BAA6B,KAAA;EAClC,KAAK,wBAAwB;EAC7B,KAAK,uBAAuB;EAC5B,KAAK,yBAAyB;EAC9B,KAAK,sBAAsB;EAC3B,KAAK,gCAAgC,SAAS,YAAY,QAAQ,CAAC;EACnE,KAAK,iCAAiC,KAAA;EACtC,KAAK,YAAY,MAAM;CACzB;CAEA,eAAe,eAAe,WAAiB;EAC7C,KAAK,YAAY,OAAO,YAAY;CACtC;CAEA,aACE,WACA,eAAe,WACT;EACN,KAAK,YAAY,IAAI,cAAc,SAAS;CAC9C;CAKA,gBAAgB,OAaa;EAC3B,MAAM,EACJ,WACA,UACA,UACA,eACA,gBACA,eAAe,cACb;EACJ,MAAM,oBAAoB,KAAK,YAAY,IAAI,YAAY;EAC3D,IAAI;EACJ,IAAI,aAAa,KAAA,KAAa,gBAAgB,GAAG;GAC/C,MAAM,QAAQ,QAAgC,SAAS,MACrD,OAAO,OAAO,SAAS,MAAM,UAC7B,OAAO,UAAU,SAAS,SAAS;GACrC,IACE,sBAAsB,cACtB,KAAK,QAAQ,KACb,CAAC,KAAK,WAAA,CAAqC,GAE3C,YAAY;QACP,IAAI,CAAC,KAAK,SAAS,KAAK,KAAK,QAAQ,GAC1C,YAAY;QAEZ,YAAY;EAEhB,OACE,YAAY,iBAAiB,aAAa;EAE5C,KAAK,YAAY,IAAI,cAAc,SAAS;EAC5C,OAAO;CACT;;;;CAKA,qBAAwD;EACtD,MAAM,WAAW,KAAK,aAAa;EACnC,IAAI,aAAa,KAAA,GACf;EAEF,MAAM,sBAAsB,KAAK,wBAAwB;EACzD,IAAI;EACJ,IAAI;EACJ,IAAI,wBAAwB,KAAA,GAAW;GACrC,YAAY,oBAAoB;GAChC,eAAe,oBAAoB;EACrC,OAAO;GAGL,YAAY;GACZ,eAAe,OAAO;EACxB;EAQA,YAAY,KAAK,IAAI,WAAW,SAAS,GAAG;EAC5C,eAAe,KAAK,IAAI,cAAc,SAAS,MAAM;EACrD,IAAI,gBAAgB,WAClB;EAEF,MAAM,iBAAiB,KAAK;EAC5B,MAAM,gBAAgB,KAAK;EAC3B,MAAM,oBACJ,KAAK,yBAAyB,IAC1B,KAAK,yBACL,SAAS;EACf,MAAM,aACJ,wBAAwB,KAAA,IAAY,oBAAoB,OAAO;EACjE,MAAM,cACJ,wBAAwB,KAAA,IACpB,oBAAoB,QACpB,OAAO;EACb,MAAM,mBAAmB;EACzB,MAAM,oBAAoB,iBAAiB;EAC3C,MAAM,cAAc,KAAK,IACvB,kBACA,aAAa,SAAS,OAAO,cAC/B;EACA,MAAM,eAAe,KAAK,IACxB,mBACA,cAAc,SAAS,OAAO,cAChC;EACA,OAAO;GACL,KAAK,YAAY,SAAS,MAAM;GAChC,QAAQ,eAAe,SAAS,MAAM;GACtC,MAAM;GACN,OAAO,KAAK,IAAI,aAAa,YAAY;EAC3C;CACF;CAgBA,sBAA+C;EAC7C,MAAM,gBAAgB,KAAK;EAC3B,IAAI,kBAAkB,KAAA,GACpB;EAEF,IAAI,KAAK,2BAA2B,eAIhC;OAAA,KAAK,qBAAqB,KAAA,KAC1B,KAAK,iBAAiB,aAEtB,OAAO,KAAK;EAAA;EAGhB,IAAI,UAA8B,cAAc;EAChD,OAAO,YAAY,MAAM;GACvB,MAAM,YAAY,iBAAiB,OAAO,CAAC,CAAC;GAC5C,IACE,cAAc,UACd,cAAc,YACd,cAAc,WACd;IACA,KAAK,mBAAmB;IACxB,KAAK,yBAAyB;IAC9B,OAAO;GACT;GACA,UAAU,QAAQ;EACpB;EACA,KAAK,mBAAmB,KAAA;EACxB,KAAK,yBAAyB;CAEhC;CAOA,gCAAsC;EACpC,IAAI,CAAC,KAAK,qBACR;EAEF,KAAK,6BAA6B;EAClC,MAAM,cAAc,KAAK;EACzB,KAAK,kBAAkB,aAAa,sBAAsB;EAC1D,KAAK,wBAAwB,aAAa,cAAc;EACxD,KAAK,uBAAuB,aAAa,aAAa;EACtD,KAAK,yBAAyB,aAAa,eAAe;EAC1D,KAAK,6BACH,KAAK,oBAAoB,CAAC,EAAE,sBAAsB;EACpD,KAAK,sBAAsB;CAC7B;CAEA,eAAoC;EAClC,KAAK,8BAA8B;EACnC,OAAO,KAAK;CACd;CAEA,0BAA+C;EAC7C,KAAK,8BAA8B;EACnC,OAAO,KAAK;CACd;CAMA,+BAAqC;EACnC,IAAI,KAAK,mCAAmC,KAAA,GAC1C;EAEF,IAAI;EACJ,MAAM,kBAAkB;GACtB,KAAK,sBAAsB;GAC3B,IAAI,CAAC,KAAK,kBAAkB,KAAK,oBAAoB,KAAA,GACnD;GAEF,kBAAkB,4BAA4B;IAC5C,kBAAkB,KAAA;IAClB,KAAK,qBAAqB;GAC5B,CAAC;EACH;EACA,MAAM,WAAW,KAAK,oBAAoB;EAC1C,MAAM,cAAc,KAAK;EACzB,KAAK,iCAAiC;GACpC,aAAa,KAAA,IACT,iBAAiB,UAAU,UAAU,WAAW,EAAE,SAAS,KAAK,CAAC,IACjE,iBAAiB,QAAQ,UAAU,WAAW,EAAE,SAAS,KAAK,CAAC;GACnE,GAAI,gBAAgB,KAAA,IAChB,CACE,iBAAiB,aAAa,UAAU,WAAW,EACjD,SAAS,KACX,CAAC,CACH,IACA,CAAC;GACL,iBAAiB,QAAQ,UAAU,WAAW,EAAE,SAAS,KAAK,CAAC;SACzD;IACJ,IAAI,oBAAoB,KAAA,GAAW;KACjC,qBAAqB,eAAe;KACpC,kBAAkB,KAAA;IACpB;GACF;EACF;CACF;AACF;AAEA,SAAgB,yBACd,SACA,EACE,aACA,YACA,UACA,GACA,KAQI;CACN,QAAQ,MAAM,YAAY,kBAAkB,cAAc,IAAI;CAC9D,QAAQ,MAAM,YAAY,eAAe,IAAI,IAAI;CACjD,QAAQ,MAAM,YAAY,eAAe,IAAI,IAAI;CACjD,QAAQ,MAAM,YAAY,qBAAqB,aAAa,UAAU,KAAK;CAC3E,IAAI,aAAa,KAAA,GAAW;EAC1B,QAAQ,MAAM,eAAe,yBAAyB;EACtD,QAAQ,MAAM,eAAe,0BAA0B;EACvD,QAAQ,MAAM,eAAe,wBAAwB;EACrD,QAAQ,MAAM,eAAe,2BAA2B;EACxD;CACF;CACA,QAAQ,MAAM,YAAY,2BAA2B,SAAS,OAAO,IAAI;CACzE,QAAQ,MAAM,YAAY,4BAA4B,SAAS,QAAQ,IAAI;CAG3E,QAAQ,MAAM,YAAY,0BAA0B,SAAS,MAAM,IAAI;CACvE,QAAQ,MAAM,YACZ,6BACA,SAAS,SAAS,IACpB;AACF"}
@@ -1,6 +1,5 @@
1
- import { ResolvedTextEdit } from "../types.js";
1
+ import { ResolvedTextEdit } from "./types.js";
2
2
  import { TextDocument } from "./textDocument.js";
3
-
4
3
  //#region src/editor/searchPanel.d.ts
5
4
  type MatchRange = [startOffset: number, endOffset: number];
6
5
  type SearchPanelMode = 'find' | 'replace';
@@ -12,7 +11,7 @@ interface SearchParams {
12
11
  regex: boolean;
13
12
  }
14
13
  interface SearchPanelOptions {
15
- textDocument: TextDocument<unknown>;
14
+ textDocument: TextDocument;
16
15
  containerElement: HTMLElement;
17
16
  defaultQuery: string;
18
17
  mode?: SearchPanelMode;
@@ -1 +1 @@
1
- {"version":3,"file":"searchPanel.d.ts","names":[],"sources":["../../src/editor/searchPanel.ts"],"mappings":";;;;KAQY,UAAA,IAAc,WAAA,UAAqB,SAAS;AAAA,KAE5C,eAAA;AAAA,UAEK,YAAA;EACf,IAAA;EACA,WAAA;EACA,aAAA;EACA,SAAA;EACA,KAAA;AAAA;AAAA,UAGe,kBAAA;EACf,YAAA,EAAc,YAAA;EACd,gBAAA,EAAkB,WAAA;EAClB,YAAA;EACA,IAAA,GAAO,eAAA;EACP,YAAA,GAAe,UAAA;EACf,aAAA,GAAgB,SAAA,EAAW,UAAA,EAAY,WAAA;EACvC,YAAA,GAAe,KAAA,EAAO,gBAAA;EACtB,QAAA,GACE,OAAA,EAAS,UAAA,IACT,OAAA;IAAY,aAAA;EAAA,MACT,UAAA;EACL,OAAA;AAAA;AAAA,cAGW,iBAAA;EAAA;EAQX,WAAA,CAAY,OAAA,EAAS,kBAAA;EAiZrB,KAAA;EAIA,QAAA,CAAS,YAAA;EAIT,aAAA,CAAc,OAAA;IAAY,aAAA;EAAA;EAI1B,OAAA,CAAQ,IAAA,EAAM,eAAe;EAO7B,KAAA;EAOA,OAAA;AAAA"}
1
+ {"version":3,"file":"searchPanel.d.ts","names":[],"sources":["../../src/editor/searchPanel.ts"],"mappings":";;;KAQY,cAAc,qBAAqB;KAEnC;UAEK;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf,cAAc;EACd,kBAAkB;EAClB;EACA,OAAO;EACP,eAAe;EACf,gBAAgB,WAAW,YAAY;EACvC,eAAe,OAAO;EACtB,WACE,SAAS,cACT;IAAY;QACT;EACL;;cAGW;;EAQX,YAAY,SAAS;EAiZrB;EAIA,SAAS;EAIT,cAAc;IAAY;;EAI1B,QAAQ,MAAM;EAOd;EAOA"}