monaco-editor 0.54.0 → 0.55.0-dev-20251007

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 (507) hide show
  1. package/dev/vs/assets/{css.worker-UBouhlx6.js → css.worker-BPWFUJr8.js} +21 -13
  2. package/dev/vs/assets/{editor.worker-Dt-rrJKL.js → editor.worker-BNmK7__C.js} +21 -13
  3. package/dev/vs/assets/{html.worker-z9P_0-Yg.js → html.worker-DArI7VaB.js} +21 -13
  4. package/dev/vs/assets/{json.worker-DL8PoUrj.js → json.worker-CWecjvZJ.js} +21 -13
  5. package/dev/vs/assets/{ts.worker-CcnreaRY.js → ts.worker-OSpMT55a.js} +21 -13
  6. package/dev/vs/basic-languages/monaco.contribution.js +18 -18
  7. package/dev/vs/{cssMode-YNsTpAl9.js → cssMode-iRwIbB8J.js} +1 -1
  8. package/dev/vs/editor/editor.main.css +18 -14
  9. package/dev/vs/editor/editor.main.js +6 -6
  10. package/dev/vs/{editor.api-BhD7pWdi.js → editor.api-BgcxwOJR.js} +619 -331
  11. package/dev/vs/{freemarker2-Ci5s7p-k.js → freemarker2-BcA-FoEq.js} +1 -1
  12. package/dev/vs/{handlebars-Cpd6mzVL.js → handlebars-CFCe3CTT.js} +1 -1
  13. package/dev/vs/{html-L3fuhF-c.js → html-C2k_b3vV.js} +1 -1
  14. package/dev/vs/{htmlMode-BL74tky3.js → htmlMode-B6H3nvmZ.js} +1 -1
  15. package/dev/vs/{javascript-DtYAOqDf.js → javascript-Ci3a-NjL.js} +1 -1
  16. package/dev/vs/{jsonMode-KHMzkiG2.js → jsonMode-PBs-6YJq.js} +1 -1
  17. package/dev/vs/language/css/monaco.contribution.js +2 -2
  18. package/dev/vs/language/html/monaco.contribution.js +2 -2
  19. package/dev/vs/language/json/monaco.contribution.js +2 -2
  20. package/dev/vs/language/typescript/monaco.contribution.js +2 -2
  21. package/dev/vs/{liquid-CDz0dGHZ.js → liquid-xiAvFKY7.js} +1 -1
  22. package/dev/vs/{lspLanguageFeatures-C8J-56s2.js → lspLanguageFeatures-Bn27dcIU.js} +1 -1
  23. package/dev/vs/{mdx-CRukMuk2.js → mdx-DI_S5KNw.js} +1 -1
  24. package/dev/vs/nls.messages.de.js +1 -1
  25. package/dev/vs/nls.messages.es.js +1 -1
  26. package/dev/vs/nls.messages.fr.js +1 -1
  27. package/dev/vs/nls.messages.it.js +1 -1
  28. package/dev/vs/nls.messages.ja.js +1 -1
  29. package/dev/vs/nls.messages.ko.js +1 -1
  30. package/dev/vs/nls.messages.ru.js +1 -1
  31. package/dev/vs/nls.messages.zh-cn.js +1 -1
  32. package/dev/vs/nls.messages.zh-tw.js +1 -1
  33. package/dev/vs/{python-CSlobbnO.js → python-Dygfp6S4.js} +1 -1
  34. package/dev/vs/{razor-CcKFJPeA.js → razor-DRuwtGaR.js} +1 -1
  35. package/dev/vs/{tsMode-DOj38qML.js → tsMode-Blwumg5f.js} +1 -1
  36. package/dev/vs/{typescript-qRP7tyf4.js → typescript-Bn0Trwe9.js} +1 -1
  37. package/dev/vs/{workers-CJWv4CcA.js → workers-Blx_hD2K.js} +1 -1
  38. package/dev/vs/{xml-CSLddLaW.js → xml-BfLQO-V6.js} +1 -1
  39. package/dev/vs/{yaml-TB97xlnI.js → yaml-DdSHCspc.js} +1 -1
  40. package/esm/nls.messages.de.js +1 -1
  41. package/esm/nls.messages.es.js +1 -1
  42. package/esm/nls.messages.fr.js +1 -1
  43. package/esm/nls.messages.it.js +1 -1
  44. package/esm/nls.messages.ja.js +1 -1
  45. package/esm/nls.messages.ko.js +1 -1
  46. package/esm/nls.messages.ru.js +1 -1
  47. package/esm/nls.messages.zh-cn.js +1 -1
  48. package/esm/nls.messages.zh-tw.js +1 -1
  49. package/esm/vs/base/browser/canIUse.js +1 -0
  50. package/esm/vs/base/browser/canIUse.js.map +1 -1
  51. package/esm/vs/base/browser/dom.js +9 -0
  52. package/esm/vs/base/browser/dom.js.map +1 -1
  53. package/esm/vs/base/browser/fastDomNode.js.map +1 -1
  54. package/esm/vs/base/browser/mouseEvent.js +3 -0
  55. package/esm/vs/base/browser/mouseEvent.js.map +1 -1
  56. package/esm/vs/base/browser/trustedTypes.js +2 -0
  57. package/esm/vs/base/browser/trustedTypes.js.map +1 -1
  58. package/esm/vs/base/browser/ui/list/listWidget.js +5 -5
  59. package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
  60. package/esm/vs/base/browser/ui/sash/sash.css +1 -1
  61. package/esm/vs/base/browser/ui/sash/sash.js +4 -0
  62. package/esm/vs/base/browser/ui/sash/sash.js.map +1 -1
  63. package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js +1 -1
  64. package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js.map +1 -1
  65. package/esm/vs/base/browser/ui/table/table.css +2 -2
  66. package/esm/vs/base/browser/ui/tree/abstractTree.js +7 -3
  67. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  68. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +4 -0
  69. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  70. package/esm/vs/base/browser/ui/tree/indexTreeModel.js +1 -0
  71. package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
  72. package/esm/vs/base/browser/ui/tree/media/tree.css +2 -2
  73. package/esm/vs/base/browser/webWorkerFactory.js +3 -0
  74. package/esm/vs/base/browser/webWorkerFactory.js.map +1 -1
  75. package/esm/vs/base/common/buffer.js.map +1 -1
  76. package/esm/vs/base/common/decorators.js +1 -0
  77. package/esm/vs/base/common/decorators.js.map +1 -1
  78. package/esm/vs/base/common/errors.js +1 -0
  79. package/esm/vs/base/common/errors.js.map +1 -1
  80. package/esm/vs/base/common/glob.js +1 -1
  81. package/esm/vs/base/common/glob.js.map +1 -1
  82. package/esm/vs/base/common/hash.js.map +1 -1
  83. package/esm/vs/base/common/hotReload.js +2 -0
  84. package/esm/vs/base/common/hotReload.js.map +1 -1
  85. package/esm/vs/base/common/hotReloadHelpers.js +1 -0
  86. package/esm/vs/base/common/hotReloadHelpers.js.map +1 -1
  87. package/esm/vs/base/common/lifecycle.js +19 -0
  88. package/esm/vs/base/common/lifecycle.js.map +1 -1
  89. package/esm/vs/base/common/map.js.map +1 -1
  90. package/esm/vs/base/common/marshalling.js +4 -0
  91. package/esm/vs/base/common/marshalling.js.map +1 -1
  92. package/esm/vs/base/common/network.js +1 -0
  93. package/esm/vs/base/common/network.js.map +1 -1
  94. package/esm/vs/base/common/objects.js +1 -0
  95. package/esm/vs/base/common/objects.js.map +1 -1
  96. package/esm/vs/base/common/observableInternal/changeTracker.js +4 -0
  97. package/esm/vs/base/common/observableInternal/changeTracker.js.map +1 -1
  98. package/esm/vs/base/common/observableInternal/debugLocation.js +1 -0
  99. package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
  100. package/esm/vs/base/common/observableInternal/debugName.js +1 -0
  101. package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
  102. package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js +1 -0
  103. package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js.map +1 -1
  104. package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js +1 -0
  105. package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js.map +1 -1
  106. package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js +1 -0
  107. package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js.map +1 -1
  108. package/esm/vs/base/common/observableInternal/observables/derived.js +7 -1
  109. package/esm/vs/base/common/observableInternal/observables/derived.js.map +1 -1
  110. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +2 -0
  111. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
  112. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -0
  113. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
  114. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +1 -0
  115. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
  116. package/esm/vs/base/common/process.js +1 -0
  117. package/esm/vs/base/common/process.js.map +1 -1
  118. package/esm/vs/base/common/product.js.map +1 -1
  119. package/esm/vs/base/common/types.js +2 -0
  120. package/esm/vs/base/common/types.js.map +1 -1
  121. package/esm/vs/base/common/worker/webWorker.js +26 -14
  122. package/esm/vs/base/common/worker/webWorker.js.map +1 -1
  123. package/esm/vs/base/parts/sandbox/common/sandboxTypes.js +2 -0
  124. package/esm/vs/base/parts/sandbox/common/sandboxTypes.js.map +1 -0
  125. package/esm/vs/basic-languages/_.contribution.js +1 -1
  126. package/esm/vs/basic-languages/abap/abap.contribution.js +1 -1
  127. package/esm/vs/basic-languages/abap/abap.js +1 -1
  128. package/esm/vs/basic-languages/apex/apex.contribution.js +1 -1
  129. package/esm/vs/basic-languages/apex/apex.js +1 -1
  130. package/esm/vs/basic-languages/azcli/azcli.contribution.js +1 -1
  131. package/esm/vs/basic-languages/azcli/azcli.js +1 -1
  132. package/esm/vs/basic-languages/bat/bat.contribution.js +1 -1
  133. package/esm/vs/basic-languages/bat/bat.js +1 -1
  134. package/esm/vs/basic-languages/bicep/bicep.contribution.js +1 -1
  135. package/esm/vs/basic-languages/bicep/bicep.js +1 -1
  136. package/esm/vs/basic-languages/cameligo/cameligo.contribution.js +1 -1
  137. package/esm/vs/basic-languages/cameligo/cameligo.js +1 -1
  138. package/esm/vs/basic-languages/clojure/clojure.contribution.js +1 -1
  139. package/esm/vs/basic-languages/clojure/clojure.js +1 -1
  140. package/esm/vs/basic-languages/coffee/coffee.contribution.js +1 -1
  141. package/esm/vs/basic-languages/coffee/coffee.js +1 -1
  142. package/esm/vs/basic-languages/cpp/cpp.contribution.js +1 -1
  143. package/esm/vs/basic-languages/cpp/cpp.js +1 -1
  144. package/esm/vs/basic-languages/csharp/csharp.contribution.js +1 -1
  145. package/esm/vs/basic-languages/csharp/csharp.js +1 -1
  146. package/esm/vs/basic-languages/csp/csp.contribution.js +1 -1
  147. package/esm/vs/basic-languages/csp/csp.js +1 -1
  148. package/esm/vs/basic-languages/css/css.contribution.js +1 -1
  149. package/esm/vs/basic-languages/css/css.js +1 -1
  150. package/esm/vs/basic-languages/cypher/cypher.contribution.js +1 -1
  151. package/esm/vs/basic-languages/cypher/cypher.js +1 -1
  152. package/esm/vs/basic-languages/dart/dart.contribution.js +1 -1
  153. package/esm/vs/basic-languages/dart/dart.js +1 -1
  154. package/esm/vs/basic-languages/dockerfile/dockerfile.contribution.js +1 -1
  155. package/esm/vs/basic-languages/dockerfile/dockerfile.js +1 -1
  156. package/esm/vs/basic-languages/ecl/ecl.contribution.js +1 -1
  157. package/esm/vs/basic-languages/ecl/ecl.js +1 -1
  158. package/esm/vs/basic-languages/elixir/elixir.contribution.js +1 -1
  159. package/esm/vs/basic-languages/elixir/elixir.js +1 -1
  160. package/esm/vs/basic-languages/flow9/flow9.contribution.js +1 -1
  161. package/esm/vs/basic-languages/flow9/flow9.js +1 -1
  162. package/esm/vs/basic-languages/freemarker2/freemarker2.contribution.js +1 -1
  163. package/esm/vs/basic-languages/freemarker2/freemarker2.js +1 -1
  164. package/esm/vs/basic-languages/fsharp/fsharp.contribution.js +1 -1
  165. package/esm/vs/basic-languages/fsharp/fsharp.js +1 -1
  166. package/esm/vs/basic-languages/go/go.contribution.js +1 -1
  167. package/esm/vs/basic-languages/go/go.js +1 -1
  168. package/esm/vs/basic-languages/graphql/graphql.contribution.js +1 -1
  169. package/esm/vs/basic-languages/graphql/graphql.js +1 -1
  170. package/esm/vs/basic-languages/handlebars/handlebars.contribution.js +1 -1
  171. package/esm/vs/basic-languages/handlebars/handlebars.js +1 -1
  172. package/esm/vs/basic-languages/hcl/hcl.contribution.js +1 -1
  173. package/esm/vs/basic-languages/hcl/hcl.js +1 -1
  174. package/esm/vs/basic-languages/html/html.contribution.js +1 -1
  175. package/esm/vs/basic-languages/html/html.js +1 -1
  176. package/esm/vs/basic-languages/ini/ini.contribution.js +1 -1
  177. package/esm/vs/basic-languages/ini/ini.js +1 -1
  178. package/esm/vs/basic-languages/java/java.contribution.js +1 -1
  179. package/esm/vs/basic-languages/java/java.js +1 -1
  180. package/esm/vs/basic-languages/javascript/javascript.contribution.js +1 -1
  181. package/esm/vs/basic-languages/javascript/javascript.js +1 -1
  182. package/esm/vs/basic-languages/julia/julia.contribution.js +1 -1
  183. package/esm/vs/basic-languages/julia/julia.js +1 -1
  184. package/esm/vs/basic-languages/kotlin/kotlin.contribution.js +1 -1
  185. package/esm/vs/basic-languages/kotlin/kotlin.js +1 -1
  186. package/esm/vs/basic-languages/less/less.contribution.js +1 -1
  187. package/esm/vs/basic-languages/less/less.js +1 -1
  188. package/esm/vs/basic-languages/lexon/lexon.contribution.js +1 -1
  189. package/esm/vs/basic-languages/lexon/lexon.js +1 -1
  190. package/esm/vs/basic-languages/liquid/liquid.contribution.js +1 -1
  191. package/esm/vs/basic-languages/liquid/liquid.js +1 -1
  192. package/esm/vs/basic-languages/lua/lua.contribution.js +1 -1
  193. package/esm/vs/basic-languages/lua/lua.js +1 -1
  194. package/esm/vs/basic-languages/m3/m3.contribution.js +1 -1
  195. package/esm/vs/basic-languages/m3/m3.js +1 -1
  196. package/esm/vs/basic-languages/markdown/markdown.contribution.js +1 -1
  197. package/esm/vs/basic-languages/markdown/markdown.js +1 -1
  198. package/esm/vs/basic-languages/mdx/mdx.contribution.js +1 -1
  199. package/esm/vs/basic-languages/mdx/mdx.js +1 -1
  200. package/esm/vs/basic-languages/mips/mips.contribution.js +1 -1
  201. package/esm/vs/basic-languages/mips/mips.js +1 -1
  202. package/esm/vs/basic-languages/monaco.contribution.js +1 -1
  203. package/esm/vs/basic-languages/msdax/msdax.contribution.js +1 -1
  204. package/esm/vs/basic-languages/msdax/msdax.js +1 -1
  205. package/esm/vs/basic-languages/mysql/mysql.contribution.js +1 -1
  206. package/esm/vs/basic-languages/mysql/mysql.js +1 -1
  207. package/esm/vs/basic-languages/objective-c/objective-c.contribution.js +1 -1
  208. package/esm/vs/basic-languages/objective-c/objective-c.js +1 -1
  209. package/esm/vs/basic-languages/pascal/pascal.contribution.js +1 -1
  210. package/esm/vs/basic-languages/pascal/pascal.js +1 -1
  211. package/esm/vs/basic-languages/pascaligo/pascaligo.contribution.js +1 -1
  212. package/esm/vs/basic-languages/pascaligo/pascaligo.js +1 -1
  213. package/esm/vs/basic-languages/perl/perl.contribution.js +1 -1
  214. package/esm/vs/basic-languages/perl/perl.js +1 -1
  215. package/esm/vs/basic-languages/pgsql/pgsql.contribution.js +1 -1
  216. package/esm/vs/basic-languages/pgsql/pgsql.js +1 -1
  217. package/esm/vs/basic-languages/php/php.contribution.js +1 -1
  218. package/esm/vs/basic-languages/php/php.js +1 -1
  219. package/esm/vs/basic-languages/pla/pla.contribution.js +1 -1
  220. package/esm/vs/basic-languages/pla/pla.js +1 -1
  221. package/esm/vs/basic-languages/postiats/postiats.contribution.js +1 -1
  222. package/esm/vs/basic-languages/postiats/postiats.js +1 -1
  223. package/esm/vs/basic-languages/powerquery/powerquery.contribution.js +1 -1
  224. package/esm/vs/basic-languages/powerquery/powerquery.js +1 -1
  225. package/esm/vs/basic-languages/powershell/powershell.contribution.js +1 -1
  226. package/esm/vs/basic-languages/powershell/powershell.js +1 -1
  227. package/esm/vs/basic-languages/protobuf/protobuf.contribution.js +1 -1
  228. package/esm/vs/basic-languages/protobuf/protobuf.js +1 -1
  229. package/esm/vs/basic-languages/pug/pug.contribution.js +1 -1
  230. package/esm/vs/basic-languages/pug/pug.js +1 -1
  231. package/esm/vs/basic-languages/python/python.contribution.js +1 -1
  232. package/esm/vs/basic-languages/python/python.js +1 -1
  233. package/esm/vs/basic-languages/qsharp/qsharp.contribution.js +1 -1
  234. package/esm/vs/basic-languages/qsharp/qsharp.js +1 -1
  235. package/esm/vs/basic-languages/r/r.contribution.js +1 -1
  236. package/esm/vs/basic-languages/r/r.js +1 -1
  237. package/esm/vs/basic-languages/razor/razor.contribution.js +1 -1
  238. package/esm/vs/basic-languages/razor/razor.js +1 -1
  239. package/esm/vs/basic-languages/redis/redis.contribution.js +1 -1
  240. package/esm/vs/basic-languages/redis/redis.js +1 -1
  241. package/esm/vs/basic-languages/redshift/redshift.contribution.js +1 -1
  242. package/esm/vs/basic-languages/redshift/redshift.js +1 -1
  243. package/esm/vs/basic-languages/restructuredtext/restructuredtext.contribution.js +1 -1
  244. package/esm/vs/basic-languages/restructuredtext/restructuredtext.js +1 -1
  245. package/esm/vs/basic-languages/ruby/ruby.contribution.js +1 -1
  246. package/esm/vs/basic-languages/ruby/ruby.js +1 -1
  247. package/esm/vs/basic-languages/rust/rust.contribution.js +1 -1
  248. package/esm/vs/basic-languages/rust/rust.js +1 -1
  249. package/esm/vs/basic-languages/sb/sb.contribution.js +1 -1
  250. package/esm/vs/basic-languages/sb/sb.js +1 -1
  251. package/esm/vs/basic-languages/scala/scala.contribution.js +1 -1
  252. package/esm/vs/basic-languages/scala/scala.js +1 -1
  253. package/esm/vs/basic-languages/scheme/scheme.contribution.js +1 -1
  254. package/esm/vs/basic-languages/scheme/scheme.js +1 -1
  255. package/esm/vs/basic-languages/scss/scss.contribution.js +1 -1
  256. package/esm/vs/basic-languages/scss/scss.js +1 -1
  257. package/esm/vs/basic-languages/shell/shell.contribution.js +1 -1
  258. package/esm/vs/basic-languages/shell/shell.js +1 -1
  259. package/esm/vs/basic-languages/solidity/solidity.contribution.js +1 -1
  260. package/esm/vs/basic-languages/solidity/solidity.js +1 -1
  261. package/esm/vs/basic-languages/sophia/sophia.contribution.js +1 -1
  262. package/esm/vs/basic-languages/sophia/sophia.js +1 -1
  263. package/esm/vs/basic-languages/sparql/sparql.contribution.js +1 -1
  264. package/esm/vs/basic-languages/sparql/sparql.js +1 -1
  265. package/esm/vs/basic-languages/sql/sql.contribution.js +1 -1
  266. package/esm/vs/basic-languages/sql/sql.js +1 -1
  267. package/esm/vs/basic-languages/st/st.contribution.js +1 -1
  268. package/esm/vs/basic-languages/st/st.js +1 -1
  269. package/esm/vs/basic-languages/swift/swift.contribution.js +1 -1
  270. package/esm/vs/basic-languages/swift/swift.js +1 -1
  271. package/esm/vs/basic-languages/systemverilog/systemverilog.contribution.js +1 -1
  272. package/esm/vs/basic-languages/systemverilog/systemverilog.js +1 -1
  273. package/esm/vs/basic-languages/tcl/tcl.contribution.js +1 -1
  274. package/esm/vs/basic-languages/tcl/tcl.js +1 -1
  275. package/esm/vs/basic-languages/twig/twig.contribution.js +1 -1
  276. package/esm/vs/basic-languages/twig/twig.js +1 -1
  277. package/esm/vs/basic-languages/typescript/typescript.contribution.js +1 -1
  278. package/esm/vs/basic-languages/typescript/typescript.js +1 -1
  279. package/esm/vs/basic-languages/typespec/typespec.contribution.js +1 -1
  280. package/esm/vs/basic-languages/typespec/typespec.js +1 -1
  281. package/esm/vs/basic-languages/vb/vb.contribution.js +1 -1
  282. package/esm/vs/basic-languages/vb/vb.js +1 -1
  283. package/esm/vs/basic-languages/wgsl/wgsl.contribution.js +1 -1
  284. package/esm/vs/basic-languages/wgsl/wgsl.js +1 -1
  285. package/esm/vs/basic-languages/xml/xml.contribution.js +1 -1
  286. package/esm/vs/basic-languages/xml/xml.js +1 -1
  287. package/esm/vs/basic-languages/yaml/yaml.contribution.js +1 -1
  288. package/esm/vs/basic-languages/yaml/yaml.js +1 -1
  289. package/esm/vs/editor/browser/config/editorConfiguration.js +3 -2
  290. package/esm/vs/editor/browser/config/editorConfiguration.js.map +1 -1
  291. package/esm/vs/editor/browser/config/migrateOptions.js +1 -1
  292. package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
  293. package/esm/vs/editor/browser/controller/editContext/native/editContextFactory.js.map +1 -1
  294. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js +2 -0
  295. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js.map +1 -1
  296. package/esm/vs/editor/browser/controller/mouseHandler.js +2 -1
  297. package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
  298. package/esm/vs/editor/browser/controller/mouseTarget.js +7 -0
  299. package/esm/vs/editor/browser/controller/mouseTarget.js.map +1 -1
  300. package/esm/vs/editor/browser/controller/pointerHandler.js.map +1 -1
  301. package/esm/vs/editor/browser/coreCommands.js.map +1 -1
  302. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  303. package/esm/vs/editor/browser/editorDom.js.map +1 -1
  304. package/esm/vs/editor/browser/editorExtensions.js.map +1 -1
  305. package/esm/vs/editor/browser/gpu/gpuUtils.js +1 -0
  306. package/esm/vs/editor/browser/gpu/gpuUtils.js.map +1 -1
  307. package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -0
  308. package/esm/vs/editor/browser/gpu/viewGpuContext.js.map +1 -1
  309. package/esm/vs/editor/browser/services/abstractCodeEditorService.js.map +1 -1
  310. package/esm/vs/editor/browser/services/bulkEditService.js.map +1 -1
  311. package/esm/vs/editor/browser/services/codeEditorService.js.map +1 -1
  312. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  313. package/esm/vs/editor/browser/services/hoverService/hover.css +2 -0
  314. package/esm/vs/editor/browser/services/hoverService/hoverService.js.map +1 -1
  315. package/esm/vs/editor/browser/services/hoverService/hoverWidget.js +1 -1
  316. package/esm/vs/editor/browser/services/hoverService/hoverWidget.js.map +1 -1
  317. package/esm/vs/editor/browser/services/inlineCompletionsService.js +8 -8
  318. package/esm/vs/editor/browser/services/inlineCompletionsService.js.map +1 -1
  319. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  320. package/esm/vs/editor/browser/view/viewLayer.js +1 -1
  321. package/esm/vs/editor/browser/view/viewLayer.js.map +1 -1
  322. package/esm/vs/editor/browser/view.js.map +1 -1
  323. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +1 -0
  324. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
  325. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +1 -0
  326. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js.map +1 -1
  327. package/esm/vs/editor/browser/widget/codeEditor/codeEditorContributions.js.map +1 -1
  328. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +4 -1
  329. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  330. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -0
  331. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js.map +1 -1
  332. package/esm/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.js.map +1 -1
  333. package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js +1 -0
  334. package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js.map +1 -1
  335. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +1 -0
  336. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js.map +1 -1
  337. package/esm/vs/editor/browser/widget/diffEditor/utils.js +2 -0
  338. package/esm/vs/editor/browser/widget/diffEditor/utils.js.map +1 -1
  339. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -0
  340. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js.map +1 -1
  341. package/esm/vs/editor/common/config/editorOptions.js +122 -68
  342. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  343. package/esm/vs/editor/common/config/fontInfo.js +32 -16
  344. package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
  345. package/esm/vs/editor/common/config/fontInfoFromSettings.js +16 -0
  346. package/esm/vs/editor/common/config/fontInfoFromSettings.js.map +1 -0
  347. package/esm/vs/editor/common/core/edits/edit.js +1 -0
  348. package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
  349. package/esm/vs/editor/common/core/edits/stringEdit.js +2 -0
  350. package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
  351. package/esm/vs/editor/common/core/position.js +1 -1
  352. package/esm/vs/editor/common/core/position.js.map +1 -1
  353. package/esm/vs/editor/common/core/range.js +1 -1
  354. package/esm/vs/editor/common/core/range.js.map +1 -1
  355. package/esm/vs/editor/common/core/selection.js +1 -1
  356. package/esm/vs/editor/common/core/selection.js.map +1 -1
  357. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  358. package/esm/vs/editor/common/editorCommon.js.map +1 -1
  359. package/esm/vs/editor/common/languages.js +1 -1
  360. package/esm/vs/editor/common/languages.js.map +1 -1
  361. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js +14 -0
  362. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js.map +1 -1
  363. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js +2 -0
  364. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js.map +1 -1
  365. package/esm/vs/editor/common/model/textModel.js +1 -1
  366. package/esm/vs/editor/common/model/textModel.js.map +1 -1
  367. package/esm/vs/editor/common/model.js +1 -1
  368. package/esm/vs/editor/common/model.js.map +1 -1
  369. package/esm/vs/editor/common/services/editorBaseApi.js.map +1 -1
  370. package/esm/vs/editor/common/services/editorWebWorker.js +1 -0
  371. package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
  372. package/esm/vs/editor/common/services/editorWorkerHost.js.map +1 -1
  373. package/esm/vs/editor/common/services/modelService.js +14 -21
  374. package/esm/vs/editor/common/services/modelService.js.map +1 -1
  375. package/esm/vs/editor/common/textModelEditSource.js +2 -0
  376. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  377. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +40 -1
  378. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
  379. package/esm/vs/editor/common/viewModel/viewModelImpl.js +2 -1
  380. package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
  381. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +1 -1
  382. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js.map +1 -1
  383. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +1 -1
  384. package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
  385. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +1 -0
  386. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
  387. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +1 -0
  388. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
  389. package/esm/vs/editor/contrib/find/browser/findModel.js +1 -0
  390. package/esm/vs/editor/contrib/find/browser/findModel.js.map +1 -1
  391. package/esm/vs/editor/contrib/find/browser/findWidget.css +5 -5
  392. package/esm/vs/editor/contrib/folding/browser/folding.css +4 -4
  393. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js.map +1 -1
  394. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  395. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js.map +1 -1
  396. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +30 -14
  397. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
  398. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +4 -3
  399. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  400. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +56 -7
  401. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  402. package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js +1 -0
  403. package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js.map +1 -1
  404. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +2 -0
  405. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  406. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -0
  407. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  408. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +1 -1
  409. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
  410. package/esm/vs/editor/contrib/rename/browser/renameWidget.js.map +1 -1
  411. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.css +2 -0
  412. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +2 -0
  413. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
  414. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js.map +1 -1
  415. package/esm/vs/editor/editor.api.d.ts +8 -8
  416. package/esm/vs/editor/editor.api.js +4 -0
  417. package/esm/vs/editor/editor.api.js.map +1 -1
  418. package/esm/vs/editor/editor.main.js +1 -1
  419. package/esm/vs/editor/editor.worker.js +1 -1
  420. package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
  421. package/esm/vs/editor/standalone/browser/standaloneEditor.js +37 -0
  422. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  423. package/esm/vs/editor/standalone/browser/standaloneLanguages.js +37 -0
  424. package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
  425. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  426. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
  427. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js +3 -0
  428. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js.map +1 -1
  429. package/esm/vs/language/css/css.worker.js +1 -1
  430. package/esm/vs/language/css/cssMode.js +1 -1
  431. package/esm/vs/language/css/monaco.contribution.js +1 -1
  432. package/esm/vs/language/html/html.worker.js +1 -1
  433. package/esm/vs/language/html/htmlMode.js +1 -1
  434. package/esm/vs/language/html/monaco.contribution.js +1 -1
  435. package/esm/vs/language/json/json.worker.js +1 -1
  436. package/esm/vs/language/json/jsonMode.js +1 -1
  437. package/esm/vs/language/json/monaco.contribution.js +1 -1
  438. package/esm/vs/language/typescript/monaco.contribution.js +1 -1
  439. package/esm/vs/language/typescript/ts.worker.js +1 -1
  440. package/esm/vs/language/typescript/tsMode.js +1 -1
  441. package/esm/vs/platform/accessibility/browser/accessibilityService.js +2 -2
  442. package/esm/vs/platform/accessibility/browser/accessibilityService.js.map +1 -1
  443. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  444. package/esm/vs/platform/commands/common/commands.js.map +1 -1
  445. package/esm/vs/platform/contextkey/common/contextkey.js +5 -0
  446. package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
  447. package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js +1 -0
  448. package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js.map +1 -1
  449. package/esm/vs/platform/dnd/browser/dnd.js +2 -0
  450. package/esm/vs/platform/dnd/browser/dnd.js.map +1 -1
  451. package/esm/vs/platform/instantiation/common/descriptors.js.map +1 -1
  452. package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
  453. package/esm/vs/platform/instantiation/common/instantiationService.js +1 -0
  454. package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
  455. package/esm/vs/platform/list/browser/listService.js +5 -0
  456. package/esm/vs/platform/list/browser/listService.js.map +1 -1
  457. package/esm/vs/platform/log/common/log.js.map +1 -1
  458. package/esm/vs/platform/log/common/logService.js.map +1 -1
  459. package/esm/vs/platform/observable/common/wrapInHotClass.js +2 -0
  460. package/esm/vs/platform/observable/common/wrapInHotClass.js.map +1 -1
  461. package/esm/vs/platform/observable/common/wrapInReloadableClass.js +3 -0
  462. package/esm/vs/platform/observable/common/wrapInReloadableClass.js.map +1 -1
  463. package/esm/vs/platform/product/common/product.js +69 -0
  464. package/esm/vs/platform/product/common/product.js.map +1 -0
  465. package/esm/vs/platform/quickinput/browser/quickInput.js +1 -1
  466. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  467. package/min/vs/assets/{css.worker-cO8rX8Iy.js → css.worker-BVuiDuBy.js} +2 -2
  468. package/min/vs/assets/{editor.worker-DM0G1eFj.js → editor.worker-jxNOmuJM.js} +9 -9
  469. package/min/vs/assets/{html.worker-BruuIJkK.js → html.worker-DjzoR3Nq.js} +12 -12
  470. package/min/vs/assets/{json.worker-DghZTZS7.js → json.worker-BHO4PP-I.js} +16 -16
  471. package/min/vs/assets/{ts.worker-C4E4vgbE.js → ts.worker-BbmlTFxS.js} +24 -24
  472. package/min/vs/basic-languages/monaco.contribution.js +1 -1
  473. package/min/vs/{cssMode-CGp6dFmI.js → cssMode-CihSYqKE.js} +1 -1
  474. package/min/vs/editor/editor.main.css +1 -1
  475. package/min/vs/editor/editor.main.js +1 -1
  476. package/min/vs/{editor.api-i0YVFWkl.js → editor.api-BBvXWtgc.js} +171 -171
  477. package/min/vs/{freemarker2-CJME-ah8.js → freemarker2-Ce3sL2WS.js} +1 -1
  478. package/min/vs/{handlebars-NccI6MVO.js → handlebars-Bb3ZjWAt.js} +1 -1
  479. package/min/vs/{html-K7M-xuod.js → html-CsBZo_Ud.js} +1 -1
  480. package/min/vs/{htmlMode-DtjCNH-N.js → htmlMode-BaDSxMv5.js} +1 -1
  481. package/min/vs/{javascript-CUpTMdAr.js → javascript-2_kuM68q.js} +1 -1
  482. package/min/vs/{jsonMode-CJjR_ECa.js → jsonMode-PX5jRR_L.js} +1 -1
  483. package/min/vs/language/css/monaco.contribution.js +1 -1
  484. package/min/vs/language/html/monaco.contribution.js +1 -1
  485. package/min/vs/language/json/monaco.contribution.js +1 -1
  486. package/min/vs/language/typescript/monaco.contribution.js +1 -1
  487. package/min/vs/{liquid-STktYroN.js → liquid-DREB9HpI.js} +1 -1
  488. package/min/vs/{lspLanguageFeatures-A02kBDb6.js → lspLanguageFeatures-D8gqdJoR.js} +1 -1
  489. package/min/vs/{mdx-C6mq4H94.js → mdx-BNAJfpzr.js} +1 -1
  490. package/min/vs/nls.messages.de.js +1 -1
  491. package/min/vs/nls.messages.es.js +1 -1
  492. package/min/vs/nls.messages.fr.js +1 -1
  493. package/min/vs/nls.messages.it.js +1 -1
  494. package/min/vs/nls.messages.ja.js +1 -1
  495. package/min/vs/nls.messages.ko.js +1 -1
  496. package/min/vs/nls.messages.ru.js +1 -1
  497. package/min/vs/nls.messages.zh-cn.js +1 -1
  498. package/min/vs/nls.messages.zh-tw.js +1 -1
  499. package/min/vs/{python-B-Y2SC3b.js → python-CLgnWbAg.js} +1 -1
  500. package/min/vs/{razor-JzN5FpSg.js → razor-pD9XaIj8.js} +1 -1
  501. package/min/vs/{tsMode-i88JHxDY.js → tsMode-DDFENmoA.js} +1 -1
  502. package/min/vs/{typescript-4zug7YwV.js → typescript-CWlXqxY6.js} +1 -1
  503. package/min/vs/{workers-CbP2cVmy.js → workers-Da5d5FZY.js} +1 -1
  504. package/min/vs/{xml-DRHZuZwg.js → xml-B8kusTdt.js} +1 -1
  505. package/min/vs/{yaml-CkWIGXBM.js → yaml-CxSYV94R.js} +1 -1
  506. package/monaco.d.ts +8 -8
  507. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts","vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts"],"names":[],"mappings":"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","file":"ghostTextView.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(GhostTextView);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(GhostTextView);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts","vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.ts"],"names":[],"mappings":"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","file":"ghostTextView.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(GhostTextView);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { renderIcon } from '../../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Emitter, Event } from '../../../../../../base/common/event.js';\nimport { createHotClass } from '../../../../../../base/common/hotReloadHelpers.js';\nimport { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../../../base/common/lifecycle.js';\nimport { IObservable, autorun, autorunWithStore, constObservable, derived, observableSignalFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport * as strings from '../../../../../../base/common/strings.js';\nimport { applyFontInfo } from '../../../../../browser/config/domFontInfo.js';\nimport { ContentWidgetPositionPreference, ICodeEditor, IContentWidgetPosition, IViewZoneChangeAccessor, MouseTargetType } from '../../../../../browser/editorBrowser.js';\nimport { observableCodeEditor } from '../../../../../browser/observableCodeEditor.js';\nimport { EditorFontLigatures, EditorOption, IComputedEditorOptions } from '../../../../../common/config/editorOptions.js';\nimport { StringEdit, StringReplacement } from '../../../../../common/core/edits/stringEdit.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { Range } from '../../../../../common/core/range.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { IconPath } from '../../../../../common/languages.js';\nimport { ILanguageService } from '../../../../../common/languages/language.js';\nimport { IModelDeltaDecoration, ITextModel, InjectedTextCursorStops, PositionAffinity } from '../../../../../common/model.js';\nimport { LineTokens } from '../../../../../common/tokens/lineTokens.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { GhostText, GhostTextReplacement, IGhostTextLine } from '../../model/ghostText.js';\nimport { RangeSingleLine } from '../../../../../common/core/ranges/rangeSingleLine.js';\nimport { ColumnRange } from '../../../../../common/core/ranges/columnRange.js';\nimport { addDisposableListener, getWindow, isHTMLElement, n } from '../../../../../../base/browser/dom.js';\nimport './ghostTextView.css';\nimport { IMouseEvent, StandardMouseEvent } from '../../../../../../base/browser/mouseEvent.js';\nimport { CodeEditorWidget } from '../../../../../browser/widget/codeEditor/codeEditorWidget.js';\nimport { TokenWithTextArray } from '../../../../../common/tokens/tokenWithTextArray.js';\nimport { InlineCompletionViewData } from '../inlineEdits/inlineEditsViewInterface.js';\nimport { InlineDecorationType } from '../../../../../common/viewModel/inlineDecorations.js';\nimport { sum } from '../../../../../../base/common/arrays.js';\n\nexport interface IGhostTextWidgetModel {\n\treadonly targetTextModel: IObservable<ITextModel | undefined>;\n\treadonly ghostText: IObservable<GhostText | GhostTextReplacement | undefined>;\n\treadonly warning: IObservable<{ icon: IconPath | undefined } | undefined>;\n\treadonly minReservedLineCount: IObservable<number>;\n\n\treadonly handleInlineCompletionShown: IObservable<(viewData: InlineCompletionViewData) => void>;\n}\n\nconst USE_SQUIGGLES_FOR_WARNING = true;\nconst GHOST_TEXT_CLASS_NAME = 'ghost-text';\n\nexport class GhostTextView extends Disposable {\n\tprivate readonly _isDisposed;\n\tprivate readonly _editorObs;\n\tpublic static hot = createHotClass(GhostTextView);\n\n\tprivate _warningState;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _model: IGhostTextWidgetModel,\n\t\tprivate readonly _options: IObservable<{\n\t\t\textraClasses?: string[];\n\t\t\tsyntaxHighlightingEnabled: boolean;\n\t\t}>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t\t@ILanguageService private readonly _languageService: ILanguageService,\n\t) {\n\t\tsuper();\n\t\tthis._isDisposed = observableValue(this, false);\n\t\tthis._editorObs = observableCodeEditor(this._editor);\n\t\tthis._warningState = derived(reader => {\n\t\t\tconst gt = this._model.ghostText.read(reader);\n\t\t\tif (!gt) { return undefined; }\n\t\t\tconst warning = this._model.warning.read(reader);\n\t\t\tif (!warning) { return undefined; }\n\t\t\treturn { lineNumber: gt.lineNumber, position: new Position(gt.lineNumber, gt.parts[0].column), icon: warning.icon };\n\t\t});\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._useSyntaxHighlighting = this._options.map(o => o.syntaxHighlightingEnabled);\n\t\tthis._extraClassNames = derived(this, reader => {\n\t\t\tconst extraClasses = [...this._options.read(reader).extraClasses ?? []];\n\t\t\tif (this._useSyntaxHighlighting.read(reader)) {\n\t\t\t\textraClasses.push('syntax-highlighted');\n\t\t\t}\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING && this._warningState.read(reader)) {\n\t\t\t\textraClasses.push('warning');\n\t\t\t}\n\t\t\tconst extraClassNames = extraClasses.map(c => ` ${c}`).join('');\n\t\t\treturn extraClassNames;\n\t\t});\n\t\tthis.uiState = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return undefined; }\n\t\t\tconst textModel = this._editorObs.model.read(reader);\n\t\t\tif (textModel !== this._model.targetTextModel.read(reader)) { return undefined; }\n\t\t\tconst ghostText = this._model.ghostText.read(reader);\n\t\t\tif (!ghostText) { return undefined; }\n\n\t\t\tconst replacedRange = ghostText instanceof GhostTextReplacement ? ghostText.columnRange : undefined;\n\n\t\t\tconst syntaxHighlightingEnabled = this._useSyntaxHighlighting.read(reader);\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\t\t\tconst { inlineTexts, additionalLines, hiddenRange, additionalLinesOriginalSuffix } = computeGhostTextViewData(ghostText, textModel, GHOST_TEXT_CLASS_NAME + extraClassNames);\n\n\t\t\tconst currentLine = textModel.getLineContent(ghostText.lineNumber);\n\t\t\tconst edit = new StringEdit(inlineTexts.map(t => StringReplacement.insert(t.column - 1, t.text)));\n\t\t\tconst tokens = syntaxHighlightingEnabled ? textModel.tokenization.tokenizeLinesAt(ghostText.lineNumber, [edit.apply(currentLine), ...additionalLines.map(l => l.content)]) : undefined;\n\t\t\tconst newRanges = edit.getNewRanges();\n\t\t\tconst inlineTextsWithTokens = inlineTexts.map((t, idx) => ({ ...t, tokens: tokens?.[0]?.getTokensInRange(newRanges[idx]) }));\n\n\t\t\tconst tokenizedAdditionalLines: LineData[] = additionalLines.map((l, idx) => {\n\t\t\t\tlet content = tokens?.[idx + 1] ?? LineTokens.createEmpty(l.content, this._languageService.languageIdCodec);\n\t\t\t\tif (idx === additionalLines.length - 1 && additionalLinesOriginalSuffix) {\n\t\t\t\t\tconst t = TokenWithTextArray.fromLineTokens(textModel.tokenization.getLineTokens(additionalLinesOriginalSuffix.lineNumber));\n\t\t\t\t\tconst existingContent = t.slice(additionalLinesOriginalSuffix.columnRange.toZeroBasedOffsetRange());\n\t\t\t\t\tcontent = TokenWithTextArray.fromLineTokens(content).append(existingContent).toLineTokens(content.languageIdCodec);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcontent,\n\t\t\t\t\tdecorations: l.decorations,\n\t\t\t\t};\n\t\t\t});\n\n\t\t\tconst cursorColumn = this._editor.getSelection()?.getStartPosition().column!;\n\t\t\tconst disjointInlineTexts = inlineTextsWithTokens.filter(inline => inline.text !== '');\n\t\t\tconst hasInsertionOnCurrentLine = disjointInlineTexts.length !== 0;\n\t\t\tconst renderData: InlineCompletionViewData = {\n\t\t\t\tcursorColumnDistance: (hasInsertionOnCurrentLine ? disjointInlineTexts[0].column : 1) - cursorColumn,\n\t\t\t\tcursorLineDistance: hasInsertionOnCurrentLine ? 0 : (additionalLines.findIndex(line => line.content !== '') + 1),\n\t\t\t\tlineCountOriginal: hasInsertionOnCurrentLine ? 1 : 0,\n\t\t\t\tlineCountModified: additionalLines.length + (hasInsertionOnCurrentLine ? 1 : 0),\n\t\t\t\tcharacterCountOriginal: 0,\n\t\t\t\tcharacterCountModified: sum(disjointInlineTexts.map(inline => inline.text.length)) + sum(tokenizedAdditionalLines.map(line => line.content.getTextLength())),\n\t\t\t\tdisjointReplacements: disjointInlineTexts.length + (additionalLines.length > 0 ? 1 : 0),\n\t\t\t\tsameShapeReplacements: disjointInlineTexts.length > 1 && tokenizedAdditionalLines.length === 0 ? disjointInlineTexts.every(inline => inline.text === disjointInlineTexts[0].text) : undefined,\n\t\t\t};\n\t\t\tthis._model.handleInlineCompletionShown.read(reader)?.(renderData);\n\n\t\t\treturn {\n\t\t\t\treplacedRange,\n\t\t\t\tinlineTexts: inlineTextsWithTokens,\n\t\t\t\tadditionalLines: tokenizedAdditionalLines,\n\t\t\t\thiddenRange,\n\t\t\t\tlineNumber: ghostText.lineNumber,\n\t\t\t\tadditionalReservedLineCount: this._model.minReservedLineCount.read(reader),\n\t\t\t\ttargetTextModel: textModel,\n\t\t\t\tsyntaxHighlightingEnabled,\n\t\t\t};\n\t\t});\n\t\tthis.decorations = derived(this, reader => {\n\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\tif (!uiState) { return []; }\n\n\t\t\tconst decorations: IModelDeltaDecoration[] = [];\n\n\t\t\tconst extraClassNames = this._extraClassNames.read(reader);\n\n\t\t\tif (uiState.replacedRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.replacedRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'inline-completion-text-to-replace' + extraClassNames, description: 'GhostTextReplacement' }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (uiState.hiddenRange) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: uiState.hiddenRange.toRange(uiState.lineNumber),\n\t\t\t\t\toptions: { inlineClassName: 'ghost-text-hidden', description: 'ghost-text-hidden', }\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfor (const p of uiState.inlineTexts) {\n\t\t\t\tdecorations.push({\n\t\t\t\t\trange: Range.fromPositions(new Position(uiState.lineNumber, p.column)),\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tdescription: 'ghost-text-decoration',\n\t\t\t\t\t\tafter: {\n\t\t\t\t\t\t\tcontent: p.text,\n\t\t\t\t\t\t\ttokens: p.tokens,\n\t\t\t\t\t\t\tinlineClassName: (p.preview ? 'ghost-text-decoration-preview' : 'ghost-text-decoration')\n\t\t\t\t\t\t\t\t+ (this._isClickable ? ' clickable' : '')\n\t\t\t\t\t\t\t\t+ extraClassNames\n\t\t\t\t\t\t\t\t+ p.lineDecorations.map(d => ' ' + d.className).join(' '), // TODO: take the ranges into account for line decorations\n\t\t\t\t\t\t\tcursorStops: InjectedTextCursorStops.Left,\n\t\t\t\t\t\t\tattachedData: new GhostTextAttachedData(this),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshowIfCollapsed: true,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn decorations;\n\t\t});\n\t\tthis._additionalLinesWidget = this._register(\n\t\t\tnew AdditionalLinesWidget(\n\t\t\t\tthis._editor,\n\t\t\t\tderived(reader => {\n\t\t\t\t\t/** @description lines */\n\t\t\t\t\tconst uiState = this.uiState.read(reader);\n\t\t\t\t\treturn uiState ? {\n\t\t\t\t\t\tlineNumber: uiState.lineNumber,\n\t\t\t\t\t\tadditionalLines: uiState.additionalLines,\n\t\t\t\t\t\tminReservedLineCount: uiState.additionalReservedLineCount,\n\t\t\t\t\t\ttargetTextModel: uiState.targetTextModel,\n\t\t\t\t\t} : undefined;\n\t\t\t\t}),\n\t\t\t\tthis._shouldKeepCursorStable,\n\t\t\t\tthis._isClickable\n\t\t\t)\n\t\t);\n\t\tthis._isInlineTextHovered = this._editorObs.isTargetHovered(\n\t\t\tp => p.target.type === MouseTargetType.CONTENT_TEXT &&\n\t\t\t\tp.target.detail.injectedText?.options.attachedData instanceof GhostTextAttachedData &&\n\t\t\t\tp.target.detail.injectedText.options.attachedData.owner === this,\n\t\t\tthis._store\n\t\t);\n\t\tthis.isHovered = derived(this, reader => {\n\t\t\tif (this._isDisposed.read(reader)) { return false; }\n\t\t\treturn this._isInlineTextHovered.read(reader) || this._additionalLinesWidget.isHovered.read(reader);\n\t\t});\n\t\tthis.height = derived(this, reader => {\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight).read(reader);\n\t\t\treturn lineHeight + (this._additionalLinesWidget.viewZoneHeight.read(reader) ?? 0);\n\t\t});\n\n\t\tthis._register(toDisposable(() => { this._isDisposed.set(true, undefined); }));\n\t\tthis._register(this._editorObs.setDecorations(this.decorations));\n\n\t\tif (this._isClickable) {\n\t\t\tthis._register(this._additionalLinesWidget.onDidClick((e) => this._onDidClick.fire(e)));\n\t\t\tthis._register(this._editor.onMouseUp(e => {\n\t\t\t\tif (e.target.type !== MouseTargetType.CONTENT_TEXT) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst a = e.target.detail.injectedText?.options.attachedData;\n\t\t\t\tif (a instanceof GhostTextAttachedData && a.owner === this) {\n\t\t\t\t\tthis._onDidClick.fire(e.event);\n\t\t\t\t}\n\t\t\t}));\n\t\t}\n\n\t\tthis._register(autorunWithStore((reader, store) => {\n\t\t\tif (USE_SQUIGGLES_FOR_WARNING) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst state = this._warningState.read(reader);\n\t\t\tif (!state) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lineHeight = this._editorObs.getOption(EditorOption.lineHeight);\n\t\t\tstore.add(this._editorObs.createContentWidget({\n\t\t\t\tposition: constObservable<IContentWidgetPosition>({\n\t\t\t\t\tposition: new Position(state.lineNumber, Number.MAX_SAFE_INTEGER),\n\t\t\t\t\tpreference: [ContentWidgetPositionPreference.EXACT],\n\t\t\t\t\tpositionAffinity: PositionAffinity.Right,\n\t\t\t\t}),\n\t\t\t\tallowEditorOverflow: false,\n\t\t\t\tdomNode: n.div({\n\t\t\t\t\tclass: 'ghost-text-view-warning-widget',\n\t\t\t\t\tstyle: {\n\t\t\t\t\t\twidth: lineHeight,\n\t\t\t\t\t\theight: lineHeight,\n\t\t\t\t\t\tmarginLeft: 4,\n\t\t\t\t\t\tcolor: 'orange',\n\t\t\t\t\t},\n\t\t\t\t\tref: (dom) => {\n\t\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\t\t(dom as any as WidgetDomElement).ghostTextViewWarningWidgetData = { range: Range.fromPositions(state.position) };\n\t\t\t\t\t}\n\t\t\t\t}, [\n\t\t\t\t\tn.div({\n\t\t\t\t\t\tclass: 'ghost-text-view-warning-widget-icon',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\talignContent: 'center',\n\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t}\n\t\t\t\t\t}, [\n\t\t\t\t\t\trenderIcon((state.icon && 'id' in state.icon) ? state.icon : Codicon.warning),\n\t\t\t\t\t])\n\t\t\t\t]).keepUpdated(store).element,\n\t\t\t}));\n\t\t}));\n\t}\n\n\tpublic static getWarningWidgetContext(domNode: HTMLElement): { range: Range } | undefined {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tconst data = (domNode as any as WidgetDomElement).ghostTextViewWarningWidgetData;\n\t\tif (data) {\n\t\t\treturn data;\n\t\t} else if (domNode.parentElement) {\n\t\t\treturn this.getWarningWidgetContext(domNode.parentElement);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate readonly _useSyntaxHighlighting;\n\n\tprivate readonly _extraClassNames;\n\n\tprivate readonly uiState;\n\n\tprivate readonly decorations;\n\n\tprivate readonly _additionalLinesWidget;\n\n\tprivate readonly _isInlineTextHovered;\n\n\tpublic readonly isHovered;\n\n\tpublic readonly height;\n\n\tpublic ownsViewZone(viewZoneId: string): boolean {\n\t\treturn this._additionalLinesWidget.viewZoneId === viewZoneId;\n\t}\n}\n\nclass GhostTextAttachedData {\n\tconstructor(public readonly owner: GhostTextView) { }\n}\n\ninterface WidgetDomElement {\n\tghostTextViewWarningWidgetData?: {\n\t\trange: Range;\n\t};\n}\n\nfunction computeGhostTextViewData(ghostText: GhostText | GhostTextReplacement, textModel: ITextModel, ghostTextClassName: string) {\n\tconst inlineTexts: { column: number; text: string; preview: boolean; lineDecorations: LineDecoration[] }[] = [];\n\tconst additionalLines: { content: string; decorations: LineDecoration[] }[] = [];\n\n\tfunction addToAdditionalLines(ghLines: readonly IGhostTextLine[], className: string | undefined) {\n\t\tif (additionalLines.length > 0) {\n\t\t\tconst lastLine = additionalLines[additionalLines.length - 1];\n\t\t\tif (className) {\n\t\t\t\tlastLine.decorations.push(new LineDecoration(\n\t\t\t\t\tlastLine.content.length + 1,\n\t\t\t\t\tlastLine.content.length + 1 + ghLines[0].line.length,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t));\n\t\t\t}\n\t\t\tlastLine.content += ghLines[0].line;\n\n\t\t\tghLines = ghLines.slice(1);\n\t\t}\n\t\tfor (const ghLine of ghLines) {\n\t\t\tadditionalLines.push({\n\t\t\t\tcontent: ghLine.line,\n\t\t\t\tdecorations: className ? [new LineDecoration(\n\t\t\t\t\t1,\n\t\t\t\t\tghLine.line.length + 1,\n\t\t\t\t\tclassName,\n\t\t\t\t\tInlineDecorationType.Regular\n\t\t\t\t), ...ghLine.lineDecorations] : [...ghLine.lineDecorations]\n\t\t\t});\n\t\t}\n\t}\n\n\tconst textBufferLine = textModel.getLineContent(ghostText.lineNumber);\n\n\tlet hiddenTextStartColumn: number | undefined = undefined;\n\tlet lastIdx = 0;\n\tfor (const part of ghostText.parts) {\n\t\tlet ghLines = part.lines;\n\t\tif (hiddenTextStartColumn === undefined) {\n\t\t\tinlineTexts.push({ column: part.column, text: ghLines[0].line, preview: part.preview, lineDecorations: ghLines[0].lineDecorations });\n\t\t\tghLines = ghLines.slice(1);\n\t\t} else {\n\t\t\taddToAdditionalLines([{ line: textBufferLine.substring(lastIdx, part.column - 1), lineDecorations: [] }], undefined);\n\t\t}\n\n\t\tif (ghLines.length > 0) {\n\t\t\taddToAdditionalLines(ghLines, ghostTextClassName);\n\t\t\tif (hiddenTextStartColumn === undefined && part.column <= textBufferLine.length) {\n\t\t\t\thiddenTextStartColumn = part.column;\n\t\t\t}\n\t\t}\n\n\t\tlastIdx = part.column - 1;\n\t}\n\tlet additionalLinesOriginalSuffix: RangeSingleLine | undefined = undefined;\n\tif (hiddenTextStartColumn !== undefined) {\n\t\tadditionalLinesOriginalSuffix = new RangeSingleLine(ghostText.lineNumber, new ColumnRange(lastIdx + 1, textBufferLine.length + 1));\n\t}\n\n\tconst hiddenRange = hiddenTextStartColumn !== undefined ? new ColumnRange(hiddenTextStartColumn, textBufferLine.length + 1) : undefined;\n\n\treturn {\n\t\tinlineTexts,\n\t\tadditionalLines,\n\t\thiddenRange,\n\t\tadditionalLinesOriginalSuffix,\n\t};\n}\n\nexport class AdditionalLinesWidget extends Disposable {\n\tprivate _viewZoneInfo: { viewZoneId: string; heightInLines: number; lineNumber: number } | undefined;\n\tpublic get viewZoneId(): string | undefined { return this._viewZoneInfo?.viewZoneId; }\n\n\tprivate _viewZoneHeight;\n\tpublic get viewZoneHeight(): IObservable<number | undefined> { return this._viewZoneHeight; }\n\n\tprivate readonly editorOptionsChanged;\n\n\tprivate readonly _onDidClick;\n\tpublic readonly onDidClick;\n\n\tprivate readonly _viewZoneListener;\n\n\treadonly isHovered;\n\n\tprivate hasBeenAccepted;\n\n\tconstructor(\n\t\tprivate readonly _editor: ICodeEditor,\n\t\tprivate readonly _lines: IObservable<{\n\t\t\ttargetTextModel: ITextModel;\n\t\t\tlineNumber: number;\n\t\t\tadditionalLines: LineData[];\n\t\t\tminReservedLineCount: number;\n\t\t} | undefined>,\n\t\tprivate readonly _shouldKeepCursorStable: boolean,\n\t\tprivate readonly _isClickable: boolean,\n\t) {\n\t\tsuper();\n\t\tthis._viewZoneHeight = observableValue<undefined | number>('viewZoneHeight', undefined);\n\t\tthis.editorOptionsChanged = observableSignalFromEvent('editorOptionChanged', Event.filter(\n\t\t\tthis._editor.onDidChangeConfiguration,\n\t\t\te => e.hasChanged(EditorOption.disableMonospaceOptimizations)\n\t\t\t\t|| e.hasChanged(EditorOption.stopRenderingLineAfter)\n\t\t\t\t|| e.hasChanged(EditorOption.renderWhitespace)\n\t\t\t\t|| e.hasChanged(EditorOption.renderControlCharacters)\n\t\t\t\t|| e.hasChanged(EditorOption.fontLigatures)\n\t\t\t\t|| e.hasChanged(EditorOption.fontInfo)\n\t\t\t\t|| e.hasChanged(EditorOption.lineHeight)\n\t\t));\n\t\tthis._onDidClick = this._register(new Emitter<IMouseEvent>());\n\t\tthis.onDidClick = this._onDidClick.event;\n\t\tthis._viewZoneListener = this._register(new MutableDisposable());\n\t\tthis.isHovered = observableCodeEditor(this._editor).isTargetHovered(\n\t\t\tp => isTargetGhostText(p.target.element),\n\t\t\tthis._store\n\t\t);\n\t\tthis.hasBeenAccepted = false;\n\n\t\tif (this._editor instanceof CodeEditorWidget && this._shouldKeepCursorStable) {\n\t\t\tthis._register(this._editor.onBeforeExecuteEdit(e => this.hasBeenAccepted = e.source === 'inlineSuggestion.accept'));\n\t\t}\n\n\t\tthis._register(autorun(reader => {\n\t\t\t/** @description update view zone */\n\t\t\tconst lines = this._lines.read(reader);\n\t\t\tthis.editorOptionsChanged.read(reader);\n\n\t\t\tif (lines) {\n\t\t\t\tthis.hasBeenAccepted = false;\n\t\t\t\tthis.updateLines(lines.lineNumber, lines.additionalLines, lines.minReservedLineCount);\n\t\t\t} else {\n\t\t\t\tthis.clear();\n\t\t\t}\n\t\t}));\n\t}\n\n\tpublic override dispose(): void {\n\t\tsuper.dispose();\n\t\tthis.clear();\n\t}\n\n\tprivate clear(): void {\n\t\tthis._viewZoneListener.clear();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\t\t});\n\t}\n\n\tprivate updateLines(lineNumber: number, additionalLines: LineData[], minReservedLineCount: number): void {\n\t\tconst textModel = this._editor.getModel();\n\t\tif (!textModel) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst { tabSize } = textModel.getOptions();\n\n\t\tthis._editor.changeViewZones((changeAccessor) => {\n\t\t\tconst store = new DisposableStore();\n\n\t\t\tthis.removeActiveViewZone(changeAccessor);\n\n\t\t\tconst heightInLines = Math.max(additionalLines.length, minReservedLineCount);\n\t\t\tif (heightInLines > 0) {\n\t\t\t\tconst domNode = document.createElement('div');\n\t\t\t\trenderLines(domNode, tabSize, additionalLines, this._editor.getOptions(), this._isClickable);\n\n\t\t\t\tif (this._isClickable) {\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'mousedown', (e) => {\n\t\t\t\t\t\te.preventDefault(); // This prevents that the editor loses focus\n\t\t\t\t\t}));\n\t\t\t\t\tstore.add(addDisposableListener(domNode, 'click', (e) => {\n\t\t\t\t\t\tif (isTargetGhostText(e.target)) {\n\t\t\t\t\t\t\tthis._onDidClick.fire(new StandardMouseEvent(getWindow(e), e));\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t}\n\n\t\t\t\tthis.addViewZone(changeAccessor, lineNumber, heightInLines, domNode);\n\t\t\t}\n\n\t\t\tthis._viewZoneListener.value = store;\n\t\t});\n\t}\n\n\tprivate addViewZone(changeAccessor: IViewZoneChangeAccessor, afterLineNumber: number, heightInLines: number, domNode: HTMLElement): void {\n\t\tconst id = changeAccessor.addZone({\n\t\t\tafterLineNumber: afterLineNumber,\n\t\t\theightInLines: heightInLines,\n\t\t\tdomNode,\n\t\t\tafterColumnAffinity: PositionAffinity.Right,\n\t\t\tonComputedHeight: (height: number) => {\n\t\t\t\tthis._viewZoneHeight.set(height, undefined); // TODO: can a transaction be used to avoid flickering?\n\t\t\t}\n\t\t});\n\n\t\tthis.keepCursorStable(afterLineNumber, heightInLines);\n\n\t\tthis._viewZoneInfo = { viewZoneId: id, heightInLines, lineNumber: afterLineNumber };\n\t}\n\n\tprivate removeActiveViewZone(changeAccessor: IViewZoneChangeAccessor): void {\n\t\tif (this._viewZoneInfo) {\n\t\t\tchangeAccessor.removeZone(this._viewZoneInfo.viewZoneId);\n\n\t\t\tif (!this.hasBeenAccepted) {\n\t\t\t\tthis.keepCursorStable(this._viewZoneInfo.lineNumber, -this._viewZoneInfo.heightInLines);\n\t\t\t}\n\n\t\t\tthis._viewZoneInfo = undefined;\n\t\t\tthis._viewZoneHeight.set(undefined, undefined);\n\t\t}\n\t}\n\n\tprivate keepCursorStable(lineNumber: number, heightInLines: number): void {\n\t\tif (!this._shouldKeepCursorStable) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cursorLineNumber = this._editor.getSelection()?.getStartPosition()?.lineNumber;\n\t\tif (cursorLineNumber !== undefined && lineNumber < cursorLineNumber) {\n\t\t\tthis._editor.setScrollTop(this._editor.getScrollTop() + heightInLines * this._editor.getOption(EditorOption.lineHeight));\n\t\t}\n\t}\n}\n\nfunction isTargetGhostText(target: EventTarget | null): boolean {\n\treturn isHTMLElement(target) && target.classList.contains(GHOST_TEXT_CLASS_NAME);\n}\n\nexport interface LineData {\n\tcontent: LineTokens; // Must not contain a linebreak!\n\tdecorations: LineDecoration[];\n}\n\nfunction renderLines(domNode: HTMLElement, tabSize: number, lines: LineData[], opts: IComputedEditorOptions, isClickable: boolean): void {\n\tconst disableMonospaceOptimizations = opts.get(EditorOption.disableMonospaceOptimizations);\n\tconst stopRenderingLineAfter = opts.get(EditorOption.stopRenderingLineAfter);\n\t// To avoid visual confusion, we don't want to render visible whitespace\n\tconst renderWhitespace = 'none';\n\tconst renderControlCharacters = opts.get(EditorOption.renderControlCharacters);\n\tconst fontLigatures = opts.get(EditorOption.fontLigatures);\n\tconst fontInfo = opts.get(EditorOption.fontInfo);\n\tconst lineHeight = opts.get(EditorOption.lineHeight);\n\n\tlet classNames = 'suggest-preview-text';\n\tif (isClickable) {\n\t\tclassNames += ' clickable';\n\t}\n\n\tconst sb = new StringBuilder(10000);\n\tsb.appendString(`<div class=\"${classNames}\">`);\n\n\tfor (let i = 0, len = lines.length; i < len; i++) {\n\t\tconst lineData = lines[i];\n\t\tconst lineTokens = lineData.content;\n\t\tsb.appendString('<div class=\"view-line');\n\t\tsb.appendString('\" style=\"top:');\n\t\tsb.appendString(String(i * lineHeight));\n\t\tsb.appendString('px;width:1000000px;\">');\n\n\t\tconst line = lineTokens.getLineContent();\n\t\tconst isBasicASCII = strings.isBasicASCII(line);\n\t\tconst containsRTL = strings.containsRTL(line);\n\n\t\trenderViewLine(new RenderLineInput(\n\t\t\t(fontInfo.isMonospace && !disableMonospaceOptimizations),\n\t\t\tfontInfo.canUseHalfwidthRightwardsArrow,\n\t\t\tline,\n\t\t\tfalse,\n\t\t\tisBasicASCII,\n\t\t\tcontainsRTL,\n\t\t\t0,\n\t\t\tlineTokens,\n\t\t\tlineData.decorations,\n\t\t\ttabSize,\n\t\t\t0,\n\t\t\tfontInfo.spaceWidth,\n\t\t\tfontInfo.middotWidth,\n\t\t\tfontInfo.wsmiddotWidth,\n\t\t\tstopRenderingLineAfter,\n\t\t\trenderWhitespace,\n\t\t\trenderControlCharacters,\n\t\t\tfontLigatures !== EditorFontLigatures.OFF,\n\t\t\tnull,\n\t\t\tnull,\n\t\t\t0\n\t\t), sb);\n\n\t\tsb.appendString('</div>');\n\t}\n\tsb.appendString('</div>');\n\n\tapplyFontInfo(domNode, fontInfo);\n\tconst html = sb.build();\n\tconst trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n\tdomNode.innerHTML = trustedhtml as string;\n}\n\nexport const ttPolicy = createTrustedTypesPolicy('editorGhostText', { createHTML: value => value });\n"]}
@@ -308,6 +308,7 @@ let InlineEditsGutterIndicator = class InlineEditsGutterIndicator extends Dispos
308
308
  zIndex: '20',
309
309
  position: 'absolute',
310
310
  backgroundColor: this._gutterIndicatorStyles.map(v => v.background),
311
+ // eslint-disable-next-line local/code-no-any-casts
311
312
  ['--vscodeIconForeground']: this._gutterIndicatorStyles.map(v => v.foreground),
312
313
  border: this._gutterIndicatorStyles.map(v => `1px solid ${v.border}`),
313
314
  boxSizing: 'border-box',